Arduino R4 WIFI板子测评及实列使用(风速测量)

admin 2025年4月18日13:45:31评论2 views字数 5417阅读18分3秒阅读模式

在物联网或者一些项目开发过程中,我们需要相应的开发板,如树莓派、Arduino、Esp8266、ESP32等。不同的案例,选择的板子有所不同。本期为大家带来基于Arduino R4 WIFI 这款板子的测评和使用。

Arduino R4 WiFi和Arduino uno有何不同呢?通过对比,我做了一个表格。

特性 Arduino Uno Arduino R4 WIFI
核心处理器
ATmega328P(8位AVR架构,16MHz)
Renesas RA4M1(32位ARM Cortex - M4,48MHz) + ESP32 - S3(WiFi/蓝牙模块)
内存
2KB SRAM,32KB闪存(含0.5KB引导程序)
32KB SRAM,256KB闪存(含引导程序) + ESP32 - S3独立内存(128KB SRAM,8MB PSRAM)
引脚资源
14个数字引脚(6个PWM),6个模拟输入引脚
20个数字引脚(6个PWM),6个模拟输入引脚 + 12位DAC(A0)、CAN总线(D4/D5)、OP AMP
通信接口
USB - B(UART转串口),SPI,I2C
USB - C(支持USB 2.0),SPI,I2C,CAN总线,UART
无线功能
需外接扩展板(如ESP8266)
内置ESP32 - S3模块,支持WiFi 4(802.11 b/g/n)和蓝牙5.0
电源管理
输入电压6 - 20V(推荐7 - 12V),5V/3.3V输出
输入电压6 - 24V(推荐7 - 12V),5V/3.3V输出 + 24V耐压能力(直接驱动电机/LED灯带)
扩展能力
兼容Uno标准扩展板(如Ethernet Shield)
兼容Uno扩展板,新增Qwiic I2C连接器,支持即插即用传感器
板载外设
1个用户LED(D13)
12×8 LED矩阵(支持图形/动画显示)、VRTC(实时时钟)、OFF引脚(低功耗控制)
价格
约15 - 25美元
约25 - 35美元

可以看到,最大的不同时内存容量的增加以及支持WiFi何蓝牙连接。当然,价格也很可观!

实物

Arduino R4 WIFI板子测评及实列使用(风速测量)
正面
Arduino R4 WIFI板子测评及实列使用(风速测量)
侧面
Arduino R4 WIFI板子测评及实列使用(风速测量)
Arduino R4 WIFI板子测评及实列使用(风速测量)
LED矩阵

与其最大的特色,在于可以连接WiFi了。但你会说ESP8266不是更便宜吗?是的,但是Arduino支持更多的模拟脚针,如果是多个数据,esp8266就显得力不从心了。

接下来,我们通过一个小案例来测试其性能。

上报风速传感器

风速传感器采用小型直流有刷电机与三杯式旋转风杯组装而成,其工作原理为,当环境有水平流动风时,旋转风杯能够产生旋转,并带动小型电机产生电压,其电压与旋转速度基本成正比。利用此信号电压,可以对环境风速进行测量。

Arduino R4 WIFI板子测评及实列使用(风速测量)

线路连接

(棕色) -- A0(蓝色)-- GND

实验代码

#include<WiFiS3.h>#include<ArduinoMqttClient.h>#include<ArduinoJson.h>// WiFi 配置constchar* ssid = "PDCN";constchar* password = "1234567890";// MQTT 配置constchar* mqttServer = "MQTT服务器地址";constint mqttPort = 1883;constchar* mqttUser = "admin";constchar* mqttPassword = "admin";constchar* mqttClientId = "ArduinoR4_Wind_";  // 将在setup中添加随机数constchar* mqttTopic = "fengsu"//订阅主题WiFiClient wifiClient;MqttClient mqttClient(wifiClient);constint windPin = A0;char finalClientId[50];  // 存储完整的客户端ID// 添加校准相关变量constfloat VOLTAGE_OFFSET = 22.22;  // 无风时的电压偏移值(mv)constint CALIBRATION_SAMPLES = 10;  // 校准时的采样次数float voltageOffset = 0;  // 实际测得的电压偏移值// 生成随机的客户端IDvoidgenerateClientId(){unsignedlong randNumber = random(10000009999999);sprintf(finalClientId, "%s%lu", mqttClientId, randNumber);  Serial.print("使用客户端ID: ");  Serial.println(finalClientId);}// 校准函数voidcalibrateSensor(){  Serial.println("开始校准风速传感器...");float sum = 0;for(int i = 0; i < CALIBRATION_SAMPLES; i++) {int sensorValue = analogRead(windPin);float voltage = sensorValue * (3.3 / 1023.0) * 1000;  // 转换为mv    sum += voltage;    delay(100);  }  voltageOffset = sum / CALIBRATION_SAMPLES;  Serial.print("电压偏移值: ");  Serial.println(voltageOffset);}voidconnectWiFi(){  Serial.println("n正在连接WiFi...");if (WiFi.status() == WL_NO_MODULE) {    Serial.println("通信失败!找不到WiFi模块");while (true);  }  String fv = WiFi.firmwareVersion();  Serial.print("固件版本: ");  Serial.println(fv);  WiFi.disconnect();  delay(1000);  Serial.print("正在连接到 ");  Serial.println(ssid);  WiFi.begin(ssid, password);int attempts = 0;while (WiFi.status() != WL_CONNECTED && attempts < 20) {    delay(500);    Serial.print(".");    attempts++;  }if (WiFi.status() == WL_CONNECTED) {    Serial.println("nWiFi已连接");    Serial.print("IP地址: ");    Serial.println(WiFi.localIP());    Serial.print("信号强度: ");    Serial.println(WiFi.RSSI());  } else {    Serial.println("nWiFi连接失败!");  }}voidconnectMQTT(){if (!mqttClient.connected()) {    Serial.println("正在连接MQTT服务器...");// 设置MQTT连接参数    mqttClient.setId(finalClientId);    mqttClient.setUsernamePassword(mqttUser, mqttPassword);    mqttClient.setKeepAliveInterval(60 * 1000);    mqttClient.setCleanSession(true);  // 设置Clean Start为true    Serial.print("正在连接到MQTT服务器 ");    Serial.print(mqttServer);    Serial.print(":");    Serial.println(mqttPort);int attempts = 0;bool connected = false;while (!connected && attempts < 5) {      Serial.print("尝试 MQTT 连接...");if (mqttClient.connect(mqttServer, mqttPort)) {        Serial.println("已连接到MQTT服务器");        connected = true;      } else {        Serial.print("连接失败, 错误 = ");        Serial.println(mqttClient.connectError());        Serial.println("4秒后重试");        delay(4000);      }      attempts++;    }  }}voidsetup(){  Serial.begin(115200);while (!Serial) {    ; // 等待串口连接  }// 初始化随机数生成器  randomSeed(analogRead(0));  generateClientId();  pinMode(windPin, INPUT);  delay(1000);// 在连接WiFi前进行校准  calibrateSensor();  connectWiFi();}voidloop(){if (WiFi.status() != WL_CONNECTED) {    Serial.println("WiFi连接断开,尝试重连...");    connectWiFi();    delay(5000);return;  }if (!mqttClient.connected()) {    connectMQTT();  }// 保持MQTT连接  mqttClient.poll();if (mqttClient.connected()) {// 读取风速传感器数据int sensorValue = analogRead(windPin);float voltage = sensorValue * (3.3 / 1023.0) * 1000;  // 转换为mv// 计算校准后的电压值float calibratedVoltage = voltage - voltageOffset;if (calibratedVoltage < 0) calibratedVoltage = 0;// 使用校准后的电压计算风速float speed = round(0.027 * calibratedVoltage * 10) / 10.0;  // 保留一位小数    StaticJsonDocument<200> doc;    doc["FS"] = speed;    doc["FDJ"] = getWindLevel(speed);char json[200];    serializeJson(doc, json);// 发布消息if (mqttClient.beginMessage(mqttTopic)) {      mqttClient.print(json);      mqttClient.endMessage();      Serial.print("发送成功: ");      Serial.println(json);    } else {      Serial.println("发送失败");    }  }  delay(5000);}// 获取风速等级函数constchargetWindLevel(float speed){// 添加一个小的误差范围constfloat EPSILON = 0.0001;  // 误差范围if (speed >= 0.0 - EPSILON && speed <= 0.2 + EPSILON) return"无风";elseif (speed > 0.2 && speed <= 1.5return"软风";elseif (speed > 1.5 && speed <= 3.3return"轻风";elseif (speed > 3.3 && speed <= 5.4return"微风";elseif (speed > 5.4 && speed <= 7.9return"和风";elseif (speed > 7.9 && speed <= 10.7return"轻劲风";elseif (speed > 10.7 && speed <= 13.8return"强风";elseif (speed > 13.8 && speed <= 17.1return"疾风";elseif (speed > 17.1 && speed <= 20.7return"大风";elseif (speed > 20.7 && speed <= 24.4return"烈风";elseif (speed > 24.4 && speed <= 28.4return"狂风";elseif (speed > 28.4 && speed <= 32.6return"暴风";elseif (speed > 32.6return"飓风";return"未知等级";}

效果:

会向fengsu主题发送json数据,格式如下:

{"FS":1.1,"FDJ":"软风"}
Arduino R4 WIFI板子测评及实列使用(风速测量)

原文始发于微信公众号(kali笔记):Arduino R4 WIFI板子测评及实列使用(风速测量)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月18日13:45:31
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Arduino R4 WIFI板子测评及实列使用(风速测量)https://cn-sec.com/archives/3974314.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息