实验概述:
使用WeMos D1开发板(基于ESP8266 -12F),接入blinker IOT平台,搭建一个简易物联网应用,来达到快速学会该平台基本使用的目的。具体实现是将BME280传感器和RGB LED 连接至D1并完成设备端代码编写,同时利用blinker APP 可视化搭建并配置手机应用,最终实现本地温度、湿度、海拔、压强数据的手机端查看和手机对于RGB LED的远程控制。
实验材料:
WeMos D1 开发板(这应该算是最便宜的ESP8266开发板了,大约10RMB)、BME280高精度温湿度海拔压强传感器、RGB LED灯、手机、杜邦线若干
Arduino开发环境配置:
1.点击文件->首选项,在附加开发板管理网址内填入:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
2.点击工具->开发板管理器,找到ESP8266拓展库并安装。
3.点击工具->开发板,选中相应的开发板并设置好端口。
***注意:***可以先跑一下Demo,检验硬件是否正常,如果Demo出现编译错误,那么可能是与电脑上安装的gcc/g++编译器发生了冲突,卸载即可,此外如果使用的是ESP8266模块,可能需要先刷一下AT固件。
Arduino代码:
/*
@author : JRH
*/
#define BLINKER_WIFI//以WiFi方式接入blinker
#include <Blinker.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
//定义LED灯引脚
#define LED_R 16
#define LED_G 5
#define LED_B 4
//BME280读取海拔的一个参数
#define altitude_num 1013.25//
char auth[] = "0cadfdsg1a552";//定义Device Secret Key,从blinker APP获取
char ssid[] = "*********";//WiFi name
char pswd[] = "*********";//WiFi password
// 新建组件对象
BlinkerButton button_R("btn-86a");//红灯按钮
BlinkerButton button_G("btn-r3m");//绿灯按钮
BlinkerButton button_B("btn-gdl");//蓝灯按钮
BlinkerNumber Number1("num-tnm");//压强数据
BlinkerNumber Number2("num-p8e");//海拔数据
BlinkerNumber Number3("num-796");//温度数据
BlinkerNumber Number4("num-hi6");//湿度数据
Adafruit_BME280 bme;//实例化BME280对象
//数据定义
double pressure;
double altitude;
double temperature;
double humidity;
void R_callback(const String &state)//红灯回调函数
{
digitalWrite(LED_R,!digitalRead(LED_R));
BLINKER_LOG("R_val:",state);
}
void G_callback(const String &state)//绿灯回调函数
{
digitalWrite(LED_G,!digitalRead(LED_G));
BLINKER_LOG("G_val:",state);
}
void B_callback(const String &state)//蓝灯回调函数
{
digitalWrite(LED_B,!digitalRead(LED_B));
BLINKER_LOG("B_val:",state);
}
void dataRead(const String & data)//本地数据发送
{
BLINKER_LOG("Blinker readString: ", data);
Number1.print(pressure);
Number2.print(altitude);
Number3.print(temperature);
Number4.print(humidity);
}
void setup()
{
// 初始化串口
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
// 初始化LED灯
pinMode(LED_R,OUTPUT);
pinMode(LED_G,OUTPUT);
pinMode(LED_B,OUTPUT);
digitalWrite(LED_R,HIGH);
digitalWrite(LED_G,HIGH);
digitalWrite(LED_B,HIGH);
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
//回调函数注册
button_R.attach(R_callback);
button_G.attach(G_callback);
button_B.attach(B_callback);
//初始化BME280传感器
if(!bme.begin(0x76)){
Serial.print("BME is Wrong!");
while(1);
}
}
void loop() {
//Blinker运行
Blinker.run();
//读取压强、海拔、温度、湿度数据
pressure=bme.readPressure()/100;
altitude=bme.readAltitude(altitude_num);
temperature=bme.readTemperature();
humidity=bme.readHumidity();
}
blinker APP 搭建与配置:
APP需要4个数据显示组件用来显示接收到的温度、湿度、海拔、压强数据,同时需要三个按钮组件来分别控制R、G、B三种色光。
结束语:
君子善假于物,借助于强大的<Blinker.h>,原本要写好几百行的东西,现在百十行就能实现,真的能像社区宣传的那样“3分钟实现手机控制Arduino”。