ESP32など

電子工作してます

一番簡単なPacketSerialのサンプル

Arduino用のシリアル通信ライブラリPacketSerialについて、送信専門と受信専門に分けて最低限の処理だけにするとこんな感じ。

コピペでサクッと試したい時用にメモる。

送信側(Timer Camera)
#include <PacketSerial.h>
PacketSerial myPacketSerial;

// テスト用送信データ
uint8_t myPacket[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

void setup() {
  // USBシリアル通信(PCでの送信内容確認用)
  Serial.begin(115200);

  // GROVEのシリアル通信
  Serial1.begin(115200, SERIAL_8N1, 13, 4); // Timer Camera

  // PacketSerial初期化(Serial1指定)
  myPacketSerial.setStream(&Serial1);
}

void loop() {
  // 送信
  myPacketSerial.send(myPacket, sizeof(myPacket));

  // 確認用
  for (int i = 0; i < sizeof(myPacket); i++) {
    Serial.println(myPacket[i]);
  }
}

受信側(M5Stack)
#define MAX_SIZE = 512 // 最大受信可能サイズ
#include <PacketSerial.h>
PacketSerial_<COBS, 0, MAX_SIZE> myPacketSerial;

void setup() {
  // USBシリアル通信(PCでの受信内容確認用)
  Serial.begin(115200);

  // GROVEのシリアル通信
  Serial1.begin(115200, SERIAL_8N1, 21, 22); // PORT-A(Red)(GPIO21, GPIO22)

  // PacketSerial初期化(Serial1指定)
  myPacketSerial.setStream(&Serial1);
  myPacketSerial.setPacketHandler(&onPacketReceived);
}

void loop() {
  // 受信チェック
  myPacketSerial.update();

  // 受信サイズがオーバーした際に実行する処理
  if (myPacketSerial.overflow()) {
    Serial.println("Over flow !!");
  }
}

// 受信した際に実行される処理
void onPacketReceived(const uint8_t* buffer, size_t size)
{
  // 確認用
  for (int i = 0; i < size; i++) {
    Serial.println(buffer[i]);
  }
}