- 2024-10-30
-
加入了学习《【Follow me第二季第2期】 进阶任务 智能家居3 MQTT接入HA》,观看 汇总视频
- 2024-10-18
-
加入了学习《【Follow me第二季第1期】全部任务演示》,观看 全部任务演示2.0
-
加入了学习《串口打印Hello EEWorld!》,观看 串口打印
- 2024-10-17
-
发表了主题帖:
【Follow me第二季第2期】 任务汇总
本帖最后由 zarkx 于 2024-10-30 18:57 编辑
大家好我是zarkx,电气工程师,也会一些前端,移动端,Python编程
本次任务进行了拆分
1、3-5分钟的任务视频(1个视频含所有任务的展示)
【Follow me第二季第2期】 入门任务:串口打印Hello EEWorld! https://bbs.eeworld.com.cn/thread-1293127-1-1.html
【Follow me第二季第2期】 基础任务(必做)驱动12x8点阵LED https://bbs.eeworld.com.cn/thread-1293148-1-1.html
【Follow me第二季第2期】 基础任务:用DAC生成正弦波;用OPAMP放大DAC信号 https://bbs.eeworld.com.cn/thread-1296171-1-1.html
然后智能家居的分了三个帖子
【Follow me第二季第2期】 进阶任务 智能家居1 安装HA(homeassistant) https://bbs.eeworld.com.cn/thread-1293173-1-1.html
【Follow me第二季第2期】 进阶任务 智能家居2温湿度传感器接入ardiuno https://bbs.eeworld.com.cn/thread-1294525-1-1.html
【Follow me第二季第2期】 进阶任务 智能家居3 MQTT接入HA(homeassistant) https://bbs.eeworld.com.cn/thread-1294660-1-1.html
2、任务实现简介、全部物料清单(含物料名称、实物图片)、设计思路
全部的物料如图所示,mac电脑 / N1(装HA),win笔记本(跑程序),ardiuno,温湿度模块,示波器。电阻(放大电路)
3、软件流程图
简单画画思路,可能有不对的地方,请多包涵
4、每个任务对应的:主要代码片段、功能展示及图文说明(每个任务需要包含至少一张对应的实物图)、分帖链接
入门任务(必做):搭建环境并开启第一步Blink / 串口打印Hello EEWorld!
环境搭建的就比较简单,在官方网站下载ardiuno EDA安装即可https://www.arduino.cc/en/software mac系统下载dmg安装包,win系统可以直接下载zip压缩包,打开即用。
初次打开需要根据提示安装对应的驱动。
在串口打印,使用
loop()里面调用Serial.println("Hello EEWorld!");即可
记得在setup里面配置Serial.begin(9600);这个需要跟串口打印选择的波特率一样,否则会出现乱码
基础任务(必做):
驱动12x8点阵LED;
这个任务核心是调用
matrix.renderBitmap(smile, 8, 12);
delay(1000);
可以直接在代码上观察到即将显示的图像,可以看到上面是一个爱心,下面是一条鱼
用DAC生成正弦波;用OPAMP放大DAC信号;用ADC采集并且打印数据到串口等其他接口可上传到上位机显示曲线
这个任务因为开始没有示波器折腾好久买了个开源的示波器
ardiuno本身是可以生成正弦波的也自带了一个放大器,
导入OPAMP,使用实例代码即可生成一个正弦波。
值得注意的是模拟信号需要采集串口输出的值,那么我使用mac电脑无法打印串口就显示不出模拟信号了。
搞懂简单的放大电路就很简单了
进阶任务(必做):通过Wi-Fi,利用MQTT协议接入到开源的智能家居平台HA(HomeAssistant)https://bbs.eeworld.com.cn/thread-1293173-1-1.html
这个任务最大的难点就是在安装HA,如果你有安装好的即可简单处理。
核心代码是配置ardiuno,链接wifi,通过MQTT协议将数据发生到HA平台,可以使用写死的数据进行测试
//wifi test--ok 温湿度写死的
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
// 替换为你的网络信息
const char* ssid = "TP-LINK_F060";
const char* password = "hsta8888";
// 替换为你的Mosquitto broker信息
const char* mqtt_server = "192.168.2.178";
const int mqtt_port = 1883;
const char* mqtt_user = "admin";
const char* mqtt_password = "admin";
#include "Arduino_LED_Matrix.h" //led
ArduinoLEDMatrix matrix; //led
uint8_t smile[8][12] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0 },
{ 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};//led
// 初始化WiFi和MQTT客户端
WiFiClient espClient;
PubSubClient client(espClient);
// 传感器数据发布主题
const char* topic = "homeassistant/sensor/sensorBedroom/state";
void setup() {
Serial.begin(115200);
matrix.begin(); //led
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// 假设你有一个温度传感器,获取温度数据
float temperature11 = 50;
float humidity11 = 26.8;
StaticJsonDocument<200> jsonDoc;
jsonDoc["humidity"] = humidity11;
jsonDoc["temperature"] = temperature11;
char jsonBuffer[512];
serializeJson(jsonDoc, jsonBuffer);
client.publish(topic, jsonBuffer);
matrix.renderBitmap(smile, 8, 12); //led
// 每隔5秒发送一次数据
delay(5000);
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ArduinoClient", mqtt_user, mqtt_password)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
扩展任务二:通过外部SHT40温湿度传感器,上传温湿度到HA,通过HA面板显示数据
做这个任务之前就是将SHT40数据获取接入到ardiuno,https://bbs.eeworld.com.cn/thread-1294525-1-1.html
接入以后能在串口打印出传感器获取到的信号即可。
然后就是终极目标把
外部SHT40温湿度传感器接入ardiuno,上传温湿度到HA,通过HA面板显示数据
这个其实是把前面两个任务结合起来即可。
值得注意的是在HA平台配置显示2个参数,也是折腾好久,遇到的坑和解决办法也都放在详情里面了
https://bbs.eeworld.com.cn/thread-1294660-1-1.html
串口打印
LED矩阵
放大电路,示波器
接入智能家居
5、对本活动的心得体会(包括意见或建议)
总体来说这次的活动是花了很多时间爬坑,但是也是收获满满。
很多以前玩过的东西都捡起来重新搞了一遍。对电路和程序的理解更加深了。
有的东西其实很简单,只是可能遇到一些环境问题,比如安装HA要是挂梯子就很简单了,还有示波器要是有个好用的就简单多了。
总结,把之前的视频合并了一下。工欲善其事必先利其器,要是工具齐全做起来还是很快的,遇到很多坑都是有很多办法去解决的,只是会走弯路浪费时间而已。
建议:论坛有很多都是活动的,建议的话可以做成问题,教程相关的,有人遇到同样的问题可以在论坛来搜索。像数码之家一样有拆机,diy,教程等。
祝愿eeworld越办越好。
6、可编译下载的代码(1个压缩包)
-
加入了学习《【Follow me第二季第2期】 进阶任务 智能家居3 MQTT接入HA》,观看 Follow me第二季第2期】 基础任务:用DAC生成正弦波;用OPAMP放大DAC信号
-
加入了学习《【Follow me第二季第2期】 进阶任务 智能家居3 MQTT接入HA》,观看 【Follow me第二季第2期】 进阶任务 智能家居3 MQTT接入HA
-
加入了学习《串口打印Hello EEWorld!》,观看 控制LED8*12矩阵
- 2024-10-15
-
发表了主题帖:
【Follow me第二季第2期】 基础任务:用DAC生成正弦波;用OPAMP放大DAC信号
本帖最后由 zarkx 于 2024-10-16 14:19 编辑
最近一直忙差点忘记
用DAC生成正弦波
参考官网的 DAC 样例,实现生成正弦波。
直接使用示例代码
可以看到代码里面使用的是A0引脚。
#include "analogWave.h"
#include <OPAMP.h>
analogWave wave(DAC);
int freq = 100;
void setup() {
// put your setup code here, to run once:
Serial.begin(250000);
analogReadResolution(8);
wave.sine(freq);
wave.amplitude(0.5);
OPAMP.begin(OPAMP_SPEED_HIGHSPEED);
}
void loop() {
// put your main code here, to run repeatedly:
int value = analogRead(A3);
Serial.println(value);
delay(1);
}
使用运算放大器放大正弦波信号
参考官网 OPAMP 的电路图,简单画了个电路图,在ardiuno内部自带了一个放大器
如图我使用了2个10K的电阻,其实其他阻值的也可以,电阻一样即可
接线如图所示,GND到A2接电阻,A2到A3接电阻,别忘了链接A1和A0触角。
代码如下
#include "analogWave.h"
#include <OPAMP.h>
analogWave wave(DAC);
int freq = 100;
void setup() {
// put your setup code here, to run once:
Serial.begin(250000);
analogReadResolution(8);
wave.sine(freq);
wave.amplitude(0.5);
OPAMP.begin(OPAMP_SPEED_HIGHSPEED);
}
void loop() {
// put your main code here, to run repeatedly:
int dacvalue = analogRead(A0);
int opampvalue = analogRead(A3);
Serial.print(dacvalue);
Serial.print(" ");
Serial.println(opampvalue);
delay(1);
}
效果图如下
接下来是最终的视频,在模拟的图可以很清楚的看到两个波形图浮动差距一倍,在我简易示波器测量的时候看到波形图A0跟A3的波峰差不多但是A0要宽一些,应该是屏幕太小被缩放了,总体来说也是差了一倍的样子。
-
加入了学习《【Follow me第二季第2期】+开发板硬件介绍和实现任务一 LED灯闪烁和串口打印》,观看 【Follow me第二季第2期】实现任务二 驱动12x8点阵LED;用DAC生成正弦波并放大采集
-
加入了学习《【Follow me第二季第2期】演示视频》,观看 3.演示上传温度湿度到HomeAssistant
-
加入了学习《【Follow me第二季第2期】演示视频》,观看 2.放大正弦波信号
- 2024-10-10
-
回复了主题帖:
Follow me第二季第2期-3通过Wi-Fi,利用MQTT协议接入到开源的智能家居平台HA(Home...
我也是爬了不少坑,后来放弃了,就是要翻墙才行
- 2024-09-26
-
回复了主题帖:
【Follow me第二季第2期】 进阶任务 智能家居1 安装HA(homeassistant)
智能家居的分了三个帖子,可以看看其他的几个。
https://bbs.eeworld.com.cn/thread-1294525-1-1.html (模块接入测试)
https://bbs.eeworld.com.cn/thread-1294660-1-1.html (完整版)
-
回复了主题帖:
【Follow me第二季第2期】 进阶任务 智能家居2温湿度传感器接入ardiuno
智能家居的分了三个帖子,可以看看其他的几个
-
加入了学习《【Follow me第二季第2期】+开发板硬件介绍和实现任务一 LED灯闪烁和串口打印》,观看 【Follow me第二季第2期】+通过外部SHT40温湿度传感器,上传温湿度到HA
- 2024-09-25
-
加入了学习《【Follow me第二季第2期】+开发板硬件介绍和实现任务一 LED灯闪烁和串口打印》,观看 【Follow me第二季第2期】Arduino Uno R4 WiFi 通过MQTT连入Home Assistant
- 2024-09-24
-
发表了主题帖:
【Follow me第二季第2期】 进阶任务 智能家居3 MQTT接入HA(homeassistant)
本帖最后由 zarkx 于 2024-9-26 16:15 编辑
任务可以分为3个阶段
1安装HA https://bbs.eeworld.com.cn/thread-1293173-1-1.html
2传感器接入ardiuno https://bbs.eeworld.com.cn/thread-1294525-1-1.html
3MQTT接入HA,合并接入系统
当前是MQTT接入HA
看了好多,摸索出一个比较完整的模式,可以先看看最后的结论
安装MQTT的方案很多,如果是镜像版的HA( Home Assistant Operating system)可以通过Mosquitto来安装。在HA的设置界面会多一个选项
参考置顶帖子,可以安装一下EMQX。
docker拉取代码
docker pull emqx
docker运行起来
docker run -d --name="EMQX_admin” -p 1883:1883 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx
进入管理界面http://localhost:18083/ 默认账号:admin 默认密码:public 第一次需要改下密码。
完成初始化,具体内容不再赘述。
在HA界面点击设置-->设备与服务,搜索框输入MQTT,找不到点击添加集成,点击MQTT,MQTT,代理写你HA所在的电脑的ip地址,这里也有的填写EMQX配置的ip比如127.0.0.2
我的HA安装在mac电脑上,用户名密码写一个,要记住。
添加完成以后,可以测试一下 ,设置,设备与服务,MQTT,配置。发送主题和监听主题随便写,要写一样的。点击开始监听,点发送,可以看到接受的跟发送的东西一样。这是同页面测试。
下载一个MQTTX,这是一个软件在官网下载即可https://mqttx.app/zh/downloads,我下载的是mac版本,英特尔CPU的,下载后安装打开
名称自己写一个,ip改成刚刚配置的HA所在电脑的ip
账号密码写刚刚上面MQTT配置的那个,点右上角连接即可。
可以测试一下。在MQTT那边开启监听,test的,在MQTTX上发送可以看到监听到一样的数据
我们需要在HA中的MQTT创建一个设备,
发送一个标准的PUB,就自动添加设备到HA的MQTT了
在topic栏写
homeassistant/sensor/sensorBedroom/config
发送内容写下面这个
{
"device_class": "humidity",
"name": "Humidity",
"state_topic": "homeassistant/sensor/sensorBedroom/state",
"unit_of_measurement": "%",
"value_template": "{{ value_json.humidity }}",
"unique_id": "hum01ae",
"device": {
"identifiers": [
"bedroom01ae"
],
"name": "Bedroom"
}
}
下面这个是创建温度的
{
"device_class": "temperature",
"name": "Temperature",
"state_topic": "homeassistant/sensor/sensorBedroom/state",
"unit_of_measurement": "°C",
"value_template": "{{ value_json.temperature }}",
"unique_id": "temp01ae",
"device": {
"identifiers": [
"bedroom01ae"
],
"name": "Bedroom"
}
}
如图所示
可以看到发送以后MQTT那边直接出现一个实体设备
这样就是添加成功了。回到首页可以看到设备在仪表盘上了,目前没有数据
同样的方法发送湿度的代码,我测试的时候要么湿度要么文档会被替换,
最终我只能去修改配置文件yaml,
mqtt:
- button:
- unique_id: arduino uno button A
name: "Arduino点击"
command_topic: "UNO/arduino/myButtonA/cmd_t"
payload_press: "restart"
- sensor:
- unique_id: bedroom humidity
name: "Bedroom Humidity"
state_topic: "homeassistant/sensor/sensorBedroom/state"
suggested_display_precision: 1
unit_of_measurement: "%"
value_template: "{{ value_json.humidity }}"
device_class: humidity
- unique_id: bedroom temperature
name: "Bedroom Temperature"
state_topic: "homeassistant/sensor/sensorBedroom/state"
suggested_display_precision: 3
unit_of_measurement: "°C"
value_template: "{{ value_json.temperature }}"
device_class: temperature
修改以后保存,在开发者工具,点击所有yaml配置。如果配置有问题会报错,出现绿色的说明没问题。
复制下面的代码,记得更改WIFI和MQTT相关的配置信息,然后下载到板子上。代码上写了备注需要根据实际修改
里面是测试代码让湿度写死44.8,温度22.5
(让AI写代码会有很多bug要自己检查)
mac电脑没有串口输出,没办法我在成功的时候加入了LED矩阵的笑脸。这样可以在板子上看到状态,大家可以把LED相关的删掉。
//wifi test--ok 温湿度写死的
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
// 替换为你的网络信息
const char* ssid = "TP-LINK_F060";
const char* password = "hsta8888";
// 替换为你的Mosquitto broker信息
const char* mqtt_server = "192.168.2.178";
const int mqtt_port = 1883;
const char* mqtt_user = "admin";
const char* mqtt_password = "admin";
#include "Arduino_LED_Matrix.h" //led
ArduinoLEDMatrix matrix; //led
uint8_t smile[8][12] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0 },
{ 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};//led
// 初始化WiFi和MQTT客户端
WiFiClient espClient;
PubSubClient client(espClient);
// 传感器数据发布主题
const char* topic = "homeassistant/sensor/sensorBedroom/state";
void setup() {
Serial.begin(115200);
matrix.begin(); //led
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// 假设你有一个温度传感器,获取温度数据
float temperature11 = 50;
float humidity11 = 26.8;
StaticJsonDocument<200> jsonDoc;
jsonDoc["humidity"] = humidity11;
jsonDoc["temperature"] = temperature11;
char jsonBuffer[512];
serializeJson(jsonDoc, jsonBuffer);
client.publish(topic, jsonBuffer);
matrix.renderBitmap(smile, 8, 12); //led
// 每隔5秒发送一次数据
delay(5000);
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ArduinoClient", mqtt_user, mqtt_password)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
如果代码报错,需要搜索安装对应的库即可,这两个是需要安装的。
编译,上传。
可以打开串口工具查看输出,有连结成功WIFI,上传等信息。
没错上面这个还是测试用的,ardiuno写死数据传到HA展示,
看到首页湿度50,温度26.8说明是成功了。
下面来改实际的代码吧,
//完整的wifi+接收数据
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "Adafruit_SHT4x.h"
// 初始化SHT40传感器
Adafruit_SHT4x sht4 = Adafruit_SHT4x();
// 替换为你的网络信息
const char* ssid = "TP-LINK_F060";
const char* password = "hsta8888";
// 替换为你的Mosquitto broker信息
const char* mqtt_server = "192.168.2.178";
const int mqtt_port = 1883;
const char* mqtt_user = "admin";
const char* mqtt_password = "admin";
// 初始化WiFi和MQTT客户端
WiFiClient espClient;
PubSubClient client(espClient);
// 传感器数据发布主题
const char* topic = "homeassistant/sensor/sensorBedroom/state";
void setup() {
Serial.begin(115200);
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
Serial.println("Adafruit SHT4x test");
if (!sht4.begin()) {
Serial.println("Couldn't find SHT4x");
while (1) delay(1);
}
Serial.println("Found SHT4x sensor");
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// 从SHT40传感器读取温度和湿度数据
sensors_event_t humidity, temp;
sht4.getEvent(&humidity, &temp); // populate temp and humidity objects with fresh data
Serial.print("Temperature: ");
Serial.print(temp.temperature);
Serial.println(" degrees C");
Serial.print("Humidity: ");
Serial.print(humidity.relative_humidity);
Serial.println("% rH");
// sensors_event_t humidity_event, temp_event;
// sht4.getEvent(&humidity_event, &temp_event);
StaticJsonDocument<200> jsonDoc;
// jsonDoc["temperature"] = temp_event.temperature;
// jsonDoc["humidity"] = humidity_event.relative_humidity;
jsonDoc["temperature"] = temp.temperature;
jsonDoc["humidity"] = humidity.relative_humidity;
char jsonBuffer[512];
serializeJson(jsonDoc, jsonBuffer);
client.publish(topic, jsonBuffer);
// 每隔2秒发送一次数据
delay(2000);
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ArduinoClient", mqtt_user, mqtt_password)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
总结
一。ardiuno连接温湿度模块,读取数据,
二。HA链接MQTT,ardiuno上传写死的数据到HA展示出来
三。合并代码,让ardiuno采集的数据发送到HA上面来展示
PS:注意不要用MQTTX创建,创建的会覆盖。直接改yaml文件最方便。
另外 QWIIC排线接线的需要把 sht4.begin() 改为 sht4.begin(&Wire1) ,自己焊接接线的不要改。
踩坑
后面我遇到一个情况就是MQTT怎么都链接不上,后面搜docker安装MQTT相关的,https://blog.csdn.net/qq_43917690/article/details/136705488 参考这个把EMQX重新安装,Websocket客户端那边重新配置账号和密码,用MQTTX测试成功,在链接就好。希望对遇到相同问题的朋友有帮助。
放上最终的视频,我对着传感器哈了口气,很快湿度上升,用手摸着传感器温度也慢慢上升。效果还不错。本以为很简单的,设备不齐,整了好几天。
不过也学到很多东西,欢迎大家讨论
- 2024-09-23
-
加入了学习《Digi-Key: Follow Me 系列(2) 直播回放》,观看 Adafruit ESP32-S3 TFT Feather开发板使用入门
-
回复了主题帖:
【Follow me第二季第2期】OPAMP 放大 DAC 信号
大佬厉害,哈哈哈,我也搞了个简单的示波器
-
发表了主题帖:
【Follow me第二季第2期】 进阶任务 智能家居2温湿度传感器接入ardiuno
本帖最后由 zarkx 于 2024-9-26 10:51 编辑
任务可以分为3个阶段
1安装HA
2传感器接入ardiuno
3MQTT接入HA,合并接入系统
当前为传感器接入ardiuno
咱们看看温湿度传感器接入调试
我没买Qwiic 线7块好贵,就自己焊接了
关于模块官网 Adafruit Sensirion SHT40 和 GitHub - adafruit/Adafruit-SHT40-PCB
Qwiic排线就不说了
自己焊接接线如图所示,5V,gnd,scl,sda接4根线即可。
接线的参考是这样的,也很简单
代码可以拿官方示例代码做简单修改,即将 sht4.begin() 改为 sht4.begin(&Wire1) ,
完整代码如下:
//温湿度接入调试
#include "Adafruit_SHT4x.h"
Adafruit_SHT4x sht4 = Adafruit_SHT4x();
void setup() {
Serial.begin(115200);
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
Serial.println("Adafruit SHT4x test");
if (! sht4.begin(&Wire1)) {
Serial.println("Couldn't find SHT4x");
while (1) delay(1);
}
Serial.println("Found SHT4x sensor");
Serial.print("Serial number 0x");
Serial.println(sht4.readSerial(), HEX);
// You can have 3 different precisions, higher precision takes longer
sht4.setPrecision(SHT4X_HIGH_PRECISION);
switch (sht4.getPrecision()) {
case SHT4X_HIGH_PRECISION:
Serial.println("High precision");
break;
case SHT4X_MED_PRECISION:
Serial.println("Med precision");
break;
case SHT4X_LOW_PRECISION:
Serial.println("Low precision");
break;
}
// You can have 6 different heater settings
// higher heat and longer times uses more power
// and reads will take longer too!
sht4.setHeater(SHT4X_NO_HEATER);
switch (sht4.getHeater()) {
case SHT4X_NO_HEATER:
Serial.println("No heater");
break;
case SHT4X_HIGH_HEATER_1S:
Serial.println("High heat for 1 second");
break;
case SHT4X_HIGH_HEATER_100MS:
Serial.println("High heat for 0.1 second");
break;
case SHT4X_MED_HEATER_1S:
Serial.println("Medium heat for 1 second");
break;
case SHT4X_MED_HEATER_100MS:
Serial.println("Medium heat for 0.1 second");
break;
case SHT4X_LOW_HEATER_1S:
Serial.println("Low heat for 1 second");
break;
case SHT4X_LOW_HEATER_100MS:
Serial.println("Low heat for 0.1 second");
break;
}
}
void loop() {
sensors_event_t humidity, temp;
uint32_t timestamp = millis();
sht4.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
timestamp = millis() - timestamp;
Serial.print("温度: "); Serial.print(temp.temperature); Serial.println(" degrees C");
Serial.print("湿度: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");
Serial.print("Read duration (ms): ");
Serial.println(timestamp);
delay(1000);
}
在mac电脑上可能缺少一些官方的库,报错缺少安装就好了
#include <Adafruit_I2CDevice.h> 报错
解决:搜索框中输入“Adafruit BusIO”安装库
#include <Adafruit_Sensor.h> 报错
搜索框中输入“Adafruit Unified Sensor”。安装即可
编译,上传,打开串口,波特率选择对应的115200
mac电脑上出现串口没反应的问题,驱动都重新下载了,
在终端输入命令
sudo nvram boot-args="kext-dev-mode=1"
完成以后输入reboot重启电脑即可
稍微新的电脑需要重启 Mac 并按住 Command + R 进入恢复模式。在恢复模式下才能处理上面的命令,暂时放弃吧,回去Windows电脑
如图看到测试调试成功。后面回去在Windows电脑上补图吧
补充内容 (2024-9-26 15:55):
上面代码有误。
回去使用Windows电脑有串口输出。
上面的代码是QWIIC排线的写法,需要把 sht4.begin() 改为 sht4.begin(&Wire1) ,如果是我上面的接线不需要改动。就是说排线改,手动焊接接线的不要改。