494|1

7

帖子

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的资源

一粒金砂(高级)

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

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
高频PCB设计中出现的干扰分析及对策

高频PCB设计中出现的干扰分析及对策

wiggler板PCB

wiggler板PCB

元件模特秀--图文并茂、简单易懂

无意间发现一篇很有创意的介绍元件的原理、外形、封装、功能的文章---元件模特秀。 原作者是“爱因迪生”。在这里我转帖过来, ...

我收藏的80多份TI中文资料

本帖最后由 dontium 于 2015-1-23 11:16 编辑 :) 压缩版资料,见18楼; TI的模拟应用期刊; 169466 169467 169468 169469 ...

《VLMC激光雕刻机》三,VLMC激光雕刻机分解---3.3,软件部分

本帖最后由 kejoy 于 2015-8-16 19:21 编辑 3.3,软件部分 210740 简介 作为一个自动化设备,核心控制部分是相 ...

MSP430F5529单片机的DAC8552

DAC8552是TI公司推出的16 位双路电压输出数模转换器,本次来介绍一下这个芯片在MSP430单片机上如何使用。 1.芯片的电路图介绍 ...

有奖直播:英飞凌 MERUS™ D 类音频放大器的多电平技术及其优势活动颁奖啦!

有奖直播:英飞凌 MERUS™ D 类音频放大器的多电平技术及其优势活动颁奖啦! 名单详见下方列表。请获奖者务必在2020 ...

DLC升压电路分析与计算

鄙人近期遇到几个问题,感觉超出了本人的能力范围,无奈只能寄希望于请教一下论坛的大神了,哎!怪自己学艺不精呐,在此留下 ...

【国产FPGA安路 高集成低功耗SF1系列FPSoC新品】按键(防抖)控制蜂鸣器

a866288c7a39a46c8b09abaff374b6d2 前言 前面测试了LED,和按键,这一篇结合按键测试蜂鸣器,并实现按键防抖。 过程 ...

开发计划工作规程

开发计划工作规程 目标 规划项目开发过程中各项任务的时间和资源安排 预防、控制及消除项目计划执行过程中 ...

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表