1076|3

163

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【Follow me第二季第2期】传感器数据上传到HA [复制链接]

 
        咱们已经实现了开发板和HA之间的程序,接下来我们就要实现传感器数据的采集,本次一共采购了两个传感器,也就是光照和环境传感器。
        实际上两个扩展任务基本上是一致,也就是说模式都是采集传感器数据然后传输到HA,由于传感器的不同,我们需要再建立一个光照数据的设备和实体:
homeassistant/sensor/sensorLTR-329/config

 

{
    "name":"LTR-329",
    "state_topic":"homeassistant/sensor/sensorLTR-329/state",
"value_template":"{{ value_json.LTR}}",
    "unique_id":"LTR-329",
    "device":{
        "identifiers":[
            "LTR-329"
        ],
        "name":"LTR-329-Sensor",
        "manufacturer": "Arduino",
        "model": "UNO R4 WiFi"
    }
}

        接下来实现传感器数据的采集,并通过串口打印:

        这里我们需要安装两个库文件及其依赖的基础库:
#include "Adafruit_SHT4x.h"
#include "Adafruit_LTR329_LTR303.h"
Adafruit_SHT4x sht4;
Adafruit_LTR329 ltr = Adafruit_LTR329();
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  if ( ! ltr.begin(&Wire1) ) {
    Serial.println("Couldn't find LTR sensor!");
    while (1) delay(10);
  }
  Serial.println("Found LTR sensor!");
  ltr.setGain(LTR3XX_GAIN_2);
  Serial.print("Gain : ");
  switch (ltr.getGain()) {
    case LTR3XX_GAIN_1: Serial.println(1); break;
    case LTR3XX_GAIN_2: Serial.println(2); break;
    case LTR3XX_GAIN_4: Serial.println(4); break;
    case LTR3XX_GAIN_8: Serial.println(8); break;
    case LTR3XX_GAIN_48: Serial.println(48); break;
    case LTR3XX_GAIN_96: Serial.println(96); break;
  }
  ltr.setIntegrationTime(LTR3XX_INTEGTIME_100);
  Serial.print("Integration Time (ms): ");
  switch (ltr.getIntegrationTime()) {
    case LTR3XX_INTEGTIME_50: Serial.println(50); break;
    case LTR3XX_INTEGTIME_100: Serial.println(100); break;
    case LTR3XX_INTEGTIME_150: Serial.println(150); break;
    case LTR3XX_INTEGTIME_200: Serial.println(200); break;
    case LTR3XX_INTEGTIME_250: Serial.println(250); break;
    case LTR3XX_INTEGTIME_300: Serial.println(300); break;
    case LTR3XX_INTEGTIME_350: Serial.println(350); break;
    case LTR3XX_INTEGTIME_400: Serial.println(400); break;
  }
  ltr.setMeasurementRate(LTR3XX_MEASRATE_200);
  Serial.print("Measurement Rate (ms): ");
  switch (ltr.getMeasurementRate()) {
    case LTR3XX_MEASRATE_50: Serial.println(50); break;
    case LTR3XX_MEASRATE_100: Serial.println(100); break;
    case LTR3XX_MEASRATE_200: Serial.println(200); break;
    case LTR3XX_MEASRATE_500: Serial.println(500); break;
    case LTR3XX_MEASRATE_1000: Serial.println(1000); break;
    case LTR3XX_MEASRATE_2000: Serial.println(2000); break;
  }
  sht4.setPrecision(SHT4X_HIGH_PRECISION);
  switch (sht4.getPrecision()) {
     case SHT4X_HIGH_PRECISION:
       Serial.println(F("SHT40 set to High precision"));
       break;
     case SHT4X_MED_PRECISION:
       Serial.println(F("SHT40 set to Medium precision"));
       break;
     case SHT4X_LOW_PRECISION:
       Serial.println(F("SHT40 set to Low precision"));
       break;
  }
  sht4.setHeater(SHT4X_NO_HEATER);
  switch (sht4.getHeater()) {
     case SHT4X_NO_HEATER:
       Serial.println(F("SHT40 Heater turned OFF"));
       break;
     case SHT4X_HIGH_HEATER_1S:
       Serial.println(F("SHT40 Heater: High heat for 1 second"));
       break;
     case SHT4X_HIGH_HEATER_100MS:
       Serial.println(F("SHT40 Heater: High heat for 0.1 second"));
       break;
     case SHT4X_MED_HEATER_1S:
       Serial.println(F("SHT40 Heater: Medium heat for 1 second"));
       break;
     case SHT4X_MED_HEATER_100MS:
       Serial.println(F("SHT40 Heater: Medium heat for 0.1 second"));
       break;
     case SHT4X_LOW_HEATER_1S:
       Serial.println(F("SHT40 Heater: Low heat for 1 second"));
       break;
     case SHT4X_LOW_HEATER_100MS:
       Serial.println(F("SHT40 Heater: Low heat for 0.1 second"));
       break;
  }  
  if (! sht4.begin(&Wire1)) {
    Serial.println(F("SHT40 sensor not found!"));
    while (1) ;
  }
   else
  {
    Serial.print(F("SHT40 detected!\t"));
    Serial.print(F("Serial number:\t"));
    Serial.println(sht4.readSerial(), HEX);    
  }
}
void loop() {
  // put your main code here, to run repeatedly:
  bool valid;
  uint16_t visible_plus_ir, infrared;
  if (ltr.newDataAvailable()) {
    valid = ltr.readBothChannels(visible_plus_ir, infrared);
    if (valid) {
      Serial.print("CH0 Visible + IR: ");
      Serial.print(visible_plus_ir);
      Serial.print("\t\tCH1 Infrared: ");
      Serial.println(infrared);
    }
  }
  sensors_event_t humidity, temp;
  sht4.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
  float tem = temp.temperature;
  Serial.println("Temp *C = " + String(tem));
  float hum = humidity.relative_humidity;
  Serial.println("Hum. % = " + String(hum));
  delay(1000);
}

 

        可以看到结果如下:
        接下来将数据与物联网HA系统进行融合显示:   
 dataObj["cnt"] = count;
    dataObj["hum"] = hum;
    dataObj["tem"] = tem;
    String jsonString1 = JSON.stringify(dataObj);
    mqttClient.beginMessage(state_topic1);
    mqttClient.print(jsonString1);
    mqttClient.endMessage();
    dataObj["LTR"] = visible_plus_ir;
    String jsonString2 = JSON.stringify(dataObj);
    mqttClient.beginMessage(state_topic2);
    mqttClient.print(jsonString2);
    mqttClient.endMessage();

        效果可以查看最终的效果展示视频的扩展任务部分。

        最终的视频展示:
        https://training.eeworld.com.cn/course/68650/learn?preview=1#lesson/41079
得捷电子Follow Me第二季第2期视频展示

 

最新回复

一个智能家居系统   详情 回复 发表于 2024-9-12 09:42
点赞 关注
 
 

回复
举报

294

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

这个HA是什么?是一个硬件吗还是一个什么东东呢?而且我看好像是一个物联网的系统

点评

挺好用的,就是前期安装比较费事    详情 回复 发表于 2024-10-3 13:05
一个智能家居系统  详情 回复 发表于 2024-9-12 09:42
 
 
 

回复

107

帖子

1

TA的资源

一粒金砂(高级)

板凳
 
yangjiaxu 发表于 2024-9-11 11:52 这个HA是什么?是一个硬件吗还是一个什么东东呢?而且我看好像是一个物联网的系统

一个智能家居系统

 
 
 

回复

163

帖子

0

TA的资源

一粒金砂(高级)

4
 
yangjiaxu 发表于 2024-9-11 11:52 这个HA是什么?是一个硬件吗还是一个什么东东呢?而且我看好像是一个物联网的系统

挺好用的,就是前期安装比较费事  

 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
时间触发和状态机思想的嵌入式系统 分析都给大家传上去了!

今天我给大家讲一下: 时间触发的嵌入式系统 : 我先给大家了一个程序:这个程序是在PC机上测试过,大家给点意见! #include ...

【视频分享】电子设计竞赛作品演示

本帖最后由 paulhyde 于 2014-9-15 08:53 编辑 汽车多功能保护系统(2008广东省大学生电子设计竞赛) http://www.tudou.com/v/ ...

NXP ARM Cortex M0/M3 IAP应用

最近的项目都差不多要使用IAP功能,在使用中遇到了不少问题。本人也把遇到的问题分别发了不同的帖子: 1.LPC1100处理器通过SD ...

大西瓜FPGA资料共享开源(持续更新中!!!)

回顾刚开始学习FPGA的时候,感觉作为一个新手从ALTERA的FPGA入门比较好,资料也相对比较多,所以就选择了ALTERA的片子。 ...

【sensorTile 器件详解】LSM6DSM 加速度Acc+陀螺仪Gyro (第一篇)

本帖最后由 uniquey 于 2016-12-12 15:49 编辑 文章开篇,我们先从基本信息上了解一下LSM6DSM。虽然有些参数较深入(如Noise ...

获奖名单|雅特生 PMBus 接口非隔离式 DC-DC 转换器!下载资料赢好礼!

活动详情:雅特生 PMBus 接口非隔离式 DC-DC 转换器!下载资料赢好礼! 请获奖网友在领奖截止日期前确认论坛个人资料中的 ...

使用RTT做录音数据输出,掉数据特别严重。有没有基友知道怎么提高RTT速率的?

各位基友好,如题:使用RTT做录音数据输出,掉数据特别严重。有没有基友知道怎么提高RTT速率的? 如下是经过缓存后输出的正常 ...

RSL1蓝牙特征值读写

本帖最后由 dql2016 于 2021-6-28 20:07 编辑 蓝牙广播只能单向发送数据且数据可以被任何其它设备接收,无法实现设备接收数据 ...

外设接口

计算机常用外设接口集合

《Rust实战》实现循环的三个方式

学习了第二章的流程控制的三个可以实现循环的方式,即for、while、loop,三个循环在使用的方式我体会如下,不知道对不对。 1 ...

关闭
站长推荐上一条 1/9 下一条

 
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
快速回复 返回顶部 返回列表