n_shinichi’s blog

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

MENU

ESPNOWでリモコン? ラジコン? M5stickCのIMUで直感操縦 その2 ヨー回転運動のみ送受信

ESPNOWの使い方がだいぶわかってきたので

M5stickの倒立振子ロボと組み合わせてみた。

 

2つのM5stickくん、 1台は操縦用TXくん(左)、

もう1台は受信用 倒立ロボRXくん(右)

ものはほとんど同じ。中身のスケッチもほぼ同じ・・・

自分でも間違う...一応表示1行目に名前を出してるけど。

まずはヨー回転の送信部を作ってみた。

 

TXくんには送信用のスケッチ

あたまに、

// ESPNOW /////////////////////////////////////////////////////////////////////
#include <esp_now.h>
#include <WiFi.h>
uint8_t slaveAddress[] = {マックアドレス }; 
uint8_t data_0,data_1,data_2,data_3,data_4;
// ESPNOW /////////////////////////////////////////////////////////////////////

 

せっとあっぷに、

// 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 /////////////////////////////////////////////////////////////////////

 

るーぷに、

// ESPNOW /////////////////////////////////////////////////////////////////////
        data_0 = -varAng*0;  //前後進はまだ。
        data_1 = (uint8_t)(yawAng*0.1);  // LSB:10deg 
        uint8_t data[5] = {data_0,data_1,0,0,0}; 
        esp_now_send(slaveAddress, data, sizeof(data));        
// ESPNOW /////////////////////////////////////////////////////////////////////

追加したのはこれだけ。

 

でもって、RXくんには受信用のスケッチ

あたまに、

// ESPNOW /////////////////////////////////////////////////////////////////////
#include <WiFi.h>
#include <esp_now.h>
int i,esp_now[5],yawAng_RX;
void onReceive(const uint8_t* mac_addr, const uint8_t* data, int data_len) {
    for (i=0; i<=4; i++) esp_now[i] = (int8_t)data[i];
}
// ESPNOW /////////////////////////////////////////////////////////////////////

 

せっとあっぷに、

// ESPNOW /////////////////////////////////////////////////////////////////////
    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    esp_now_init();
    esp_now_register_recv_cb(onReceive);
// ESPNOW /////////////////////////////////////////////////////////////////////

 

るーぷに、

// ESPNOW /////////////////////////////////////////////////////////////////////
    Kspin = esp_now[1]*10.0;
// ESPNOW /////////////////////////////////////////////////////////////////////  

 

こんだけ。

 

動かしたときの様子はこんな感じ

まだヨー角信号だけ、回転動作のみ送信。

ESPNOW使ってみて・・・

スケッチの設定はBlynkよりちょいと多い。

Blynkよりはるかに高速。

消費電力はどうなんだろう。

 

こんな感じです  ちょびっと シンクロダンス? です。

 

ちょっとシンクロして動いてるっぽい。

これなら小さな子にも特に説明なく、

ちょいと動かしてるとこ見せるだけでそこそこ遊べるかも。。。

 

次は前後進を実装してみる。。。