ラズパイからのUDPメッセージをM5Stackで受信して、そのデータを画面に表示される方法を紹介します。
前提
・Raspberry Pi4
・M5Stack
ラズパイとM5Stackは、同じWi-Fiを使います。
リンク
リンク
UDPで通信する方法
ArduinoIDEを起動して、以下のサンプルコードをコピーしてください。
サンプルコード
// https://cpp-learning.com/m5stack_udp/
#include <WiFi.h>
#include <WiFiUdp.h>
#include <M5Stack.h>
#define N 1024
/////////////////////////////////////////////////
const char* ssid = "*******"; // Wi-Fiのssid
const char* password = "*******"; // Wi-Fiのパスワード
const int port = 5000;
WiFiUDP udp;
/////////////////////////////////////////////////
void setup_wifi(){
// Wi-Fi接続開始を画面表示
M5.Lcd.fillScreen(TFT_OLIVE);
M5.Lcd.setCursor(3, 10);
M5.Lcd.print("Connecting to ");
M5.Lcd.println(ssid);
// WiFi接続性改善のため、いったん切断
WiFi.disconnect( true, true ); //WiFi OFF, eraseAP=true
delay(500);
// Wi-Fiモジュールの開始
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
// 通信相手との接続待ち
while (WiFi.status() != WL_CONNECTED) {
delay(100);
M5.Lcd.print(".");
}
// Wi-Fi接続完了時の画面表示
M5.Lcd.fillScreen(TFT_OLIVE);
M5.Lcd.setCursor(3, 3);
M5.Lcd.println("");
M5.Lcd.println("WiFi connected.");
// M5StackのIPアドレスを表示
M5.Lcd.print("IP address: ");
M5.Lcd.println(WiFi.localIP());
M5.Lcd.print("Port: ");
M5.Lcd.println(port);
// UDP開始
udp.begin(port);
}
void setup() {
M5.begin();
// 起動画面設定
M5.Lcd.fillScreen(TFT_NAVY);
M5.Lcd.setTextSize(2);
M5.Lcd.printf("START");
setup_wifi();
}
void loop() {
char packetBuffer[N];
int packetSize = udp.parsePacket();
// UDPパケットの受信処理
if (packetSize){
int len = udp.read(packetBuffer, packetSize);
if (len > 0){
packetBuffer[len] = '// https://cpp-learning.com/m5stack_udp/
#include <WiFi.h>
#include <WiFiUdp.h>
#include <M5Stack.h>
#define N 1024
/////////////////////////////////////////////////
const char* ssid = "*******"; // Wi-Fiのssid
const char* password = "*******"; // Wi-Fiのパスワード
const int port = 5000;
WiFiUDP udp;
/////////////////////////////////////////////////
void setup_wifi(){
// Wi-Fi接続開始を画面表示
M5.Lcd.fillScreen(TFT_OLIVE);
M5.Lcd.setCursor(3, 10);
M5.Lcd.print("Connecting to ");
M5.Lcd.println(ssid);
// WiFi接続性改善のため、いったん切断
WiFi.disconnect( true, true ); //WiFi OFF, eraseAP=true
delay(500);
// Wi-Fiモジュールの開始
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
// 通信相手との接続待ち
while (WiFi.status() != WL_CONNECTED) {
delay(100);
M5.Lcd.print(".");
}
// Wi-Fi接続完了時の画面表示
M5.Lcd.fillScreen(TFT_OLIVE);
M5.Lcd.setCursor(3, 3);
M5.Lcd.println("");
M5.Lcd.println("WiFi connected.");
// M5StackのIPアドレスを表示
M5.Lcd.print("IP address: ");
M5.Lcd.println(WiFi.localIP());
M5.Lcd.print("Port: ");
M5.Lcd.println(port);
// UDP開始
udp.begin(port);
}
void setup() {
M5.begin();
// 起動画面設定
M5.Lcd.fillScreen(TFT_NAVY);
M5.Lcd.setTextSize(2);
M5.Lcd.printf("START");
setup_wifi();
}
void loop() {
char packetBuffer[N];
int packetSize = udp.parsePacket();
// UDPパケットの受信処理
if (packetSize){
int len = udp.read(packetBuffer, packetSize);
if (len > 0){
packetBuffer[len] = '\0'; // end
}
// UDPパケット受信時の画面表示
M5.Lcd.fillScreen(TFT_NAVY);
M5.Lcd.setCursor(3, 3);
M5.Lcd.println(packetBuffer);
}
}
'; // end
}
// UDPパケット受信時の画面表示
M5.Lcd.fillScreen(TFT_NAVY);
M5.Lcd.setCursor(3, 3);
M5.Lcd.println(packetBuffer);
}
}
上記サンプルコードを動かすと、Wi-Fiを探しに行きます。
Connecting to (ssid) .......
Wi-Fiと接続できれば、以下の文言が表示されます。
WiFi connected. IP address:(自分のM5StackのIPアドレス) Port:5000
ラズパイでUDPメッセージを送信する
次に、ラズパイのコンソールを開いて、以下のコードを動かします。
サンプルコード
from socket import socket, AF_INET, SOCK_DGRAM
ADDRESS = "***.***.***.***" # M5Stack IP address
PORT = 5000
s = socket(AF_INET, SOCK_DGRAM)
while True:
msg = input("> ")
s.sendto(msg.encode(), (ADDRESS, PORT))
s.close()
上記ソースコード内のADDRESSは、M5Stackでサンプルコードを起動させたときに画面に表示されるIPアドレスを記入してください。
> python3 app.py
正しく起動できると、ラズパイのコンソール上に、以下の文言が出てきますので、送りたいメッセージを入力してください。英数字のみです。
> python3 app.py
> ←ここに好きなメッセージを入力して、ENTERを押す
ここで入力したメッセージが、M5Stackの画面に、そのメッセージが表示されます。
まとめ
今回は、ラズパイからのUDPメッセージをM5Stackで受信して、そのデータを画面に表示される方法を紹介しました。
参考
M5Stack(Arduino)とPC(Python)でUDP通信する方法 -雛形ソースコードあり-
こんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。 前回、M5StackとスマホをUD…
コメント