概要
- ESP32は独自の通信「ESP-NOW」が使えます。すごい簡単に使えます。
- M5Stack系や、esp32-camとかでも使えます。
- すごい簡単に使えるやつのさらに一番簡単なメモを記載します。
ESP-NOWが使えるM5Stack AtomS3 Lite
(1) 通知だけの場合(受信したデータ取得無し・ブロードキャスト)
- 伝える情報は無しで、送信側から送信されたことを、受信側が検知するだけ
- 送信側がボタンを押して、受信側がボタン押されたことを受け取るみたいな単純な処理のときに使う
- 送信失敗などは検知しない
- ブロードキャスト(送信先を指定せずに誰でも受信出来るように送信)
- 多対多でも行けるけどマジ電波届く範囲のESP-NOW受信待ちESP32全部に送られちゃうから注意してね
送信側
#include "WiFi.h"
#include <esp_now.h>
#define PIN_BTN GPIO_NUM_41
uint8_t macAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
int send_data = 1;
void setup() {
pinMode(PIN_BTN, INPUT);
WiFi.mode(WIFI_STA);
if (esp_now_init() != ESP_OK) {
return;
}
esp_now_peer_info_t peerInfo;
memset(&peerInfo, 0, sizeof(peerInfo));
memcpy(peerInfo.peer_addr, macAddress, 6);
if (esp_now_add_peer(&peerInfo) != ESP_OK){
return;
}
}
void loop() {
if (digitalRead(PIN_BTN) == LOW) {
esp_now_send(macAddress, (uint8_t *) &send_data, sizeof(send_data));
delay(500);
}
}
受信側
#include <WiFi.h>
#include <esp_now.h>
#define PIN_LED 7
void setup() {
pinMode(PIN_LED, OUTPUT);
WiFi.mode(WIFI_STA);
if (esp_now_init() != ESP_OK) {
return;
}
esp_now_register_recv_cb(esp_now_recv_cb_t(OnDataRecv));
}
void loop() {
}
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *incomingData, int len) {
digitalWrite(PIN_LED, HIGH);
delay(100);
digitalWrite(PIN_LED, LOW);
delay(100);
digitalWrite(PIN_LED, HIGH);
delay(100);
digitalWrite(PIN_LED, LOW);
}
(2) 通知だけの場合(受信したデータ取得無し・受信側アドレス指定)
#include "esp_mac.h"
void setup() {
Serial.begin(9600);
delay(1000);
uint8_t mac[6];
char macChr[100] = {0};
esp_read_mac(mac, ESP_MAC_WIFI_STA);
sprintf(macChr, "{0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X}", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
Serial.println(macChr);
}
void loop() {}
送信側
- ブロードキャスト用のアドレスの代わりに上記で取得した受信側アドレスを記載
uint8_t maxAddress[] = {0x??, 0x??, 0x??, 0x??, 0x??, 0x??};
受信側