- 2024-12-30
-
发表了主题帖:
【RainbowLink USB 协议转换器】工具测评
本帖最后由 eew_Eu6WaC 于 2024-12-30 21:48 编辑
【RainbowLink USB 协议转换器】工具测评
RainbowLink是一款具有独立4通道的USB协议转换器。能够将一个UBS转化出以下的接口:
● 两路TTL
● 一路RS232
● 一路RS485(可设置终端电阻)
● 对外输出12V、5V、3.3V三种电源以及GND
这个工具十分的方便,几乎包含了在调试设备的时候所需要用到的接口。在以往如果需要连接x个TTL接口,y个RS485以及z个RS232,那么你就需要x+y+z个USB接口,这不仅对接口并不多的笔记本需要外接一个拓展坞,然后在连接这么多跟数据线,然后在将接口连接到设备上去调试,这样你的桌子上就有一大堆杂乱无章的线,收拾起来就十分的麻烦。
这个小巧的根据,只需要一根Type-C数据线即可完成这么多的功能,并且尺寸比一个掌心还要小,只有72mm*47mm*23mm,下面就从各个方面详细的介绍一下这个小巧的工具
硬件规格介绍
● 1块PCB
● 2个面板
● 8颗螺丝:四长四短还有四个铜柱
下面是工具实拍图:
组装图:
接口
● 输入:USB-TypeC
● 输入电压:5V
● 输出电压(每个都是:1个母座+1个公座+1个压线端子)
◎ 3.3V:额定电流200mA
◎ 5V:直连TYPE-C接口,连接电脑TYPE-C时最大电流2A,连接电脑USB-A接口时最大电流500mA
◎ 12V:额定电流800mA
● TTL接口:2个(6个母座+6个公座)
● RS232接口:1个(3个母座+3个公座)
● RS485接口:1个(2个压线端子)
● 支持速率:2400-128000
● 3.3V、5V和12V电源指示灯
● 四个通道的TX和RX指示灯
功能测试
设备详细页的最大速率为128000,因此在测试的时候基本都是将速率调满,并且其中有一个端口的速率远远超过标定值,达到11多倍。。。
测试设备:STM32F407的串口和RS485、RK3568的调试串口
测试程序:
1. ST-TTL2:128000
● 固定发送count的值,count在死循环中不断的+1,然后打印出来
2. ST-RS485:128000
● 每次发送29个字节,前26位固定是大写的A-Z,第27位数字根据count%10来决定,范围在0-9,最后两位就是\r\n换行了
3. RK-TTL1:1500000
● 使用官方默认的串口波特率
连接示意图:
测试视频:
[localvideo]a1ca760d27fe897563b5e76892643bf3[/localvideo]
可以看到完全没有压力,但是对于超过10倍多速率也能在前期胜任,在大量多了有些数据就阻塞了,在日常使用中,在规定的范围内一点问题也没有
电压测试:
短路测视频:
用镊子短接电源和GND,模仿外接设备不小心短路是否会切断电源保护后级设备
[localvideo]310668d4fbb65a972698abf19193020d[/localvideo]
总结
感谢电子工程世界提供本次测试设备:RainbowLink 4通道USB协议转换器。这是一个强有力而且方便的一个调试利器,在日常使用中完全没有压力,上手简单使用方便,并且采用压线端子的设计方案,即按即差,不用到处去找螺丝刀这些工具,不仅省去了大量的时候,而且桌面也变得稍微整洁了一点。
- 2024-12-24
-
回复了主题帖:
【测评入围名单】RainbowLink USB 协议转换器(RS485 / RS232 / TTL)
个人信息无误,确认可以完成测评分享计划
- 2024-12-11
-
回复了主题帖:
【Follow me第二季第2期】作品汇总
sunduoze 发表于 2024-11-11 21:49
“电子森林”??什么鬼?
打错字了
- 2024-10-15
-
加入了学习《Follow Me第二期第二季介绍》,观看 Arduino UNO R4 WiFi
- 2024-09-16
-
上传了资料:
Follow me 第二季第2期 代码汇总
-
发表了主题帖:
【Follow me第二季第2期】用ADC采集打印数据到串口等其他接口可上传到上位机显示
本帖最后由 eew_Eu6WaC 于 2024-9-15 09:21 编辑
任务总览
电路分析
功能实现和展示
电路分析
电路比较简单,一个ADC引脚和一个串口
功能实现和展示
ADC采集到的数据,通过串口打印出来,使用 Arduino ide中的波形展示功能就可以直观的看到波形了
#include "analogWave.h"
analogWave wave(DAC);
int freq = 1;
void setup() {
Serial.begin(460800);
wave.sine(freq);
}
void loop() {
int ReadValue = analogRead(A5);
Serial.println(ReadValue);
delay(50);
}
[localvideo]3d8e9f4fd6ad588d87b98fe0c9da3c4a[/localvideo]
- 2024-09-15
-
发表了主题帖:
【Follow me第二季第2期】进阶任务+扩展任务二 之 将SHT40数据通过MQTT传输到HA平台
本帖最后由 eew_Eu6WaC 于 2024-9-16 10:11 编辑
任务总览
获取SHT40的温湿度数据
搭建HomeAssistant平台
将设备接入到HomeAssistant平台
1.获取SHT40的温湿度数据
先使用官方例程测试一下SHT40传感器
/***************************************************
This is an example for the SHT4x Humidity & Temp Sensor
Designed specifically to work with the SHT4x sensor from Adafruit
----> https://www.adafruit.com/products/4885
These sensors use I2C to communicate, 2 pins are required to
interface
****************************************************/
#include <Wire.h>
#include "Adafruit_SHT4x.h"
#define SDA_PIN 27
#define SCL_PIN 26
Adafruit_SHT4x sht4 = Adafruit_SHT4x();
void setup() {
Serial.begin(115200);
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
TwoWire i2cWire = TwoWire(SCL_PIN, SDA_PIN);
Serial.println("Adafruit SHT4x test");
if (! sht4.begin(&i2cWire)) {
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("Temperature: "); Serial.print(temp.temperature); Serial.println(" degrees C");
Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");
Serial.print("Read duration (ms): ");
Serial.println(timestamp);
delay(1000);
}
串口打印出来的数据:
Adafruit SHT4x test
Found SHT4x sensor
Serial number 0x10C60BD0
High precision
No heater
Temperature: 30.67 degrees C
Humidity: 70.80% rH
Read duration (ms): 11
2. 搭建HomeAssistant平台
1. SD卡格式化
推荐使用SDFormatter(内存卡修复工具),经常在Linux和Windwos下使用的SD卡通常会有着不同的分区,在不能操作系统下识别出来的可能都不太一样,因此为了保险起见可以先格式化一下,若没有问题的可以跳过这一步
2. SD卡烧写镜像工具
推荐使用balenaEtcher,这是一个开源的、跨平台的工具,用于将操作系统镜像文件(如 ISO 和 IMG 文件)烧录到 SD 卡和 USB 驱动器中,支持的格式非常的多
选择镜像文件。我是用的是树莓派4,因此选择的是haos_rpi4-64-6.4.img.xz,大家根据自己的设备在附件中选择对应的型号即可。
选择SD卡、U盘等设备
Flash!等待烧写完成
3. 上电!配置树莓派
插入烧写好的镜像SD卡到树莓派
接网线到路由器
将电脑通过WiFi或者网线接入到上面树莓派接入的路由器
接HDMI到显示屏等能够显示的设备(有条件的最后接上,没有问题也不是很大)
上电!
若插上HDMI,稍稍稍微的登上那么一段时间,等待系统启动完成就可以看到这个界面了,若没有显示屏,不要捉急,在网站上输入http://homeassistant.local:8123/等待网页显示。若成功启动了,恭喜你完成了第一步!!!
能成功进入网站上,会显示这个界面准备,我一开始信了这个鬼(这最多可能需要20分钟),结果等了一个多小时都没有进去……
第二天起来看到已经到了Home Assistant 的欢迎界面,按照步骤一步步下去就可以了
点击FINISH之后,恭喜你现在已经启动并运行了 Home Assistant!!!
HA配置
SSH安装
设置
加载项
加载项商店
搜索ssh
安装后
成功安装的界面:
Samba 安装
设置
加载项
加载项商店
搜索Samba
安装
配置:用户名和密码
使用:
Win+R
输出\ip,例如\\192.168.1.43,这个ip就是上面ssh中查到的ip地址
就可以跟使用文件夹一样,对树莓派里面的文件进行操作了
安装MQTT
设置
加载项
加载项商店
搜索MQTT
设置-》设备于服务-》打开MQTT-》配置,就可以了以下界面,进行配置ip,用户名、密码等信息,记住这些信息哟
添加设备,使用的软件是MQTTx,发送下面数据,湿度同理
{
"name": "SHT40 Humidity",
"state_topic": "homeassistant/sensor/sht40_humidity/state",
"unit_of_measurement": "%rH",
"device_class": "temperature",
"json_attributes_topic": "homeassistant/sensor/sht40_humidity/attributes",
"unique_id": "sht40_humidity",
"device": {
"identifiers": ["sht40"],
"name": "SHT40 Sensor",
"model": "SHT40",
"manufacturer": "SHT"
}
}
就可以看到添加的设备了
.
代码和效果展示
#include "Adafruit_SHT4x.h"
#define SDA_PIN 27
#define SCL_PIN 26
Adafruit_SHT4x sht4 = Adafruit_SHT4x();
#include <WiFi.h>
#include <ArduinoMqttClient.h>
char ssid[] = "wifi"; // your network SSID (name)
char pass[] = "passpword"; // your network password
char mqtt_user[] = "master";
char mqtt_pass[] = "1";
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
const char broker[] = "192.168.1.22"; // MQTT broker address
int port = 1883;
const char subscribe_topic[] = "/status";
const char publish_topic_sht40_temperature[] = "homeassistant/sensor/sht40_temperature/state";
const char publish_topic_sht40_humidity[] = "homeassistant/sensor/sht40_humidity/state";
sensors_event_t humidity, temp;
void setup() {
//打开串口
Serial.begin(115200);
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
//连接WIFI
// Connect to WiFi
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
// failed, retry
Serial.print(".");
delay(5000);
}
Serial.println("\nYou're connected to the network");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
Serial.print("Gateway IP: ");
Serial.println(WiFi.gatewayIP());
Serial.print("Subnet Mask: ");
Serial.println(WiFi.subnetMask());
Serial.print("MAC Address: ");
//Serial.println(WiFi.macAddress());
Serial.println();
//连接MQTT
// Set MQTT username and password
mqttClient.setUsernamePassword(mqtt_user, mqtt_pass);
Serial.print("Attempting to connect to the MQTT broker.");
if (!mqttClient.connect(broker, port)) {
Serial.print("MQTT connection failed! Error code = ");
Serial.println(mqttClient.connectError());
while (1);
}
Serial.println("You're connected to the MQTT broker!");
Serial.print("Subscribing to topic: ");
Serial.println(subscribe_topic);
// Subscribe to a topic
mqttClient.subscribe(subscribe_topic);
Serial.print("Waiting for messages on topic: ");
Serial.println(subscribe_topic);
//连接SHT40
TwoWire i2cWire = TwoWire(SCL_PIN, SDA_PIN);
Serial.println("SHT40 测试");
if (! sht4.begin(&i2cWire)) {
Serial.println("无法访问SHT40");
while (1) delay(1);
}
Serial.println("开始读取SHT40序列号");
Serial.print("SHT40的序列号是:");
Serial.println(sht4.readSerial(), HEX);
uint32_t timestamp = millis();
sht4.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
timestamp = millis() - timestamp;
Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" degrees C");
Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");
Serial.print("Read duration (ms): ");
Serial.println(timestamp);
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
uint32_t timestamp = millis();
Serial.println("1");
sht4.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
Serial.println("2");
timestamp = millis() - timestamp;
Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" degrees C");
Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");
Serial.print("Read duration (ms): ");
Serial.println(timestamp);
delay(1000);
publishMessage_sht40_temperature(String(temp.temperature));
publishMessage_sht40_humidity(String(humidity.relative_humidity));
}
// Function to publish a message to the MQTT broker
//发布温度信息
void publishMessage_sht40_temperature(const String &message) {
mqttClient.beginMessage(publish_topic_sht40_temperature);
mqttClient.print(message);
mqttClient.endMessage();
}
// Function to publish a message to the MQTT broker
//发布湿度信息
void publishMessage_sht40_humidity(const String &message) {
mqttClient.beginMessage(publish_topic_sht40_humidity);
mqttClient.print(message);
mqttClient.endMessage();
}
[localvideo]3a8c346cbe34cc3d52a0b18f44c9ad51[/localvideo]
-
发表了主题帖:
【Follow me第二季第2期】基础任务(必做)之 用OPAMP放大DAC信号
本帖最后由 eew_Eu6WaC 于 2024-9-15 08:49 编辑
任务总览
电路分析
功能实现和展示
电路分析
电路也没啥好分析的,就是一个DAC引脚和运放的三个引脚,但是我手头上并没示波器,所以用了一块STM32F4的开发版烧了网上一个示波器例程,来勉强的观看波形
因为STM32的ADC采样电压大概是3.3v左右,Arduino输出也在3.3v左右,将运放接成同相比例放大电路。这样铁会超过3.3V,所以在DAC输出的时候经过两个电阻进行分压,所以输出电压就是 ,接线图如下所示
功能实现和展示
DAC输出正弦波到运放的AMP+,通过运放放大后到STM32的ADC引脚,最后在屏幕上显示出来
代码十分简单,添加了一行启用运放的代码
#include "analogWave.h"
#include <OPAMP.h>
analogWave wave(DAC);
int freq = 1000;
void setup() {
OPAMP.begin(OPAMP_SPEED_HIGHSPEED);
wave.sine(freq);
}
void loop() {
}
[localvideo]8b10553b433b3f8fbbb5fda299adf1a2[/localvideo]
-
发表了主题帖:
【Follow me第二季第2期】基础任务(必做)之 用DAC生成正弦波
本帖最后由 eew_Eu6WaC 于 2024-9-15 08:43 编辑
任务总览
电路分析
功能实现和展示
电路分析
电路也没啥好分析的,就是一个DAC引脚,但是我手头上并没示波器,所以用了一块STM32F4的开发版烧了网上一个示波器例程,来勉强的观看波形
因为STM32的ADC采样电压大概是3.3v左右,Arduino输出也在3.3v左右,所以顶部会有一点失真,因此在DAC输出引脚上,使用R1和R2进行分压,接线图如下所示
功能实现和展示、
DAC输出一个正弦波到STM32的ADC引脚,最后在屏幕上显示出来。
代码非常的非常的简单,指定引脚,设定一个频率,然后就完事了!
#include "analogWave.h"
analogWave wave(DAC);
int freq = 1000;
void setup() {
wave.sine(freq);
}
void loop() {
}
[localvideo]338b532938ad52eb8c9d46530ab99446[/localvideo]
-
发表了主题帖:
【Follow me第二季第2期】基础任务(必做)之 驱动12x8点阵LED
任务总览
电路分析
功能实现和展示
电路分析
电路如下图所示,使用矩阵来控制这么多个LED,那这一想到的就是找一下有没有LED矩阵的库,果然不出所料有一个"Arduino_LED_Matrix.h"使用非常的方便!
功能实现和展示
串口读取发送的数据
LED矩阵显示串口读到的数据
#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix;
void setup() {
Serial.begin(115200);
matrix.begin();
}
char SerialRcvBuf[100];
void loop() {
if(Serial.available() > 0)
{
memset(SerialRcvBuf, 0, sizeof(SerialRcvBuf));
// 添加5个空格到缓冲区的开头
for (int i = 0; i < 6; i++)
{
SerialRcvBuf[i] = ' ';
}
byte rcvMark = 6;
while (Serial.available() > 0 && rcvMark < 100)
{
SerialRcvBuf[rcvMark] = char(Serial.read());
delay(2); // 短暂延迟以防止过快读取
rcvMark++;
}
// Serial.println(SerialRcvBuf);
}
matrix.beginDraw();
matrix.stroke(0xFFFFFFFF);
matrix.textScrollSpeed(80);
matrix.textFont(Font_5x7);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(SerialRcvBuf);
matrix.endText(SCROLL_LEFT);
matrix.endDraw();
}
[localvideo]f56d91aa6435035d6fddd5f3c9bab0bf[/localvideo]
- 2024-09-14
-
发表了主题帖:
【Follow me第二季第2期】入门任务(必做):搭建环境并开启第一步Blink / 串口打...
本帖最后由 eew_Eu6WaC 于 2024-9-15 07:35 编辑
任务总览
下载安装Arduino
安装Arduino UNO R4 WiFi对应的板子
开始愉快的编程
1. 下载安装Arduino
打开Arduino IDE官网的,选择对应的系统和系统位数下载即可
2. 安装Arduino UNO R4 WiFi对应的板子
插上板子,Arduino就会自动识别出板子,然后在板子管理中安装即可,就把可以快速参考例程
3. 开始愉快的编程
实现的功能:
LED亮
延时
打印“Hello Arduino! LED ON”
延时
LED灭
延时
打印“Hello Arduino! LED OFF”
延时
电路分析:可以看到控制LED的GPIO是通过一个NMOS来操作的,高电平-DL4亮,低电平-DL4灭
void setup() {
// open the serial port:
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
Serial.print("Hello Arduino! LED ON\r\n");
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
Serial.print("Hello Arduino! LED OFF\r\n");
delay(1000);
}
[localvideo]5e6cfd736bb93bc7baffca96fbe863a9[/localvideo]
-
发表了主题帖:
【Follow me第二季第2期】作品汇总
本帖最后由 eew_Eu6WaC 于 2024-10-15 18:18 编辑
前言
很高兴能够参加本次活动(Follow me第二季第2期),后面我将一一的对板卡以及完成的活动进行介绍!
板卡展示
图片如下,使用的板卡是Arduino UNO R4 WiFi,上面主要的芯片是瑞萨的RA4和乐鑫的ESP32-S3,配置的十分豪华。
这块板子的内存比以前的更大,具有256kB闪存,32kB SRAM和8kB EEPROM。
需要注意的是:RA4的工作电压固定为5V,而ESP32-S3模块的工作电压为3.3V。因此两个mcu之间的通信是通过逻辑电平转换器进行的。
我够买的东西都是活动必备物料:一个开发板、一个传感器以及一根连接线
另外还用到了其他的板子进行辅助,一块是树莓派4(用作与作HA中枢),一块STM32F4(用作与示波器)
视频演示
视频快捷索引:
入门任务:91:35
基础任务一:01:51
基础任务二:02:12
基础任务三:02:25
基础任务四:02:40
进阶任务+创意任务二:02:47
任务总览
搭建环境并开启第一步Blink / 串口打印Hello EEWorld!链接
驱动12x8点阵LED!链接
用DAC生成正弦波!链接
用OPAMP放大DAC信号!链接
用ADC采集并且打印数据到串口等其他接口可上传到上位机显示曲线!链接
通过Wi-Fi,利用MQTT协议接入到开源的智能家居平台HA(HomeAssistant)链接
通过外部SHT40温湿度传感器,上传温湿度到HA,通过HA面板显示数据!链接
入门任务
环境搭建:搭建环境并开启第一步Blink / 串口打印Hello EEWorld!
本次活动使用Arduino进行开发,虽然也可也使用瑞萨官方的IDE,但是Arduino比较方便!
1.打开Arduino IDE官网,选择对应的系统和系统位数下载即可
2.在开发板管理器中,搜索Arduino UNO R4 Boards,并且安装一下(安装完成后就可以看到对应的例程了)
3,插上板卡,这IDE的设备选择器中就可以看到一样名字的板卡了
串口打印和闪烁LED:
因为安装了这块开发板的板子,所以可以直接使用LED_BUILTIN这个引脚来使用,只需要初始化引脚为输出,并且设置串口的波特率,就可以正常工作了,下面贴出代码和视频
void setup() {
// open the serial port:
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
Serial.print("Hello Arduino! LED ON\r\n");
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
Serial.print("Hello Arduino! LED OFF\r\n");
delay(1000);
}
[localvideo]b1dbb980813692317e7586298ec087f6[/localvideo]
基础任务一:驱动12x8点阵LED!
设计思路:和控制单个LED相似,是需要给LED通上正向电压,设置GPIO的输出电压为1或者0即可控制灯的亮或者灭。但是正常使用的时候用一个I/O控制一个LED还是合理的,但是如果有七七四九个LED,总不能用49个IO来分别控制LED吧,那也太奢华了。所以采用矩阵的方式来控制,可以参考板卡对应的例程:需要使用到的是"Arduino_LED_Matrix.h"和"Arduino_LED_Matrix.h"这两个库,只需要事先将要显示的内容保存到Buff里面,然后再传进去就可以显示了
下面贴出代码和视频
#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix;
void setup() {
Serial.begin(115200);
matrix.begin();
}
char SerialRcvBuf[100];
void loop() {
if(Serial.available() > 0)
{
memset(SerialRcvBuf, 0, sizeof(SerialRcvBuf));
// 添加5个空格到缓冲区的开头
for (int i = 0; i < 6; i++)
{
SerialRcvBuf[i] = ' ';
}
byte rcvMark = 6;
while (Serial.available() > 0 && rcvMark < 100)
{
SerialRcvBuf[rcvMark] = char(Serial.read());
delay(2); // 短暂延迟以防止过快读取
rcvMark++;
}
// Serial.println(SerialRcvBuf);
}
matrix.beginDraw();
matrix.stroke(0xFFFFFFFF);
matrix.textScrollSpeed(80);
matrix.textFont(Font_5x7);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(SerialRcvBuf);
matrix.endText(SCROLL_LEFT);
matrix.endDraw();
}
[localvideo]ff545fda72c2447e5acb2e9c32b355d9[/localvideo]
基础任务二:用DAC生成正弦波!
连接示意图:为了防止STM32示波器烧掉,所以将输出的波形电压进行分压
代码部分十分简单,只需要一行设置频率即可
下面贴出代码和视频
#include "analogWave.h"
analogWave wave(DAC);
int freq = 1000;
void setup() {
wave.sine(freq);
}
void loop() {
}
[localvideo]2e846dc94788ad9a361360edffbcdd0d[/localvideo]
基础任务三:用OPAMP放大DAC信号!
连接示意图:为了防止STM32示波器烧掉,所以将输出的波形电压进行分压,并且将运放连接成同相比例运放,V0 = (1 + Rf / R3) * vi
代码部分十分简单,相比于输出DAC波形,多了一行启动运放
下面贴出代码和视频
#include "analogWave.h"
#include <OPAMP.h>
analogWave wave(DAC);
int freq = 1000;
void setup() {
OPAMP.begin(OPAMP_SPEED_HIGHSPEED);
wave.sine(freq);
}
void loop() {
}
[localvideo]60a249e8ea9c443b2e0a91cbb567e5ad[/localvideo]
基础任务四:用ADC采集并且打印数据到串口等其他接口可上传到上位机显示曲线!
通过Arduino显示波形很方便,IDE不仅自带了串口调试器还支持波形显示,只需要传入数据就可以产生波形,需要注意的是最高将串口的波特率调高一点可以稍微是波形更加平滑一丢丢
下面贴出代码和视频
#include "analogWave.h"
analogWave wave(DAC);
int freq = 1;
void setup() {
Serial.begin(460800);
wave.sine(freq);
}
void loop() {
int ReadValue = analogRead(A5);
Serial.println(ReadValue);
delay(50);
}
[localvideo]79214eb638fcd4f5abc720fbaa56650b[/localvideo]
进阶任务+创意任务二:搭建HA平台,并且将传感器数据上传
这个进阶任务的难点在于HA平台搭建和设备的接入,下面将介绍如何搭建平台和接入板卡
配置树莓派HA平台
插入烧写好的镜像SD卡到树莓派
接网线到路由器
将电脑通过WiFi或者网线接入到上面树莓派接入的路由器
接HDMI到显示屏等能够显示的设备(有条件的最后接上,没有问题也不是很大)
上电!
若插上HDMI,稍稍稍微的登上那么一段时间,等待系统启动完成就可以看到这个界面了,若没有显示屏,不要捉急,在网站上输入
http://homeassistant.local:8123/
等待网页显示。若成功启动了,恭喜你完成了第一步!!!
能成功进入网站上,会显示这个界面准备,我一开始信了这个鬼(这最多可能需要20分钟),结果等了一个多小时都没有进去……
第二天起来看到已经到了Home Assistant 的欢迎界面,按照步骤一步步下去就可以了
点击FINISH之后,恭喜你现在已经启动并运行了 Home Assistant!!!
HA配置
SSH安装
设置
加载项
加载项商店
搜索ssh
安装后
成功安装的界面:
Samba 安装
设置
加载项
加载项商店
搜索Samba
安装
配置:用户名和密码
使用:
Win+R
输出\ip,例如
\\192.168.1.43
,这个ip就是上面ssh中查到的ip地址
就可以跟使用文件夹一样,对树莓派里面的文件进行操作了
安装MQTT
设置
加载项
加载项商店
搜索MQTT
设置-》设备于服务-》打开MQTT-》配置,就可以了以下界面,进行配置ip,用户名、密码等信息,记住这些信息哟
添加设备,使用的软件是MQTTx,发送下面数据,湿度同理
{
"name": "SHT40 Humidity",
"state_topic": "homeassistant/sensor/sht40_humidity/state",
"unit_of_measurement": "%rH",
"device_class": "temperature",
"json_attributes_topic": "homeassistant/sensor/sht40_humidity/attributes",
"unique_id": "sht40_humidity",
"device": {
"identifiers": ["sht40"],
"name": "SHT40 Sensor",
"model": "SHT40",
"manufacturer": "SHT"
}
}
就可以看到添加的设备了
.
下面贴出代码和视频
#include "Adafruit_SHT4x.h"
#define SDA_PIN 27
#define SCL_PIN 26
Adafruit_SHT4x sht4 = Adafruit_SHT4x();
#include <WiFi.h>
#include <ArduinoMqttClient.h>
char ssid[] = "wifi"; // your network SSID (name)
char pass[] = "passpword"; // your network password
char mqtt_user[] = "master";
char mqtt_pass[] = "1";
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
const char broker[] = "192.168.1.22"; // MQTT broker address
int port = 1883;
const char subscribe_topic[] = "/status";
const char publish_topic_sht40_temperature[] = "homeassistant/sensor/sht40_temperature/state";
const char publish_topic_sht40_humidity[] = "homeassistant/sensor/sht40_humidity/state";
sensors_event_t humidity, temp;
void setup() {
//打开串口
Serial.begin(115200);
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
//连接WIFI
// Connect to WiFi
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
// failed, retry
Serial.print(".");
delay(5000);
}
Serial.println("\nYou're connected to the network");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
Serial.print("Gateway IP: ");
Serial.println(WiFi.gatewayIP());
Serial.print("Subnet Mask: ");
Serial.println(WiFi.subnetMask());
Serial.print("MAC Address: ");
//Serial.println(WiFi.macAddress());
Serial.println();
//连接MQTT
// Set MQTT username and password
mqttClient.setUsernamePassword(mqtt_user, mqtt_pass);
Serial.print("Attempting to connect to the MQTT broker.");
if (!mqttClient.connect(broker, port)) {
Serial.print("MQTT connection failed! Error code = ");
Serial.println(mqttClient.connectError());
while (1);
}
Serial.println("You're connected to the MQTT broker!");
Serial.print("Subscribing to topic: ");
Serial.println(subscribe_topic);
// Subscribe to a topic
mqttClient.subscribe(subscribe_topic);
Serial.print("Waiting for messages on topic: ");
Serial.println(subscribe_topic);
//连接SHT40
TwoWire i2cWire = TwoWire(SCL_PIN, SDA_PIN);
Serial.println("SHT40 测试");
if (! sht4.begin(&i2cWire)) {
Serial.println("无法访问SHT40");
while (1) delay(1);
}
Serial.println("开始读取SHT40序列号");
Serial.print("SHT40的序列号是:");
Serial.println(sht4.readSerial(), HEX);
uint32_t timestamp = millis();
sht4.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
timestamp = millis() - timestamp;
Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" degrees C");
Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");
Serial.print("Read duration (ms): ");
Serial.println(timestamp);
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
uint32_t timestamp = millis();
Serial.println("1");
sht4.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
Serial.println("2");
timestamp = millis() - timestamp;
Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" degrees C");
Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");
Serial.print("Read duration (ms): ");
Serial.println(timestamp);
delay(1000);
publishMessage_sht40_temperature(String(temp.temperature));
publishMessage_sht40_humidity(String(humidity.relative_humidity));
}
// Function to publish a message to the MQTT broker
//发布温度信息
void publishMessage_sht40_temperature(const String &message) {
mqttClient.beginMessage(publish_topic_sht40_temperature);
mqttClient.print(message);
mqttClient.endMessage();
}
// Function to publish a message to the MQTT broker
//发布湿度信息
void publishMessage_sht40_humidity(const String &message) {
mqttClient.beginMessage(publish_topic_sht40_humidity);
mqttClient.print(message);
mqttClient.endMessage();
}
[localvideo]22c31ffd26363531fbb9b978904aae78[/localvideo]
项目总结
这块开发板是我第一块Arduino开发板,与之前学习使用的都是STM32这些板子。听说了Arduino使用起来非常的方便,现在在上面进行开发亲身体会到这便捷和乐趣。通过对上面任务的完成,不断的学习了一些库以及Arduino外设的使用,虽然有时候并不知道库里的引脚是哪个引脚,现在也能方便的跳进库文件里面查看了。最后感谢得捷和电子森林能够提供这行活动的机会,让我探索Arduino的世界!
项目源码
Follow me 第二季第2期 代码汇总-嵌入式开发相关资料下载-EEWORLD下载中心
-
加入了学习《Follow me第二季第2期视频演示》,观看 演示视频
- 2024-09-10
-
加入了学习《DigiKey 应用说:Raspberry Pi 5 在视频直播中的应用》,观看 Raspberry Pi 5 在视频直播中的应用