arduino+esp8266连接阿里云实现远程温湿度监控

Arduino UNO主控板
Arduino由一个基于Atmel AVR单片机的开放源码的硬件平台和一套专门的开发环境组成。Arduino UNO[1]是目前使用最广泛的Arduino控制器,具有Arduino的所有基本功能。UNO的处理器核心是ATmega328,它包括14路数字输入/输出接口(其中6路可作为PWM输出,6路模拟输入),一个16 MHz晶体振荡器,一个USB接口,一个电源插座,一个ICSP接口和一个复位按钮,其结构和引脚电路如图1所示[2]。在掌握了Arduino UNO开发技术以后,就可以将自己编写的代码轻松地移植到其他型号的控制器上,可以用来开发交互产品,比如可以读取大量的开关和传感器信号,并且可以控制各式各样的电灯、电机和其他物理电子设备等。
ESP8266WIFI模块
ESP8266WIFI模块的信号端与智能家用电器设备相连接,所述家用摄像头通过连接ESP8266WIFI模块的WIFI信号实现将监控视频信息实时经ESP8266WIFI模块传送到互联网上,所述ESP8266WIFI模块的电源端电性连接电源模块,所述ESP8266WIFI模块的信号端通过无线网络与家用路由器相连接,所述家用路由器通过互联网通信网络与智能手机APP相连接,所述ESP8266WIFI模块的I/O引脚处还连接有数字温度传感器。

三.流程图
1.总流程图
arduino+esp8266连接阿里云实现远程温湿度监控_第1张图片
图3.1.1硬件系统构成

arduino+esp8266连接阿里云实现远程温湿度监控_第2张图片
图3.1.2端到端交互功能图

arduino+esp8266连接阿里云实现远程温湿度监控_第3张图片
图3.1.3程序运行流程图
DHT11采集温湿度数据发送给Arduino uno板,对数据进行处理之后,发送到ESP8266,板子连接手机热点连接网络。在阿里云物联网平台创建属于自己的产品和设备,ESP8266板通过MQTT-TCP连接通信接入阿里云物联网平台的设备,通过报文发送温湿度数据到设备,在物联网平台实时监测温湿度的变化。在物联网平台进行可视化搭建,实现Web页面和手机App对温湿度实时检测。

2.分程序流程图

arduino+esp8266连接阿里云实现远程温湿度监控_第4张图片
图3.2.1 arduino uno板程序运行图

Arduino uno板获取由DHT11采集的温湿度数据,通过数据处理后通过串口通信RX、TX线发送给ESP8266模块,串口打印温湿度数据输出。

arduino+esp8266连接阿里云实现远程温湿度监控_第5张图片
图3.2.2 ESP8266程序运行图
ESP8266模块连接手机热点上网,通过MQTT-TCP连接通信协议接入阿里云创建的相关设备(详见阿里云MQTT参考文档),将arduino uno发来的温湿度数据通过报文发送到云平台,实现实时监测温湿度的变化。
四.关键程序代码
UNO:
Serial.begin(115200);初始化串口
int chk = DHT11.read(DHT11PIN);读取DHT11引脚数据并赋值
d = (float)DHT11.humidity;读取DHT湿度并赋值
t = (float)DHT11.temperature;读取DHT温度并赋值
Serial.print(d);串口打印湿度
delay(1500);延时1.5秒

ESP8266:
void wifiInit() //wifi初始化类
{
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWD);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println(“WiFi not Connect”);
}
void mqttCheckConnect() 连接MQTT的类 (详见MQTT-Tcp连接通信)
{
while (!client.connected())
{
Serial.println(“Connecting to MQTT Server …”);
if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD))
{
Serial.println(“MQTT Connected!”);
}
else
{
Serial.print(“MQTT Connect err:”);
Serial.println(client.state());
delay(5000);
}
}
}

void mqttIntervalPost() MQTT报文发送的类
{
char param[32];
char jsonBuf[128];
res(); 接收arduino串口发送来得数据
int T = t.toInt();
int D = d.toInt();
int humidity = D/dht.getHumidity()/;
int temperature = T /dht.getTemperature()/;
sprintf(param, “{“humidity”:%d,“Temperature”:%d}”, humidity, temperature);
// sprintf(param, “{“mtemp”:%d}”, temperature);
sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
Serial.println(jsonBuf);
boolean d = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
Serial.print(“publish-- 失败:0;成功:”);
Serial.println(d);

新手,请大家多多指正。

你可能感兴趣的:(arduino,wifi)