みかづきブログ・カスタム

基本的にはちょちょいのほいです。

M5StickC Plusのボタンを押したことをUDP通信を使ってNode.jsで立てたサーバに伝える ⚡️


https://www.switch-science.com/products/9350 より引用

M5StickC PlusをWiFiに繋いで、ButtonA(M5と書いてあるボタン)を押した際に、同一WiFi上にあるサーバに対して押されたことを通知するコードを書いてみました。
ボタンを押したときに1、離したときに0を送るだけのシンプルな通信なので、WiFiUDPを使ってみました。

M5StickC側のコード

#include <M5StickCPlus.h>
#include <WiFi.h>
#include <WiFiUDP.h>

const char* ssid = ""; // WiFiのSSID 
const char* password = ""; // WiFiのパスワード

WiFiUDP wifiUdp;
const char *ip = ""; // サーバのIP

const int port = 3000;

void setup() {
  M5.begin();

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) { 
    delay(500);
  }

  wifiUdp.begin(port + 1);
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    M5.Lcd.setCursor(0, 0);
    M5.Lcd.print("connected");
  }

  if (M5.BtnA.wasPressed()) {
    wifiUdp.beginPacket(ip, port);
    wifiUdp.write('1');
    wifiUdp.endPacket();
  }

  if (M5.BtnA.wasReleased()) {
    wifiUdp.beginPacket(ip, port);
    wifiUdp.write('0');
    wifiUdp.endPacket();
  }

  M5.update();
  delay(100);
}

サーバ側のコード


Node.jsでサーバを立てました。

const dgram = require('node:dgram');
const server = dgram.createSocket('udp4');

server.on('message', (msg, rinfo) => {
  console.log(`${ msg } from ${ rinfo.address }:${ rinfo.port }`);
});

server.bind(3000);




これだけで、M5StickC PlusのButtonAの押し・離しをサーバに伝えることができます。
M5StickC Plusは充電式なので、リモコンのように使うことができますね。