upc_arm

个性签名:

I-Love-MCU

  • 2024-11-01
  • 发表了主题帖: 【Follow me第二季第2期】--任务汇总

    本帖最后由 upc_arm 于 2024-11-2 11:14 编辑 ## 感谢     感谢论坛,通过这次活动,让我对Arduino UNO R4 WiFi的使用有了深入全面的了解,为后面的开发打开基础。 ## 我的任务汇总 ### 第一部分:演示视频 所有任务的视频如下: [localvideo]cfd26ae22e86ac69b3f61feeb830bb97[/localvideo] ### 第二部分:任务实现详情 ### 任务简介 总共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 主要代码片段 ```c // the loop function runs over and over again forever void loop() {   digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on (HIGH is the voltage level)   Serial.println("LED ON\r\n");   delay(3000);                      // wait for a second   digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW   Serial.print("LED OFF\r\n");   delay(1000);                      // wait for a second } ``` 分帖链接: [任务1帖子链接](https://bbs.eeworld.com.cn/thread-1295359-1-1.html "任务1帖子链接") 任务2 主要代码片段 ```c // Create an instance of the analogWave class, using the DAC pin analogWave wave(DAC); // LEDMatrix 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 } }; // These constants won't change. They're used to give names to the pins used: const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to const int analogOutPin = 9;  // Analog output pin that the LED is attached to int freq = 1; int time_idx = 0; int sensorValue = 0;  // value read from the pot int outputValue = 0;  // value output to the PWM (analog out) void setup() {   // initialize serial communications at 9600 bps:   Serial.begin(19200);   //change to 14-bit resolution   analogReadResolution(10);   // Generate a sine wave with the initial frequency   wave.sine(freq);   wave.amplitude(0.5);   // LED   matrix.begin();   if(false)   {   // activate OPAMP, default channel 0   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

  • 2024-10-10
  • 回复了主题帖: 【Follow me第二季第2期】--入门任务--UNO R4 ADC--OPAMP--DAC--LED Matrix--串口采集

    LED点阵动态显示正弦波。

  • 2024-10-07
  • 发表了主题帖: 【Follow me第二季第2期】--进阶扩展任务--UNO R4 温湿度传感器--HA显示--MQTTX显示

    演示视频:[localvideo]c5dd7db13856fe7cefbe4d5a2cf16ace[/localvideo] UNO R4的温湿度传感器,HA显示: 1、任务目标 (1)UNO R4读取温湿度传感器数据。 (2)搭建HA服务器,采用docker方式。 (3)通过ESP32-S3模块发送,HA服务端显示当前温湿度。 2、参考文档 (1)https://docs.arduino.cc/tutorials/uno-r4-wifi/qwiic/ (2)https://docs.arduino.cc/tutorials/uno-r4-wifi/wifi-examples/ (3)https://zhuanlan.zhihu.com/p/421109780 (4)https://www.emqx.com/zh/blog/the-easiest-guide-to-getting-started-with-mqtt 3、分析 (1)MQTT是一种轻量级、基于发布-订阅模式的消息传输协议。 一个典型的MQTT示意图如下图所示。图中涉及以下几个关键概念: MQTT客户端:发送或接受消息的设备,如图,左侧有1个客户端,右侧有3个客户端。 MQTT broker:如图中绿色六边形,可以理解为消息传输的中心或者消息传输的中转站。所有消息都先到MQTT broker,在到客户端。 主题:发送或者接受消息时,为了区分消息内容所设置的主题。如图中 Temperature 就是一个主题,用于传输温度数据。       4、代码 #include <WiFiS3.h> #include <UnoWiFiDevEd.h> #include "Adafruit_SHT4x.h" #include <Arduino_JSON.h> #include <ArduinoMqttClient.h> #if defined(ARDUINO_SAMD_MKRWIFI1010) || defined(ARDUINO_SAMD_NANO_33_IOT) || defined(ARDUINO_AVR_UNO_WIFI_REV2) #include <WiFiNINA.h> #elif defined(ARDUINO_SAMD_MKR1000) #include <WiFi101.h> #elif defined(ARDUINO_ARCH_ESP8266) #include <ESP8266WiFi.h> #elif defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_NICLA_VISION) || defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_GIGA) || defined(ARDUINO_OPTA) #include <WiFi.h> #elif defined(ARDUINO_PORTENTA_C33) #include <WiFiC3.h> #elif defined(ARDUINO_UNOR4_WIFI) #include <WiFiS3.h> #endif Adafruit_SHT4x sht4 = Adafruit_SHT4x(); ///////please enter your sensitive data in the Secret tab/arduino_secrets.h char ssid[] = "wifi_name"; // your network SSID (name) char pass[] = "wifi_password"; // your network password (use for WPA, or use as key for WEP) int status = WL_IDLE_STATUS; // the WiFi radio's status WiFiClient wifiClient; MqttClient mqttClient(wifiClient); const char broker[] = "broker.emqx.io"; int port = 1883; const char topic[] = "homeassistant/sensor/room111/sht40"; const long interval = 1000; unsigned long previousMillis = 0; JSONVar jsonDat; void setup() { //Initialize serial and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // check for the WiFi module: if (WiFi.status() == WL_NO_MODULE) { Serial.println("Communication with WiFi module failed!"); // don't continue while (true); } String fv = WiFi.firmwareVersion(); if (fv < WIFI_FIRMWARE_LATEST_VERSION) { Serial.println("Please upgrade the firmware"); } // attempt to connect to WiFi network: while (status != WL_CONNECTED) { Serial.print("Attempting to connect to WPA SSID: "); Serial.println(ssid); // Connect to WPA/WPA2 network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000); } // you're connected now, so print out the data: Serial.print("You're connected to the network"); printCurrentNet(); printWifiData(); Serial.println("Find WIFI"); Serial.println("Adafruit SHT4x test"); if (! sht4.begin(&Wire1)) { 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; } // set name mqttClient.setUsernamePassword("test_sht40", "test_sht40"); Serial.print("Attempting to connect to the MQTT broker: "); Serial.println(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.println(); } void loop() { // to avoid having delays in loop, we'll use the strategy from BlinkWithoutDelay // see: File -> Examples -> 02.Digital -> BlinkWithoutDelay for more info unsigned long currentMillis = millis(); mqttClient.poll(); if (currentMillis - previousMillis >= interval) { // save the last time a message was sent previousMillis = currentMillis; sensors_event_t humidity, temp; uint32_t timestamp = millis(); sht4.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" degrees C"); Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH"); printCurrentNet(); int tempeture = temp.temperature; int humi = humidity.relative_humidity; jsonDat["tempeture"] = tempeture; jsonDat["humidity"] = humi; String strData = JSON.stringify(jsonDat); // send message, the Print interface can be used to set the message contents mqttClient.beginMessage(topic); mqttClient.print(strData); mqttClient.endMessage(); } } void printWifiData() { // print your board's IP address: IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); // print your MAC address: byte mac[6]; WiFi.macAddress(mac); Serial.print("MAC address: "); printMacAddress(mac); } void printCurrentNet() { // print the SSID of the network you're attached to: Serial.print("SSID: "); Serial.println(WiFi.SSID()); // print the MAC address of the router you're attached to: byte bssid[6]; WiFi.BSSID(bssid); Serial.print("BSSID: "); printMacAddress(bssid); // print the received signal strength: long rssi = WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.println(rssi); // print the encryption type: byte encryption = WiFi.encryptionType(); Serial.print("Encryption Type:"); Serial.println(encryption, HEX); Serial.println(); } void printMacAddress(byte mac[]) { for (int i = 0; i < 6; i++) { if (i > 0) { Serial.print(":"); } if (mac[i] < 16) { Serial.print("0"); } Serial.print(mac[i], HEX); } Serial.println(); }  

  • 发表了主题帖: 【Follow me第二季第2期】--入门任务--UNO R4 ADC--OPAMP--DAC--LED Matrix--串口采集

    UNO R4任务2: 视频:[localvideo]85a3dfe1ff445d5d475bbc1117c96e98[/localvideo] 1、任务分析 本次任务主要有以下模块: (1)ADC产生正弦波。 (2)OPAMP放大。 (3)ADC采集。 (4)LED 显示。 (5)串口显示。   参考的官方文档资料: https://docs.arduino.cc/tutorials/uno-r4-wifi/led-matrix/ https://docs.arduino.cc/tutorials/uno-r4-wifi/adc-resolution/ https://docs.arduino.cc/tutorials/uno-r4-wifi/dac/ https://docs.arduino.cc/tutorials/uno-r4-wifi/opamp/   2、电路说明 外接电路图:     由于在老家,没找到合适的电阻,暂时不进行放大。 3、程序设计系思路 为了便于调试,采取从后往前实现并调试各个模块。 (1)代码模拟一个正弦波,并通过串口打印出来。Arduino IDE非常好用,不仅有串口的监视器,还有串口的画图窗口,可以将打印的数据以图形形式显示出来。 (2)真正生成正弦波,用ADC采集,替代模拟产生的正弦波,调试。 (3)LED 点阵显示波形,由于LED点阵有8行12列,以12列为时间轴,每一列显示一个时刻的正弦波形。将ADC采集到的数据映射到0--8内,并以实体形式显示波形。 4、代码 #include "Arduino_LED_Matrix.h" #include "analogWave.h" #include <OPAMP.h> // Create an instance of the analogWave class, using the DAC pin analogWave wave(DAC); // LEDMatrix 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 } }; // These constants won't change. They're used to give names to the pins used: const int analogInPin = A0; // Analog input pin that the potentiometer is attached to const int analogOutPin = 9; // Analog output pin that the LED is attached to int freq = 1; int time_idx = 0; int sensorValue = 0; // value read from the pot int outputValue = 0; // value output to the PWM (analog out) void setup() { // initialize serial communications at 9600 bps: Serial.begin(19200); //change to 14-bit resolution analogReadResolution(10); // Generate a sine wave with the initial frequency wave.sine(freq); wave.amplitude(0.5); // LED matrix.begin(); } 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; }    

  • 2024-10-05
  • 发表了主题帖: 【Follow me第二季第2期】--入门任务--UNO R4 Hello World

    本帖最后由 upc_arm 于 2024-10-7 08:49 编辑 视频链接:[localvideo]eb748ed4b0f2deb6283eb6003b5a93bb[/localvideo]   UNO R4的Hello World程序步骤: 1、UNO R4 简单介绍 UNO R4是在R3基础上进行升级,主要升级点: (1)R4分为minima版本和wifi版本,本次实验用的wifi版本。 (2)主芯片进行了升级,时钟速度、SARM、FLASH都进行了升级,芯片采用瑞萨电子的 RA4M1 微控制器,配备了 32 kB 的SRAM,256K Flash,48 MHz 的时钟速度。WiFi版还有一个ESP32-S3模块。开发板的接口升级为 USB-C接口。 开发板自带 12x8的LED点阵,可以显示丰富的内容。 (3)R4原理图地址:https://edm.eeworld.com.cn/Arduino_UNO_R4_WiFi-schematics.pdf 2、环境设置 (1)下载 安装arduino程序  https://www.arduino.cc/en/software。强烈建议使用Windows系统,其他系统的细节没有Windows系统方便。 (2)程序安装后,通过数据线连接电脑和R4,确认端口号。   (3)打开Arduino IDE,选择开发板型号,设置串口号。 3、程序 程序比较简单,这里设置的LED灯亮3S,亮的同时通过串口发送字符串"LED ON",灭1S,亮的同时通过串口发送字符串"LED OFF"。 // the setup function runs once when you press reset or power the board void setup() { // Set LED pinMode(LED_BUILTIN, OUTPUT); // Set Serial Serial.begin(9600); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) Serial.println("LED ON\r\n"); delay(3000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW Serial.print("LED OFF\r\n"); delay(1000); // wait for a second } 4、演示结果 开发板上灯按照程序设置,亮3S,灭1S。 Arduino IDE中,打开串口监视器,可以收到消息:  

  • 2024-04-23
  • 回复了主题帖: 【AI挑战营第一站】模型训练:在PC上完成手写数字模型训练,免费申请RV1106开发板

    1、模型训练的本质是就是拟合模型中的参数,找到模型的较优解。训练最终结果就是模型参数。 2、PyTorch是支持自动微分的,支持并行计算的库。目前主要支持Windows、Linux、MacOS操作系统,支持Nvidia和AMD。 3、Mnist训练过程比较简单,主要用的LeNet非常简单,主要就是卷积,非常容易转成onnx。 4、如果算力支持,计划部署YOLO算法。

最近访客

< 1/3 >

统计信息

已有538人来访过

  • 芯积分:386
  • 好友:7
  • 主题:65
  • 回复:320

留言

你需要登录后才可以留言 登录 | 注册


shilaike 2012-3-26
upc_arm: 开发板啊
哦。好的,请联系1005450581详谈。
shilaike 2012-3-19
您 好。你需要LM3S8962的开发板吗? 还是核心板?
查看全部