641|2

19

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【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

 
任务总览 
  1. 搭建环境并开启第一步Blink / 串口打印Hello EEWorld!链接
  2. 驱动12x8点阵LED!链接
  3. 用DAC生成正弦波!链接
  4. 用OPAMP放大DAC信号!链接
  5. 用ADC采集并且打印数据到串口等其他接口可上传到上位机显示曲线!链接
  6. 通过Wi-Fi,利用MQTT协议接入到开源的智能家居平台HA(HomeAssistant)链接
  7. 通过外部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);
}

【Follow me第二季第2期】入门任务(必做):搭建环境并开启第一步Blink - 串口打... - DigiKey得捷技术专区 - 电子工程世界-论坛

基础任务一:驱动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();
}

【Follow me第二季第2期】基础任务(必做)之 驱动12x8点阵LED - DigiKey得捷技术专区 - 电子工程世界-论坛

 

基础任务二:用DAC生成正弦波!

连接示意图:为了防止STM32示波器烧掉,所以将输出的波形电压进行分压

  

代码部分十分简单,只需要一行设置频率即可

下面贴出代码和视频

#include "analogWave.h"

analogWave wave(DAC);

int freq = 1000; 

void setup() {
  wave.sine(freq);
}

void loop() {
}

【Follow me第二季第2期】基础任务(必做)之 用DAC生成正弦波 - DigiKey得捷技术专区 - 电子工程世界-论坛

 

 

基础任务三:用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() {
}

【Follow me第二季第2期】基础任务(必做)之 用OPAMP放大DAC信号 - DigiKey得捷技术专区 - 电子工程世界-论坛

 

基础任务四:用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);
}


【Follow me第二季第2期】用ADC采集打印数据到串口等其他接口可上传到上位机显示 - DigiKey得捷技术专区 - 电子工程世界-论坛

 

进阶任务+创意任务二:搭建HA平台,并且将传感器数据上传

这个进阶任务的难点在于HA平台搭建和设备的接入,下面将介绍如何搭建平台和接入板卡

 

配置树莓派HA平台

  1. 插入烧写好的镜像SD卡到树莓派

  2. 接网线到路由器

  3. 将电脑通过WiFi或者网线接入到上面树莓派接入的路由器

  4. 接HDMI到显示屏等能够显示的设备(有条件的最后接上,没有问题也不是很大)

  5. 上电!

若插上HDMI,稍稍稍微的登上那么一段时间,等待系统启动完成就可以看到这个界面了,若没有显示屏,不要捉急,在网站上输入

等待网页显示。若成功启动了,恭喜你完成了第一步!!!

能成功进入网站上,会显示这个界面准备,我一开始信了这个鬼(这最多可能需要20分钟),结果等了一个多小时都没有进去……

 

第二天起来看到已经到了Home Assistant 的欢迎界面,按照步骤一步步下去就可以了

 

点击FINISH之后,恭喜你现在已经启动并运行了 Home Assistant!!!

HA配置

SSH安装

  1. 设置

  2. 加载项

  3. 加载项商店

  4. 搜索ssh

 

  1. 安装后

     

  2. 成功安装的界面:

Samba 安装

  1. 设置

  2. 加载项

  3. 加载项商店

  4. 搜索Samba

  5. 安装

  6. 配置:用户名和密码

  7. 使用:

    1. Win+R

    2. 输出\ip,例如

      • \\192.168.1.43
      ,这个ip就是上面ssh中查到的ip地址
    3. 就可以跟使用文件夹一样,对树莓派里面的文件进行操作了

安装MQTT

  1. 设置

  2. 加载项

  3. 加载项商店

  4. 搜索MQTT

  1. 设置-》设备于服务-》打开MQTT-》配置,就可以了以下界面,进行配置ip,用户名、密码等信息,记住这些信息哟

  1. 添加设备,使用的软件是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"
    }
    }
    1. 就可以看到添加的设备了

    .

下面贴出代码和视频

#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();
}

【Follow me第二季第2期】进阶任务+扩展任务二 之 将SHT40数据通过MQTT传输到HA平台 - DigiKey得捷技术专区 - 电子工程世界-论坛

 

项目总结

    这块开发板是我第一块Arduino开发板,与之前学习使用的都是STM32这些板子。听说了Arduino使用起来非常的方便,现在在上面进行开发亲身体会到这便捷和乐趣。通过对上面任务的完成,不断的学习了一些库以及Arduino外设的使用,虽然有时候并不知道库里的引脚是哪个引脚,现在也能方便的跳进库文件里面查看了。最后感谢得捷和电子森林能够提供这行活动的机会,让我探索Arduino的世界!


项目源码

Follow me 第二季第2期 代码汇总-嵌入式开发相关资料下载-EEWORLD下载中心

最新回复

“电子森林”??什么鬼?  详情 回复 发表于 2024-11-11 21:49
点赞 关注
 
 

回复
举报

574

帖子

11

TA的资源

一粒金砂(高级)

沙发
 
“电子森林”??什么鬼?

点评

打错字了  详情 回复 发表于 2024-12-11 15:51
 
 
 

回复

19

帖子

1

TA的资源

一粒金砂(中级)

板凳
 
sunduoze 发表于 2024-11-11 21:49 “电子森林”??什么鬼?

打错字了

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
触摸屏种类与工作原理

触摸屏的基本原理是,用手指或其他物体触摸安装在显示器前端的触控屏时,所触摸的位置(以坐标形式)由触摸屏控制器检测,并通过接 ...

不才小小分析下今年的题目~【2009年电子设计大赛题目分析一】

先声明一下,已经远离比赛多年,分析的有不是的地方请您包涵,并指正。 觉得有可取的地方,您就看看。谢绝板砖。 ============== ...

把小弟这两天DIY的过程分享一下,顺便晒一晒第二块板子O(∩_∩)O~

前两天做了个小板子,算是练了练手,承蒙大家夸奖 正好要开始做第二块板子,看到有朋友问了,就把过程也写一下吧,谈不上经验, ...

MDK STM32启动文件的详细分析(_main,map详细分析)

启动文件是用汇编写的,所以先花了点时间去看汇编指令,然后 根据cortex—M3等的手册去看这个启动文件,彻底了解了在main 函数 ...

最全的电路测试流程

当一个电路板焊接完后,在检查电路板是否可以正常工作时,通常不直接给电路板供电,而是要按下面的步骤进行,确保 ...

【树莓派Pico测评】-制作红外体温计( I2C接口测试+MLX90614)

本帖最后由 fxyc87 于 2021-2-7 16:46 编辑 我上个贴子发布了如何利用USB进行串口通信, 【树莓派Pico测评】- USB CDC串口 ...

【雅特力开发板 AT32F421 测评】+养了一只看门狗

养只狗玩玩呗。 AT32F421有2只狗,这次我们来用用独立看门狗。 538626 在绝大多少单片机中,独立看门狗模 ...

和Vicor工程师一起聊聊高效供电,了解无人机的模块化电源解决方案!

553971 商业无人机公司在有效载荷能力和飞行时间上展开竞争,这与无人机的尺寸、重量和功率(SWaP)成正比。影响无人机尺寸 ...

IPC-4552B-中文版-CN TOC印制板化学镀镍 浸金(ENIG)镀覆性能规范

IPC-4552B-中文版-CN TOC印制板化学镀镍 浸金(ENIG)镀覆性能规范 https://share.weiyun.com/aigOt6Uz

基于LP-MSPM0C1104的温度计

本帖最后由 lugl4313820 于 2024-8-7 15:37 编辑 【前言】 我在论坛参与了以旧换新!100套TI MSPM0整装待发,升级你的装备 ...

关闭
站长推荐上一条 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
快速回复 返回顶部 返回列表