【M5Stack】 ラズパイとM5Stackをシリアル通信(UART)で接続する

M5Stack

今回は、ラズパイとM5Stackをシリアルで通信する方法を紹介します。

広告

この記事で解決できること

この記事を読むことで、以下ができるようになります。

・M5Stackで、シリアル通信を送受信する方法

・M5Stackで、GPIOのUARTを使う方法

・Raspberry Piで、シリアル通信を送受信する方法

・Raspberry Piで、GPIOのUARTを使う方法

広告

今回、作るアプリ

・M5Stackのボタンを押すと、RaspberryPiのコンソールに、Helloが表示される

・Raspberry Piのコンソール上で、文字を入力すると、M5Stack画面に一文字ずつ表示される

広告

準備

・M5Stack (私は、M5GOを使いました)

・PCに、ArduinoIDEがインストール済み

・Raspberry Pi (私は、Raspberry Pi4を使いました)

M5Stackは様々な種類があります。以下の記事で説明していますので、持っていない人は見てください。

Raspbrry Piは、以下がおすすめです。単体で買うよりも、スタータキットのように必要なものが全てセットになっているのが悩まずに済むので、楽です。

広告

構成

広告

ラズパイとM5Stackをケーブルでつなぐ

M5Stack側

M5GOの場合

M5GOでは、ポートCを使用します。ポートCは、UARTとして使用できます。

ラズパイ側

シリアル通信は、GPIO14(TXD)、GPIO15(RXD)を使用します。

TXDが送信側で、RXDが受信側です。

ラズパイのGPIOピン配置
GPIO - Raspberry Pi Documentation
We've provided some basic examples to help you discover possible uses for your Raspberry Pi and to get started with software available in Raspberry Pi OS.

M5Stackとラズパイのつなぎ方

M5Stackとラズパイは、以下の通りにつなぎます。

ラズパイのGPIO        :  M5StackのポートC

Pin10:GPIO15(RXD) ――――――― TXD

Pin8:GPIO14(TXD) ―――――――― RXD

Pin6:Ground ―――――――――――― GND

広告

M5Stack側の設定

ArduinoIDEを立ち上げて、以下のサンプルコードをコピーしてください。

サンプルコード

#include <M5Stack.h>

void setup() {

  M5.begin();
  M5.Power.begin();
  Serial.begin(115200);

  // 画面初期設定
  M5.Lcd.setCursor(10, 10);
  M5.Lcd.setTextSize(2);
  M5.Lcd.println("START");
  
  // シリアル通信機能の設定
  // Serial2.begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin, bool invert)
  Serial2.begin(115200, SERIAL_8N1, 16, 17);

}

void loop() {
  M5.update();   // update button state
  
  // シリアル通信を受信したときの処理
  if(Serial2.available()) {
    M5.Lcd.print("Recived : ");
    // 受信データを取得
    char ch = Serial2.read();
    // 受信データをラズパイ側へそのまま送信
    Serial2.write(ch);
    M5.Lcd.println(ch);
  }else{
    M5.Lcd.setCursor(0, 60);
  }

  // ボタンAが押された時の処理
  if (M5.BtnA.wasPressed()) {
    M5.Lcd.setCursor(0, 10);
    M5.Lcd.print("Transmitted : hello");
    // "Hello"をラズパイへ送信する
    Serial2.write("hello");
  }else{
  }
}

コンパイル後、M5Stackへのダウンロードすると、

M5Stack画面に”START”と表示がでます。

広告

ラズパイ側の設定

ラズパイのコンソールを開いて、以下のコマンドを入力します。

> sudo nano app.py

app.pyの編集画面が出てきます。以下のサンプルコードをコピーして貼り付けます。

サンプルコード

import serial
import time
import concurrent.futures

ser = serial.Serial('/dev/serial0', 115200, timeout = 1.0)

def func1():
    while True:
        line = ser.readline()
        if(line.decode('utf-8') != ""):
            # バイト型末端の改行文字を除外して、文字列変数に変換
            print(line.strip().decode('utf-8'))

def func2():
    while True:
        flag=bytes(input(),'utf-8')

        #シリアル通信で文字を送信する際は, byte文字列に変換する
        #input()する際の文字列はutf-8

        ser.write(flag)

        #シリアル通信:送信

        if(flag==bytes('z','utf-8')):
            break;

        time.sleep(1)

    ser.close()

if __name__ == "__main__":
    executor = concurrent.futures.ThreadPoolExecutor(max_workers=2)
    executor.submit(func1)
    executor.submit(func2)

「CTRL」+「o」で、ファイルへの保存

「CTRL」+「x」で、ファイル編集の終了

広告

動かし方

M5Stack

「スケッチ」-「マイコンボードへ書き込む」で、コンパイルしてM5Stackへダウンロードします。

画面に、STARTが表示されれば、OKです。

ボタンAを押すと、ラズパイへ”Hello”が送信されます。

ラズパイのコンソールに、任意の英数字を入力してEnterを押すと、M5Stack画面に、一文字ずつ表示されます。

Raspberry Pi

コンソールに、以下のコマンドを入力します。

> python3 app.py

コンソールで、任意の英数字を入力すると、M5Stackへ送信されます。

M5Stackのボタンを押すと、コンソール上に”hello”が表示されます。

広告

まとめ

ラズパイとM5Stackをシリアル通信でつないで、それぞれからデータを送受信する方法を紹介しました。

広告

参考

コメント

タイトルとURLをコピーしました