224|0

11

帖子

4

TA的资源

一粒金砂(中级)

楼主
 

【Follow me第二季第2期】扩展任务 HA面板显示温湿度、光照度数据 [复制链接]

  本帖最后由 eew_gz8e7C 于 2024-10-7 10:39 编辑

Follow me第二季第2期扩展任务之

环境光传感器,温湿度传感器,上传数据到HA,通过HA面板显示数据

    本节任务采用Follow me第一季采购的传感器模块Grove - Light Sensor v1.2、Grove - AHT20 I2C来实现。

    首先安装home-assistant-integration库,调用该库可以快速构建HA能够自动发现的MQTT传感器实例。

    环境光传感器数据上传到HA,通过HA面板显示数据

    根据Grove - Light Sensor v1.2传感器模块引脚定义完成连线。

            

 

            

 

    光传感器信号为模拟信号,通过UNO R4 WIFIF A4引脚读取光照值并转化为%值输出。

#include "secrets.h"
#include <WiFiS3.h>
#include <ArduinoHA.h>
#include <Wire.h>

#define LIGHT_SENSOR A4

//wifi信息
char ssid[] = WIFISSID;
char pass[] = WIFIPWD;

//mqtt服务器信息
const char broker[] = BROKER;
const int port = BROKER_PORT;

byte mac[] = { 0x00, 0x10, 0xFA, 0x6E, 0x38, 0x4A };
//tcp客户端
WiFiClient client;
//HA虚拟设备配置
HADevice device(mac, sizeof(mac));
//mqtt客户端实例化
HAMqtt mqtt(client, device);

//HA传感器实例化
HASensorNumber lightSensor("LightSensor", HABaseDeviceType::PrecisionP2);

//参考上次更新时间
unsigned long lastUpdateAt = 0;


//光线传感器
void getLightValue(float* const pval) {
  int sensorValue = analogRead(LIGHT_SENSOR);
  *pval = sensorValue/1023.0;
}



void setup() {
  //初始化串口
  Serial.begin(115200);
  while (!Serial) {
    ;
  }

  // 连接WIFI
  Serial.print("Attempting to connect to WPA SSID: ");
  Serial.println(ssid);
  while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }

  Serial.println("You're connected to the network");
  Serial.println(WiFi.localIP());


  Serial.print("Attempting to connect to the MQTT broker: ");
  Serial.println(broker);

  device.setName("亮度");
  device.setSoftwareVersion("1.0.0");


  lightSensor.setIcon("mdi:home");
  lightSensor.setName("亮度");
  lightSensor.setUnitOfMeasurement("%");

  mqtt.begin(BROKER, BROKER_PORT);
}

void loop() {
  mqtt.loop();
  float light;
  if ((millis() - lastUpdateAt) > 1000) {  // update in 2s interval
    getLightValue(&light);
    lightSensor.setValue(light*100);
    Serial.print("light:");
    Serial.print(light*100);
    Serial.println("%");
    lastUpdateAt = millis();
  }
}

    效果展示

light

    温湿度传感器数据上传到HA,通过HA面板显示数据

    根据Grove - AHT20 I2C传感器模块引脚定义完成连线。

 

         

 

    Grove - AHT20 I2C传感器模块通过I2C总线传输传感器数据,Arduino IDE中搜索下载Seed_Arduino_AHT20库可以快速调用并读取传感器数据。

#include "secrets.h"
#include <WiFiS3.h>
#include <ArduinoHA.h>
#include <Wire.h>
#include "AHT20.h"

//wifi信息
char ssid[] = WIFISSID;
char pass[] = WIFIPWD;

//mqtt服务器信息
const char broker[] = BROKER;
const int port = BROKER_PORT;

byte mac[] = { 0x00, 0x10, 0xFA, 0x6E, 0x38, 0x4A };
//tcp客户端
WiFiClient client;
//HA虚拟设备配置
HADevice device(mac, sizeof(mac));
//mqtt客户端实例化
HAMqtt mqtt(client, device);

//HA传感器实例化
HASensorNumber tempSensor("tempSensor", HABaseDeviceType::PrecisionP2);
HASensorNumber humiSensor("humiSensor", HABaseDeviceType::PrecisionP2);

//参考上次更新时间
unsigned long lastUpdateAt = 0;

//温湿度传感器AHT20
AHT20 AHT;



void setup() {
  //初始化串口
  Serial.begin(115200);
  while (!Serial) {
    ;
  }
  AHT.begin();

  // 连接WIFI
  Serial.print("Attempting to connect to WPA SSID: ");
  Serial.println(ssid);
  while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }

  Serial.println("You're connected to the network");
  Serial.println(WiFi.localIP());

  //设置MQTT服务器
  Serial.print("Attempting to connect to the MQTT broker: ");
  Serial.println(broker);

  //设置HA虚拟设备信息
  device.setName("温湿度");
  device.setSoftwareVersion("1.0.0");


  tempSensor.setIcon("mdi:home");
  tempSensor.setName("温度");
  tempSensor.setUnitOfMeasurement("°C");

  humiSensor.setIcon("mdi:home");
  humiSensor.setName("湿度");
  humiSensor.setUnitOfMeasurement("%");

  mqtt.begin(BROKER, BROKER_PORT);
}

void loop() {
  mqtt.loop();
  float humi, temp, light;
  if ((millis() - lastUpdateAt) > 1000) {  
    int ret = AHT.getSensor(&humi, &temp);
    if (ret) {
      tempSensor.setValue(temp);
      humiSensor.setValue(humi * 100);
      Serial.print("humidity: ");
      Serial.print(humi * 100);
      Serial.print("%\t temerature: ");
      Serial.println(temp);
    }
    lastUpdateAt = millis();
  }
}

        效果展示

TEMP_HUMI

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表