本帖最后由 upc_arm 于 2024-11-2 11:14 编辑
感谢
感谢论坛,通过这次活动,让我对Arduino UNO R4 WiFi的使用有了深入全面的了解,为后面的开发打开基础。
我的任务汇总
第一部分:演示视频
所有任务的视频如下:
鎾斁鍣ㄥ姞杞藉け璐�: 鏈娴嬪埌Flash Player锛岃鍒�
瀹夎
演示汇总
第二部分:任务实现详情
任务简介
总共3个任务,分别是:
- (1) 入门程序Hello World
- (2) DAC生成波形图,MPAMP放大后ADC采集,再在点阵和串口显示波形
- (3) 用温湿度传感器采集数据,通过MQTT协议,在HA和MQTT工具上显示数据
物料清单
- (1) Arduino UNO R4 WiFi
- (2) SHT40温湿度传感器扩展板
- (3) Qwiic连接线
实物图
设计思路
3个任务设计思路基本类似:第一步设置各种外设;第二步初始化全局变量、WiFI、外设等;第三步大循环,读取温湿度传感器数据,处理,显示,通过MQTT发送到远端。
软件流程图
程序设计流程图如下图所示:
任务介绍
任务1
主要代码片段
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("LED ON\r\n");
delay(3000);
digitalWrite(LED_BUILTIN, LOW);
Serial.print("LED OFF\r\n");
delay(1000);
}
分帖链接:
任务1帖子链接
任务2
主要代码片段
analogWave wave(DAC);
ArduinoLEDMatrix matrix;
byte frame[8][12] = {
{ 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, 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 },
{ 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, 0, 0, 0, 0, 0, 0 }
};
const int analogInPin = A0;
const int analogOutPin = 9;
int freq = 1;
int time_idx = 0;
int sensorValue = 0;
int outputValue = 0;
void setup() {
Serial.begin(19200);
analogReadResolution(10);
wave.sine(freq);
wave.amplitude(0.5);
matrix.begin();
if(false)
{
if (!OPAMP.begin(OPAMP_SPEED_HIGHSPEED)) {
Serial.println("Failed to start OPAMP!");
}
bool const isRunning = OPAMP.isRunning(0);
if (isRunning) {
Serial.println("OPAMP running on channel 0!");
} else {
Serial.println("OPAMP channel 0 is not running!");
}
}
}
void set_matrix(int idx, int num)
{
for(int i=0; i<8; i++)
{
for(int j=0;j<11;j++)
{frame<i>[j] = frame<i>[j+1];}
}
num = num / 16;
for(int i=0; i<num; i++)
{frame<i>[idx] = 1;}
}
void loop()
{
int reading = analogRead(A3);
int serial_num = map(reading, 0, 1023, 0, 255);
Serial.println(String(serial_num));
if(time_idx>=12)
{time_idx=0;}
set_matrix(10, serial_num);
matrix.renderBitmap(frame, 8, 12);
delay(50);
time_idx = time_idx + 1;
}
分帖链接:
任务2帖子链接
任务3
主要代码片段
Adafruit_SHT4x sht4 = Adafruit_SHT4x();
char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;
int keyIndex = 0;
int led = LED_BUILTIN;
int status = WL_IDLE_STATUS;
WiFiServer server(80);
void setup() {
Serial.begin(9600);
while (!Serial)
delay(10);
Serial.println("Adafruit SHT4x test");
if (! sht4.begin()) {
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);
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;
}
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);
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 printWiFiStatus() {
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
Serial.print("To see this page in action, open a browser to http://");
Serial.println(ip);
}
分帖链接:
任务3帖子链接
本次活动心得体会
通过这次活动,让我对Arduino UNO R4 WiFi的ADC、DAC、串口、点阵、WIFI等模块的使用有了深入的学习,后面开发的话,可以直接基于这些项目进行。最后感谢论坛组织的这次活动!
第三部分:可以编译下载的代码: