n_shinichi’s blog

日々の備忘録、 趣味のあれこれなど紹介

MENU

ESPNOWでリモコン M5stickCのIMUで直感操縦 準備。

M5stickくんをスマホのIMU情報Blynkで送って直感操縦リモコンは

 ちょいと無理かもって感じになった。

 ちゃんとBlynk調べればやりようはあるかもしれんけど

 けっこーいじったけどBlynkで勝手に飛んでく割込み先の処理...は、

 よくわからんかった。

 スマホで直感操縦リモコンはウケると思ったんだけど・・・断念。

 

なもんで・・・

 M5のIMUを使って直感操縦リモコンを検討することにした。

 

で、無線通信を何でやるか・・・

 いろいろあるけど、以前から気になってたのがESPNOW。

 (ESP32の開発会社であるEspressifが開発した通信方式で、

  内容的にはIEEE 802.11のCCM Protocolを使って通信)

 MACアドレス直に送りつける感じでペアリングもいらない。

 ハンドシェイクみたいなのもやらんので

 BLEよりも消費電流が少ないかも? らしい。

 

ネットには情報いっぱいあるけど

 通信に必要な最低限のとこだけって感じのがあんまり

 見当たらなかった。

 丁寧にエラー処理等々入ってるのがほとんど。

 

なので、自分なりに必要最低限で確認したりしたことの

覚えを残しとこう。。。

 

M5stickくんのプログラムにESPNOWの送信をつけて

 ボディの傾きと回転データを送ってみるのを試してみた。

 

元のM5stickくんの倒立制御に追加したものはこんだけ。

 

頭のとこ。

// ESPNOW /////////////////////////////////////////////////////////////////////
#include <esp_now.h>
#include <WiFi.h>
uint8_t slaveAddress[] = { 0x08, 0x3A, 0xF2, 0x44, 0xA9, 0x50 }; 
// ESPNOW /////////////////////////////////////////////////////////////////////

 

setupのとこ。

// ESPNOW /////////////////////////////////////////////////////////////////////
    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    if (esp_now_init() == ESP_OK) {
        M5.Lcd.println("ESPNow ok");
    }
    esp_now_peer_info_t peerInfo;
    memcpy(peerInfo.peer_addr, slaveAddress, 6);
    peerInfo.channel = 0;
    peerInfo.encrypt = false;

    if (esp_now_add_peer(&peerInfo) != ESP_OK) {
        M5.Lcd.println("Fail Espnow! ");
        return;
    }
// ESPNOW /////////////////////////////////////////////////////////////////////

 

loopのとこ。

// ESPNOW /////////////////////////////////////////////////////////////////////
        uint8_t data[5] = { varAng,yawAng ,0,0,0}; // 送信データ
        esp_err_t result = esp_now_send(slaveAddress, data, sizeof(data));        
// ESPNOW /////////////////////////////////////////////////////////////////////

 

受信側はCore2を使って試した  

 理由は特になくて画面大きいので見やすいってだけ。

 スケッチはこんだけ。

// ESPNOW /////////////////////////////////////////////////////////////////////

#include <M5Core2.h>
#include <WiFi.h>
#include <esp_now.h>

int i,count,esp_now[5];

void onReceive(const uint8_t* mac_addr, const uint8_t* data, int data_len) {
    count++;
    M5.Lcd.setCursor(0, 70);
    M5.Lcd.printf("count %d\n",count);
    for (i=0; i<=4; i++) {esp_now[i] = (int8_t)data[i];
        M5.Lcd.printf("data %1d: %3d \n",i,esp_now[i]);
    }
}


void setup() {
M5.begin(); 
  m5.Lcd.setTextColor(WHITE, BLACK);
  M5.Lcd.setTextSize(2);
  M5.Lcd.println("ESP_NOW_test");
  M5.Lcd.println( WiFi.macAddress());


    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    if (esp_now_init() == ESP_OK) {
        M5.Lcd.println("ESP-Now OK");
    }
    M5.Lcd.setTextSize(3);
    esp_now_register_recv_cb(onReceive);
}

void loop() {
}

// ESPNOW /////////////////////////////////////////////////////////////////////

Blynkと比べたら書くことちょいと多いくらい。。。

 

一応、い感じで送れてる。

www.youtube.com