要实现的效果:实时将室内温度上报到手机APP,可远程查看信息。
需要的元器件:esp01s模块、dht11温湿度传感器、两节5号电池,杜邦线若干。
实现思路:利用esp模块的联网和端口能力,将温湿度传感器的数据通过mqtt协议转发到手机APP。
详细操作:
1.esp模块串口调试
程序烧录需要通过esp模块的串口,这里使用USB转TTL模块,模块电路图和接线如下图所示,
esp01s是安信可公司根据乐鑫esp8266模块开发的,其中CH_PD引脚对应01s的en模块,引脚说明如下:
需要注意的是,mac平台需要安装usbttl驱动,根据自己的转接设备下载驱动,这里使用的驱动是CH340系列,驱动安装成功后,系统报告会有usb_serial
2.程序烧录
这里使用的是arduino ide,需要添加扩展板支持:http://arduino.esp8266.com/stable/package_esp8266com_index.json
然后下载esp8266的扩展板支持:
需要注意的是我这里没有使用esp的nodemcu,所以扩展板选择:
做完这些后就可以愉快的烧录程序了~
3.程序编写
arduino ide需要下载两个支持库:
SimpleDHT库提供了读取dht11传感器数据的简单接口,PubSubClient提供了mqtt功能。
主要代码
void setup() {
// 设定串口波特率 Serial.begin(115200);
// 设置WiFi setup_wifi();
// 配置mqtt代理服务和信息接收 client.setServer(mqtt_server, 1883); client.setCallback(callback); } void loop() { if (!client.connected()) {
// 重新连接网络 reconnect(); } client.loop(); // start working... Serial.println("================================="); Serial.println("Sample DHT11..."); // read without samples. byte temperature = 0; byte humidity = 0; int err = SimpleDHTErrSuccess;
// 读取温湿度信息 if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) { Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000); return; } Serial.print("Sample OK: "); Serial.print((int)temperature); Serial.print(" *C, "); Serial.print((int)humidity); Serial.println(" H"); // 构建mqtt发布信息 String payload = "{"; payload += ""temp":"; payload += temperature; payload += ","; payload += ""humidity":"; payload += humidity; payload += "}"; // Send payload char attributes[100]; payload.toCharArray( attributes, 100 );
// 将信息发布到相应的主题
client.publish(TOPIC, attributes );
// DHT11 sampling rate is 1HZ. delay(1500); }
完整程序代码:esp_dhtt
App和运行效果: