ESP8266 DHT11与阿里云物联网平台微信小程序的物联网系统简明教程

        实现1个温湿度远程监测的物联网系统,ESP8266通过DHT11采集温湿度,通过wifi接入网络,以mqtt协议接入阿里云物联网平台,由阿里云物联网平台实现数据流转,微信小程序作为客户端远程监测温湿度。

        

准备工作:

·安装好AD18,用于Esp8266单板设计,参考《AD18安装教程》

·安装好Arduino,用于Esp8266程序设计,参考《Arduino安装教程》

·安装好微信开发者工具,用于微信小程序设计,参考《微信开发者工具安装教程》

        本教程不是专门讲述某一个具体专业,而是以实现物联网系统为主线,通过简明的步骤使读者快速实现本案例并掌握物联网系统的基本开发方法,在此过程中会讲解所涉及的嵌入式软硬件设计、平台设计和微信小程序设计。读者在学习本案例后,能够在此基础上扩展开发属于自己的物联网系统。

        物联网系统可分为嵌入式硬件设计、嵌入式软件设计、物联网平台设计、客户端设计。本案例相与之对应,实现过程分为Esp8266单板设计、Esp8266程序设计、阿里云物联网平台部署、微信小程序设计及系统调试5个部分。

        

        一、Esp8266单板设计

        Esp8266单板设计包括绘制原理图、绘制PCB图、导出加工文件和平台单板加工4个步骤。细节可查看《Esp8266单板设计详细步骤》。

        1、绘制原理图

        P1是USB接口,通过USB线给单板供电,供电电压+5V,在调试模式下可以使用USB转串口模块通过该接口烧写程序。1脚与5脚分别为+5V和GND,给单板供电;2脚和3脚分别是RX1和TX1,与ESP-12F实现串口通信。

        P2是DHT11接口,1脚和4脚分别是+3.3V和GND,给DHT11供电;2脚是DATA脚,是DHT11数据口,通过R5上拉,由ESP-12F通过GPIO2读取DHT11的温湿度数据。

        P3是模式设置接口,若需要烧写程序,需将P3短接,将GPIO0接地,然后上电,ESP-12F进入烧写模式。与之配合的是GPIO15通过R4下拉至GND。

        U1是ESP-12F,是ESP8266为内核的wifi模组,是物美价廉的物联网模块,通过wifi接入网络,可编程读取传感器数据。1脚通过R1上拉至3.3V,在上电时启动复位一次;3脚通过R2上拉至3.3V,使模块处于工作使能状态。C1和C2是滤波电容,提高模块的工作稳定性。

        U2是电压转换模块,P1口供电是5V,ESP-12和DHT11工作电压是3.3V,所以需要将5V转换为3.3V。C3、C4、C5、C6为滤波电容,提高供电质量。   

     2、绘制PCB图

        单板22*47mm,通过P1供电,ESP-12F读取DHT11的温湿度数据,通过wifi接入网络,将温湿度数据上传物联网平台。

        3、导出加工文件

        加工文件只需要3个,分别是器件清单(test.csv)、坐标文件(Pick Place for test.csv)和PCB文件(test.rar)。

        4、平台单板加工

        平台单板加工包括2个步骤,分别是PCB加工和SMT加工。

        ·PCB加工

        ·SMT加工

        二、Esp8266程序设计

        基于Arduino的Esp8266程序如下,可以复制到Arduino中直接编译并烧写到单板中,注意根据实际情况,修改wifi接入参数(ssid和password改为所接入wifi的用户名和密码)和阿里云接入参数(BrokerAddress、define BrokerPort、define ClientID、UserName和Password改为自己设备的mqtt接入参数,PublishTopic改为自己设备的主题)。

#include <ESP8266WiFi.h>//添加ESP8266用于WiFi的头文件
#include <PubSubClient.h>//添加用于MQTT客户端的头文件
#include <DHTesp.h>//添加dht11头文件

char TempHum[]={"{\"hum\":00,\"temp\":00}"};//声明1个数组,json格式,用于存放温湿度  
char num[]={"0123456789"};//声明1个字符数组

const char *ssid = "test";//wifi的名字         
const char *password = "12345678";//wifi的密码             
                            
#define BrokerAddress   "a1EoVnkG0iL.iot-as-mqtt.cn-shanghai.aliyuncs.com" //定义阿里云MQTT服务地址
#define BrokerPort     1883                                                //定义MQTT服务端口
#define ClientID  "a1EoVnkG0iL.DeviceTest|securemode=2,signmethod=hmacsha256,timestamp=1706751548562|"                //定义MQTT Client ID
#define UserName   "DeviceTest&a1EoVnkG0iL"                                //定义MQTT User Name
#define Password   "98209e148b8d8b3a4bc3647b40275dde7185795ab90399fbfa6672c0f6e9743d"              //定义MQTT Password

#define SubscribeTopic "/a1EoVnkG0iL/DeviceTest/get"                       //定义订阅的Topic
#define PublishTopic "/a1EoVnkG0iL/DeviceTest/update"                      //定义发布的Topic

DHTesp dht;
/******************************************************/
void MqttCallback(char* topic, byte* payload, unsigned int length);
WiFiClient EspClient;
PubSubClient client(BrokerAddress, BrokerPort, &MqttCallback, EspClient);

void SetupWifi() {
  delay(10);
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while(WiFi.status()!=WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }

  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void MqttCallback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

void setup() {
  Serial.begin(115200);//设置串口
  SetupWifi();//设置wifi
  client.setServer(BrokerAddress,1883);//设置MQTT服务地址和端口
  client.setCallback(MqttCallback);//回调函数
  client.setClient(EspClient);
  client.connect(ClientID,UserName,Password);//设备接入物联网云平台
  if(!client.connected())//判断是否接入成功
    Serial.print("Connected Failed!\n");
  else{
    Serial.print("Connected Ok!\n");
    client.subscribe(SubscribeTopic);//订阅Topic
  } 
  dht.setup(2, DHTesp::DHT11); 
}

void loop() {
  client.loop();//关键,可以侦测回调函数中数据是否到来
  int h = dht.getHumidity();//读取湿度
  int t = dht.getTemperature();//读取温度

  TempHum[7]=num[h/10];//存放湿度
  TempHum[8]=num[h%10];

  TempHum[17]=num[t/10];//存放温度
  TempHum[18]=num[t%10]; 
  client.publish(PublishTopic,TempHum);//每隔一定时间向平台发送1次温湿度数据
  delay(1000);
}

        三、阿里云物联网平台部署

        物联网平台采用阿里云物联网平台,操作步骤分为创建产品、添加设备和云产品流转3个。另外可通过日志服务查看上下行数据。

        1、在物联网平台的设备管理中创建1个产品

        2、在产品中添加2个设备,WxTest和DeviceTest。

        获取WxTest的mqtt连接参数,设置到微信小程序中;获取DeviceTest的mqtt连接参数,设置到esp8266程序中。

        3、在物联网平台消息转发的云产品流转中创建规则,实现将ESP8266设备采集的温湿度转发给微信小程序。

        4、在物联网平台监控运维中的日志服务可查看上行与下行的数据。

        四、微信小程序设计

        微信小程序设计过程可查看《微信小程序设计详细步骤》

        以上是实现微信小程序远程获取Esp8266采集到温湿度的主要过程,需要详细的步骤可以加微信(19844267987)了解。

作者:XinHeKJ2024

物联沃分享整理
物联沃-IOTWORD物联网 » ESP8266 DHT11与阿里云物联网平台微信小程序的物联网系统简明教程

发表评论