查看: 1804|回复: 1

M5Stack(Arduino)与PC端的UDP通讯

[复制链接]

该用户从未签到

发表于 2020-9-17 09:38 | 显示全部楼层 |阅读模式
本例中编写一个M5Stack程序用于与PC端进行UDP通讯,这样让PC(Python)执行诸如深度学习之类的繁重操作,可以将操作结果发送到M5Stack。能够做这样的事情似乎很有趣,所以我在Python的发送端编写了源代码。在本文中,我将介绍接收方(Arduino)和发送方(Python)的源代码。在此过程中需要使用家用路由器或智能手机作为接入点建立网络,并与UDP通信。M5Stack应用程序源代码-UDP数据接收
  1. #include <M5Stack.h>
  2. #include <WiFi.h>
  3. #include <WiFiUdp.h>

  4. #define N 1024

  5. const char* ssid     = "yourssid";
  6. const char* password = "yourpassword";
  7. const int port = ****;

  8. // The udp library class
  9. WiFiUDP udp;

  10. void print_wifi_state(){
  11.         M5.Lcd.clear(BLACK);  // clear LCD
  12.           M5.Lcd.setTextColor(YELLOW);
  13.           M5.Lcd.setCursor(3, 3);
  14.         M5.Lcd.println("");
  15.         M5.Lcd.println("WiFi connected.");
  16.         M5.Lcd.print("IP address: ");
  17.         M5.Lcd.println(WiFi.localIP());
  18.         M5.Lcd.print("Port: ");
  19.         M5.Lcd.println(port);
  20. }

  21. void setup_wifi(){
  22.         M5.Lcd.setTextColor(RED);
  23.     M5.Lcd.setTextSize(2);
  24.     M5.Lcd.setCursor(3, 10);
  25.     M5.Lcd.print("Connecting to ");
  26.     M5.Lcd.println(ssid);

  27.         // setup wifi
  28.     WiFi.mode(WIFI_STA);  // WIFI_AP, WIFI_STA, WIFI_AP_STA or WIFI_OFF
  29.     WiFi.begin(ssid, password);
  30.         // WiFi.begin();

  31.         // Connecting ..
  32.     while (WiFi.status() != WL_CONNECTED) {
  33.         delay(100);
  34.         M5.Lcd.print(".");
  35.     }

  36.         // print state
  37.     print_wifi_state();

  38.     udp.begin(port);
  39. }

  40. void setup() {
  41.         M5.begin();

  42.         // setup wifi
  43.         setup_wifi();
  44. }

  45. void loop() {
  46.         char packetBuffer[N];
  47.         int packetSize = udp.parsePacket();

  48.         // get packet
  49.         if (packetSize){
  50.                 int len = udp.read(packetBuffer, packetSize);
  51.                 if (len > 0){
  52.                         packetBuffer[len] = '\0'; // end
  53.                 }

  54.                 // print param
  55.                 M5.Lcd.clear(BLACK);
  56.                   M5.Lcd.setCursor(3, 3);
  57.                 M5.Lcd.setTextColor(GREEN);
  58.                 M5.Lcd.println(packetBuffer);
  59.         }
  60. }
复制代码


Python源代码-UDP数据传输

  1. from socket import socket, AF_INET, SOCK_DGRAM

  2. ADDRESS = "192.168.2.3" # M5Stack address
  3. PORT = 5555

  4. s = socket(AF_INET, SOCK_DGRAM)

  5. while True:
  6.     msg = input("> ")
  7.     s.sendto(msg.encode(), (ADDRESS, PORT))

  8. s.close()
复制代码
M5Stack和PC之间的UDP通信测试-制作聊天社应用程序(UDP版本)
  1. #include <M5Stack.h>
  2. #include <AquesTalkTTS.h>
  3. #include <Avatar.h>
  4. #include <tasks/LipSync.h>
  5. #include <WiFi.h>
  6. #include <WiFiUdp.h>

  7. #define N 30

  8. using namespace m5avatar;

  9. // AquesTalk License Key
  10. // NULL or wrong value is just ignored
  11. const char* AQUESTALK_KEY = "XXXX-XXXX-XXXX-XXXX";

  12. // for wifi setup
  13. const char* ssid     = "yourssid";
  14. const char* password = "yourpassword";
  15. const int port = ****;

  16. Avatar avatar;
  17. WiFiUDP udp;

  18. void setup_wifi(){
  19.         M5.Lcd.setTextColor(RED);
  20.     M5.Lcd.setTextSize(2);
  21.     M5.Lcd.setCursor(3, 10);
  22.     M5.Lcd.print("Connecting to ");
  23.     M5.Lcd.println(ssid);

  24.         // wifi setup
  25.     WiFi.mode(WIFI_STA);  // WIFI_AP, WIFI_STA, WIFI_AP_STA or WIFI_OFF
  26.     WiFi.begin(ssid, password);
  27.         // WiFi.begin();

  28.         // Connecting ..
  29.     while (WiFi.status() != WL_CONNECTED) {
  30.         delay(100);
  31.         M5.Lcd.print(".");
  32.     }

  33.         udp.begin(port);
  34. }

  35. void setup() {
  36.     int iret;
  37.     M5.begin();

  38.         // setup wifi
  39.         setup_wifi();

  40.     // For Kanji-to-speech mode (requires dictionary file saved on microSD)
  41.     // See http://blog-yama.a-quest.com/?eid=970195
  42.     // iret = TTS.createK(AQUESTALK_KEY);
  43.         iret = TTS.create(AQUESTALK_KEY);
  44.     M5.Lcd.setBrightness(30);
  45.     M5.Lcd.clear();
  46.     avatar.init();
  47.     avatar.addTask(lipSync, "lipSync");
  48. }

  49. void loop() {
  50.         char packetBuffer[N];
  51.         int packetSize = udp.parsePacket();

  52.         // get packet
  53.         if (packetSize){
  54.                 int len = udp.read(packetBuffer, packetSize);
  55.                 if (len > 0){
  56.                         packetBuffer[len] = '\0'; // end
  57.                 }
  58.                 TTS.play(packetBuffer, 80);
  59.                 avatar.setSpeechText(packetBuffer);
  60.                 delay(1000);
  61.                 // clear "c"
  62.                 while (len >= 0){
  63.                         len--;
  64.                         packetBuffer[len] = ' ';
  65.                 }
  66.         }
  67. }
复制代码



该用户从未签到

发表于 2020-12-15 15:03 | 显示全部楼层
WiFiUdp.h 在哪里 有得下载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

arduino程序设计基础 blinker物联网解决方案

热门推荐

【教程】pico+hx711电子秤
【教程】pico+hx711电子秤
pico+hx711电子秤 【前言】 我做过多款电子秤,这次移植到pico上
ESP8266+Onenet平台远程数据传输和控制
ESP8266+Onenet平台远程数
这是我的第一个diy,主要功能实现了onenet云平台温湿度数据的传输和远程控制LED灯平台
【Arduino】108种传感器模块系列实验(48)---三轴ADXL345模块
【Arduino】108种传感器模
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
ps2遥控小车——uno实现
ps2遥控小车——uno实现
前几天在阁楼发现了好久以前3d打印,激光切割的底盘,于是决定做这个东西 正好手上又
震惊!OLED菜单竟只用10行代码就可以完成到完美!!!
震惊!OLED菜单竟只用10行
震惊!OLED菜单竟只用10行代码就可
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表