本帖最后由 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个压缩包)
|