OLED+MQTT 实现土壤 温湿度 线上线下展示

本文为大家讲解基于MQTT协议和传感器的综合使用。希望对你的学习有所帮助。

实验目的

借助HA,实现随时随地的观看当前温度,湿度,以及土壤湿度。并借助OLED屏幕,实时显示,方便在现场检测数据。

OLED+MQTT 实现土壤 温湿度 线上线下展示
接入HA
OLED+MQTT 实现土壤 温湿度 线上线下展示
在现场用OLED屏幕展示

实验设备

  • esp8266
  • dht11温湿传感器
  • 土壤传感器
  • homeassistant
  • 其他备用(后期会用到舵机、继电器)

线路连接

显示器线路
VCC 3V3(+)
GND GND(-)
SOA D1
SCL D2
DHT11线路
VCC 3V3(+)
GND GND(-)
DATA D5
土壤线路
VCC 3V3(+)
GND GND(-)
A0 A0

代码

在烧写代码之前,我们需要安装部分库。

  • U8g2 (用于显示汉字)
  • DHT11
OLED+MQTT 实现土壤 温湿度 线上线下展示

示例代码

#include   
#include   
#include   
#include 
#include  
// 创建DHT传感器实例  
#define DHTPIN D5     // 连接DHT数据引脚到D1(GPIO5)  
#define DHTTYPE DHT11 // DHT 11  
int moistureSensorPin = A0; // 定义传感器连接的引脚
#ifdef U8X8_HAVE_HW_SPI
#include 
#endif
#ifdef U8X8_HAVE_HW_I2C
#include 
#endif  
DHT dht(DHTPIN, DHTTYPE);  
  
// OLED显示屏设置  
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ D2, /* data=*/ D1, /* reset=*/ U8X8_PIN_NONE);  
/************ WIFI and MQTT 配置 ******************/
const char* ssid = "PDCN"//type your WIFI information inside the quotes
const char* password = "1234567890";
const char* mqtt_server = "192.168.123.88"; #改为你的mqtt服务器
const char* mqtt_username = "admin";
const char* mqtt_password = "admin";
const int mqtt_port = 1883;
const char* mqtt_sensor_topic = "dht11"; #订阅主题
unsigned long last_send = 0

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {  
  // 初始化串口通信,方便调试  
  Serial.begin(115200);  
    
  // 初始化DHT传感器  
  dht.begin();  
  
  // 初始化OLED显示屏  
  u8g2.begin();  
  u8g2.enableUTF8Print(); 
  setupWifi();
  client.setServer(mqtt_server, mqtt_port);
}  

// 连接 Wifi
void setupWifi() {
  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 loop() {  

  if ( !client.connected() ) { // MQTT 是否连接成功
    reconnect();
  }
  if ( millis() - last_send > 5000 ) { // 每5秒发布一次温湿度数据
    handleTemperatureAndHumidity();
    last_send = millis();
  }
  client.loop();

  // 等待传感器稳定  
  delay(2000);  
  
  // 读取温度和湿度数据  
  float humidity = dht.readHumidity();  
  float temperature = dht.readTemperature();  
    
  // 检查是否读取失败,读取失败时返回NAN(不是一个数字)  
  if (isnan(humidity) || isnan(temperature)) {  
    Serial.println(F("Failed to read from DHT sensor!"));  
    return;  
  }  
  
  int moistureValue = analogRead(moistureSensorPin); // 读取传感器的模拟值
  // 将模拟值转换为土壤湿度百分比
  int moisturePercent = map(moistureValue, 102400100);
  // 清空显示缓冲区  
  u8g2.clearBuffer();  
  // 设置字体
  u8g2.setFont(u8g2_font_wqy12_t_gb2312);    
  // 设置文本颜色  
  u8g2.setDrawColor(1); // 白色    
  // 设置光标位置(注意:U8g2的坐标系统与Adafruit库可能不同)  
  u8g2.setCursor(015);  
  // 显示温度和湿度数据(使用中文)  
  u8g2.print("温度: ");  
  u8g2.print(humidity);  
  u8g2.print(" %   ");  
  u8g2.setCursor(030);  
  u8g2.print("温度: ");  
  u8g2.print(temperature);  
  u8g2.print(" ℃");  
  u8g2.setCursor(045);  
  u8g2.print("土壤: ");  
  u8g2.print(moisturePercent);  
  u8g2.print(" %");  
    
  // 更新显示  
  u8g2.sendBuffer();  
    
  // 等待2秒再读取一次  
  delay(2000);  
}
void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect(mqtt_sensor_topic, mqtt_username, mqtt_password)) {
      Serial.println("connected");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}

void handleTemperatureAndHumidity() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  int moistureValue = analogRead(moistureSensorPin); 
  int moisturePercent = map(moistureValue, 102400100);
  if (isnan(h) || isnan(t) ) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }
  // 准备JSON Payload
  String payload = "{";
  payload += ""temp":"; payload += t; payload += ",";
  payload += ""humi":"; payload += h;payload += ",";
  payload += ""turang":"; payload += moisturePercent;
  payload += "}";

  // 发送温湿度数据
  char attributes[100];
  payload.toCharArray( attributes, 100 );
  client.publish( mqtt_sensor_topic, attributes );
  Serial.println( attributes );
}

上传代码后,我们利用MQTT客户端进行测试。

OLED+MQTT 实现土壤 温湿度 线上线下展示
上报数据为json格式

配置HA

在HA集成中添加MQTT

OLED+MQTT 实现土壤 温湿度 线上线下展示修改ha配置文件如下:

vim configuration.yaml

新增内容如下:

mqtt: 
 sensor: 
   - unique_id: Temperature 
     name: "Temp" 
     state_topic: "dht11" 
     suggested_display_precision: 1  
     unit_of_measurement: "℃ " 
     value_template: "{{ value_json.temp }}"
  - unique_id: Humidity 
     name: "Humi" 
     state_topic: "dht11" 
     suggested_display_precision: 1  
     unit_of_measurement: "% " 
     value_template: "{{ value_json.humi }}"

注意书写格式,空格一定要对齐。

OLED+MQTT 实现土壤 温湿度 线上线下展示完成配置后,重启HA

OLED+MQTT 实现土壤 温湿度 线上线下展示接下来,在实体中便可以看到当前设备了。

OLED+MQTT 实现土壤 温湿度 线上线下展示

如果,想将数据入库。利用echar展示,我们可以参考下往期文章。

BREAK AWAY
往期推荐
01
一文玩转MQTT(基于esp8266 DHT11 MQTT Mysql实现)
02
物联网入门之MQTT协议(一)
03
Esp8266入门即是巅峰

更多精彩文章 欢迎关注我们

本内容观点仅代表发布作者本人观点立场,欣文网平台只做信息内容展示和存储。发布作者:全网转载,转转请注明出处:https://www.xinenw.com/43999.html

(0)
上一篇 2024年10月10日 11:59
下一篇 2024年10月10日 11:59

相关推荐

  • 福寿螺冒充田螺:食品安全警钟长鸣,共同守护舌尖安全

    谭宝怡 广西大学 ——2024年度红网“青椒计划”系列作品 近日,“福寿螺上餐桌”的食品安全事件引起了公众的广泛关注。澎湃新闻的深入调查发现,一些商贩在湖南、重庆等地大量收购野外捕捞的福寿螺,并加工后冒充田螺销售。福寿螺作为一种繁殖速度快、适应性强的外来物种,已在多地水域泛滥成灾。外形相似且成本低廉的福寿螺,被不法商家利用,通过去壳加工伪装成田螺肉,以此牟取…

    2024年6月29日
    1630
  • 发生塌方与记者没关系?安全没有旁观者

    Review 红辣椒评论 不论突发事件与记者有没有直接关系,从记者职责的角度来说,进行舆论监督是其职责所在。 □梁勇 8月28日,有网友爆料河北张家口东方中学操场在灌泥浆时出现塌方,有工人被埋压。当记者致电学校核实,校方回应说“不太清楚”,并反问记者“跟您有什么关系?”如此戒备心理极强的回应,从一定程度上显示出校方在处置突发事件时应对失措,也暴露出当事学校一…

    2024年8月30日
    1460
  • 妹妹“屎尽”扫地!小学生作业能有多好笑?老师:这是什么脑回路!

    点击蓝字| 关注我们 文|我是笑笑 心情不好的时候,不妨看看小学生的作业本吧! 虽然这么做不太礼貌,但不得不说真的有意思。 小学生:我那也是辛辛苦苦写的,你们居然把我的作业当笑话看! 笑笑每天的快乐源泉很简单,就是看自己身为小学老师的朋友分享的小学生离谱作业。 我们看的很开心,但身为小学生的老师,朋友似乎不太开心,自己的劳动成果在学生身上没有体现,还得继续讲…

    2024年6月19日
    1470
  • 女儿被班里男同学开黄腔,家长一招化敌为友,可评论区褒贬不一

    点击蓝字| 关注我们 文|我是笑笑 孩子在上学期间,虽然学校里是很相对安全的,毕竟有老师和保安等工作人员保护大家,但家长还是充满了担心,担心孩子在学校里受到欺负,或者是遇到不开心的事情。 尤其是网上我们也能够看到各种案例,受到校园欺凌的同学多么无助可怜,他们受不了这样的生活和欺负,可又没有办法向父母说,只能忍耐。 最后导致整个人崩溃掉了,家长的唯一的希望也没…

    2024年4月28日
    2440
  • 听泉鉴宝学历之谜:网红真实性的拷问

    一、听泉鉴宝走红与争议突起 听泉鉴宝在抖音平台迅速走红,拥有高达 2400 万粉丝。其走红主要凭借丰富的文物知识以及妙趣横生的直播风格。在直播中,他时不时眉头一皱,眼睛一斜,露出疑惑的表情,妙语连珠,宛若一出大型的鉴宝脱口秀。听泉鉴宝的反应也经常效果拉满,直播间拥有了自己的专属“黑话”,直播中提及的故事都被网友视作“新都市传说”。 然而,听泉鉴宝的北大学历却…

    2024年10月13日
    1680

联系我们

400-800-8888

在线咨询: QQ交谈

邮件A:xinenw@qq.com

邮箱B:xinenw@163.com

工作时间:周一至周五,8:30-23:30;周六周日10:30-18:30;节假日休息

关注微信