esp8266+MQTT+DHT11(温湿度计) platformio
esp8266 + MQTT + DHT11(温湿度计)
连线
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <PubSubclient.h>
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT11
// wifi info
const char *SSID = "优美屋205";
const char *PASSWORD = "18111549";
// mqtt info
const char *MQTT_SERVER = "broker-cn.emqx.io";
const int MQTT_PROT = 1883;
// mqtt 主题
const char *MQTT_TOPIC_ONLINE = "xapi/home/online";
const char *MQTT_TOPIC_UPDATE = "xapi/home/update";
const char *CLIENT_ID = "esp8266-457065e5-f063-474e-2saf-cacf5cb52af5";
DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
void init_wifi();
void mqtt_reconnect();
void mqtt_msg_callback(char *topic, byte *payload, unsigned int length);
void wb_update(); // 温湿度 发送
float h_DHT11 = 0; // 湿度
float t_DHT11 = 0; // 温度
void setup() {
Serial.begin(115200);
init_wifi();
client.setServer(MQTT_SERVER, MQTT_PROT);
client.setCallback(mqtt_msg_callback);
dht.begin();
}
void loop() {
if(!client.connected()){
mqtt_reconnect();
}
client.loop();
wb_update();
}
void init_wifi(){
Serial.println("连接中...");
Serial.println(SSID);
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
}
void mqtt_reconnect(){
while (!client.connected())
{
Serial.print("正在尝试MQTT连接");
if(client.connect(CLIENT_ID)){
Serial.println("已连接");
client.publish(MQTT_TOPIC_ONLINE, "online"); // 发布
}else{
Serial.print("错误, rc");
Serial.print(client.state());
Serial.println("等待 5s");
delay(5000);
}
}
}
void mqtt_msg_callback(char *topic, byte *payload, unsigned int length){
Serial.print("Message arrived [");
Serial.print(topic); // 打印主题信息
Serial.print("] ");
}
void wb_update(){
if(client.connected()){
h_DHT11 = dht.readHumidity();
t_DHT11 = dht.readTemperature();
if (isnan(h_DHT11) || isnan(t_DHT11)) {
h_DHT11 = 0;
t_DHT11 = 0;
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
String messageString ="{wendu:" + String(t_DHT11) + "," + "shidu:" + String(h_DHT11) + "}";
char publishMsg[messageString.length() + 1];
strcpy(publishMsg, messageString.c_str());
Serial.print(F("湿度: "));
Serial.print(h_DHT11);
Serial.print(F("% 温度: "));
Serial.print(t_DHT11);
Serial.print(F("°C "));
Serial.printf("");
delay(1000);
client.publish(MQTT_TOPIC_UPDATE, publishMsg);
delay(500);
}
}
esp8266+MQTT+DHT11(温湿度计) platformio的更多相关文章
- (二 -3-1) 天猫精灵接入Home Assistant-自动发现Mqtt设备--灯系列 实战
#本片教程介绍了具体如何实现天猫精灵控制一个灯. 前提: HASS平台 你已经搭建一个可以在公网IP访问到的HASS平台--- 我用的是租了阿里云服务器,买了个域名,ubuntu1604系统 你已经搭 ...
- (二 -3) 天猫精灵接入Home Assistant-自动发现Mqtt设备--灯系列
参考网站 1该mqtt光平台可以让您控制您的MQTT启用灯.它支持设置亮度,色温,效果,闪烁,开/关,RGB颜色,过渡,XY颜色和白色值. https://www.home-assistant.io/ ...
- 使用esp32-Arduino+PubSubClient+mqtt 上传数据到中移动OneNet
使用esp32-doit-dev-v1开发板,测试mqtt协议, 发布(publish)到onenet 平台.注意:1.使用的mqtt arduino 客户端是 pubsubclient 库.其默认是 ...
- 玩转OneNET物联网平台之MQTT服务④ —— 远程控制LED(设备自注册)+ Android App控制
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- 玩转OneNET物联网平台之MQTT服务③ —— 远程控制LED(设备自注册)
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- 玩转OneNET物联网平台之MQTT服务② —— 远程控制LED
1.理论基础 参考博主线上博文: 玩转PubSubClient MQTT库 玩转OneNET物联网平台之简介 玩转OneNET物联网平台之MQTT服务① 2.远程控制LED 2.1 实验材料 ...
- MQTT 协议学习:008-在STM32上移植MQTT
前言 通过前面了解MQTT有关概念.分析了有关的报文,我们对于这个协议也有了更深的认识.但纸上谈来终觉浅,绝知此事要躬行. 本文参考:<STM32+W5500+MQTT+Android实现远程数 ...
- Arduino IDE开发ESP8266-01S连接MQTT服务器 控制继电器点亮LED
准备条件: 1.Arduino IDE 2.ESP-01S模块 2.MQTT服务器 3.手机热点或路由器热点 Wi-Fi芯片 默认订阅的主题是 "开关控制" 当你发送主题 &q ...
- ESP8266相关知识笔记
1.ESP8266 可以用来做串口透传,PWM 调控,远程控制开关:控制插座.开关.电器等.2.ESP8266有几种不同的使用方式,适用于不同水平的开发工作者. 使用AT指令进行操作:这是最常见的方式 ...
- 使用ST-Link下载程序出现Error:Flash Download Failed-“Cortex-M3“ 解决详细步骤(附图)
我一直用stm32 f407开发. 最近要学mqtt与阿里云联网之类的课程,因为没有做过,所以网上搜了一遍,结果全是stm32 f103c8t6的例程. 后来我就搬出我的f103最小系统版 (这个就为 ...
随机推荐
- mmdetection使用未定义backbone训练
首先找到你需要用到的 backbone,一般有名的backbone 都会在github有相应的代码开源和预训练权重提供 本文以mobilenetv3 + fastercnn 作为举例,在mmdetec ...
- .net core mvc 跳转LoginPath时端口缺失
在使用nginx部署.net core mvc的程序时,假如我使用的是5002端口,并且当访问站点时如果未登录,则跳转到登录页面.可是最后却发现跳转的时候端口丢失了,那是因为我配置的是 p ...
- 【Python + Appium】之元素定位总结(更新)
一.ID定位 uiautomatorviewer里面的:resource-id driver.find_element(By.ID,"com.csks.businesses:id/tv_nu ...
- 【YashanDB数据库】Mybatis-plus分页框架识别不到Yashandb
问题描述 Mybatis-plus 无法识别Yashandb数据库,应用有如下报错. 问题分析 从Mybatis-plus源码里面看到,getDBtype函数是没有Yashandb的方言. 当Yash ...
- Openharmony 跑 CV 应用
最近有个项目,老同学让帮忙验证一个在ARM 板上跑 OpenHarmony,然后再集成一个CV算法上去,写这个文章主要是整理一下思路.如果有思路不对的地方,也烦请指出. 1. 个人做纯软件比较多,所以 ...
- 在 Web 中判断页面是不是刷新
在 Web 开发中,我们经常需要区分用户是否通过刷新操作重新加载了页面.这一操作可能是由用户手动刷新(如按下 F5 键或点击浏览器刷新按钮)或通过浏览器自动重新加载.判断页面是否刷新有助于开发者优化用 ...
- HTML – HTML Tags & Semantic HTML 语义化 HTML
前言 HTML tag 有 100 多个, 有些是功能形的, 非用不可, 有些是为了语义化对 screen reader 友好 (给眼睛有残缺的人也可以获取清晰的网站信息). 语义化是很重要的, 有些 ...
- String 的 intern() 方法
问题: String s1 = "a" + "b"; //创建了几个对象? String s2 = new String("ab"); // ...
- Hugging Face 论文平台 Daily Papers 功能全解析
文/ Adeena, 在快速发展的研究领域,保持对最新进展的关注至关重要.为了帮助开发者和研究人员跟踪 AI 领域的前沿动态,Hugging Face 推出了 Daily Papers 页面.自发布以 ...
- Java日期时间API系列18-----Jdk8中java.time包中的新的日期时间API类,java日期计算5,其他常用日期计算,星期计算,闰年计算等
通过Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析中可以看出,java8中的方法特别丰富,一些常用的计算如星期计算,闰年计算等 ...