3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32を使用してカメラ映像をLoRa通信で飛ばしてみた パート2

Last updated at Posted at 2024-08-26

パート1ではカメラの映像をSDカードに保存するところまでをやりました。
https://qiita.com/Kurogara/items/13bf38b81738731329fe

今回は、LPWA(LoRa)通信を使用してモジュール間でデータの受け渡しをやってみたいと思います。
image.png

ハードウェア

・ESP32-S3 デバイスキット×2台
・E220-900T22S LoRaモジュール×2台

ソフトウェア

今回はどちらも定期的にデータを送信、受信するシステムを設定しました。
アドレス1側


// LoRa設定==============================================================
#define M0 46  //E220のM0
#define M1 3   //E220のM1

#define UARTRXD 48
#define UARTTXD 45

int Ch_No = 0;  //送信するチャンネル
//=======================================================================

//===================================================================

void setup() {
  Serial.begin(115200);
  delay(100);

  // LoRa用初期設定-------------------------------------------------------
  Serial.println("LoRa setup start");
  Serial2.begin(9600, SERIAL_8N1, UARTRXD, UARTTXD);  // E220通信用
  //E220を設定モードに切り替え
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);

  digitalWrite(M0, HIGH);
  digitalWrite(M1, HIGH);
  delay(100);

  //設定値を書き込み アドレス設定
  Serial2.write(0xC0);   //書き込みコマンド
  Serial2.write(0x00);   //スタートアドレス
  Serial2.write(0x08);   //書き込むサイズ
  Serial2.write(0x00);   //00H アドレス上位バイト
  Serial2.write(0x01);   //01H アドレス下位バイト
  Serial2.write(0x70);   //02H ボーレート9600、ADR1758、SF9、BW125
  Serial2.write(0xC0);   //03H パケット長32byte、RSSI無効、送信出力13dBm
  Serial2.write(Ch_No);  //04H チャンネル番号
                         //  Serial2.write(0xC3);   //05H RSSIバイト有効、送信方式固定、WOR2000ms
  Serial2.write(0x43);   //05H RSSIバイト無効、送信方式固定、WOR2000ms
  Serial2.write(0x01);   //06H パスワード上位
  Serial2.write(0x36);   //07H パスワード下位

  delay(100);

  bool flag = false;
  while (Serial2.available() > 0) {
    //新しいデータを配列の始めに入れる
    int incomingChar = Serial2.read();
    Serial.print("r_Data = ");
    Serial.println(incomingChar, HEX);
    if (incomingChar == 0x36) {  //正常に最後の0x36が書き込まれた
      flag = true;
      Serial.println("E220 Set ok");
    }
  }

  //正常にE220に書き込まれない場合はリスタート
  if (flag == false) {
    ESP.restart();
  }

  //E220を運用モードに切り替え
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
  delay(100);

  //Setup終了
  Serial.println("LoRa setup end");
  
  delay(1000);
}

void loop() {
  delay(3000);

  //ヘッダ情報の送信
  Serial2.write(0x00);   //ターゲットアドレス上位
  Serial2.write(0x02);   //ターゲットアドレス下位
  Serial2.write(Ch_No);  //チャンネル番号
  Serial2.write(0xff);

  delay(2000);

  while (Serial2.available() > 0) {
    //新しいデータを配列の始めに入れる
    int incomingChar = Serial2.read();
    Serial.print("r_Data = ");
    Serial.println(incomingChar);
  }
}

アドレス2側


// LoRa設定==============================================================
#define M0 4  //E220受信用のM0
#define M1 5  //E220受信用のM1

#define UARTRXD 7  //受信E220用
#define UARTTXD 6

int Ch_No = 0;  //送信するチャンネル
//=======================================================================

//===================================================================

void setup() {
  Serial.begin(115200);
  delay(100);

  // LoRa用初期設定-------------------------------------------------------
  Serial.println("LoRa setup start");
  Serial2.begin(9600, SERIAL_8N1, UARTRXD, UARTTXD);  // E220通信用
  //E220を設定モードに切り替え
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);

  digitalWrite(M0, HIGH);
  digitalWrite(M1, HIGH);
  delay(100);

  //設定値を書き込み アドレス設定
  Serial2.write(0xC0);   //書き込みコマンド
  Serial2.write(0x00);   //スタートアドレス
  Serial2.write(0x08);   //書き込むサイズ
  Serial2.write(0x00);   //00H アドレス上位バイト
  Serial2.write(0x02);   //01H アドレス下位バイト
  Serial2.write(0x70);   //02H ボーレート9600、ADR1758、SF9、BW125
  Serial2.write(0xC0);   //03H パケット長32byte、RSSI無効、送信出力13dBm
  Serial2.write(Ch_No);  //04H チャンネル番号
                         //  Serial2.write(0xC3);  //05H RSSIバイト有効、送信方式固定、WOR2000ms
  Serial2.write(0x43);   //05H RSSIバイト無効、送信方式固定、WOR2000ms
  Serial2.write(0x01);   //06H パスワード上位
  Serial2.write(0x36);   //07H パスワード下位

  delay(100);

  bool flag = false;
  while (Serial2.available() > 0) {
    //新しいデータを配列の始めに入れる
    int incomingChar = Serial2.read();
    Serial.print("r_Data = ");
    Serial.println(incomingChar, HEX);
    if (incomingChar == 0x36) {  //正常に最後の0x36が書き込まれた
      flag = true;
      Serial.println("E220 Set ok");
    }
  }

  //正常にE220に書き込まれない場合はリスタート
  if (flag == false) {
    ESP.restart();
  }

  //E220を運用モードに切り替え
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
  delay(100);

  //Setup終了
  Serial.println("LoRa setup end");

  delay(1000);
}

void loop() {
  delay(3000);

  //ヘッダ情報の送信
  Serial2.write(0x00);   //ターゲットアドレス上位
  Serial2.write(0x01);   //ターゲットアドレス下位
  Serial2.write(Ch_No);  //チャンネル番号
  Serial2.write(0xff);

  delay(2000);

  while (Serial2.available() > 0) {
    //新しいデータを配列の始めに入れる
    int incomingChar = Serial2.read();
    Serial.print("r_Data = ");
    Serial.println(incomingChar);
  }
}

これで双方にデータのやり取りができればOKです。

それでは
パート1でカメラ画像の取得
パート2でLoRa通信の確立ができましたので、
パート3では、カメラ画像をLoRa通信で送信してみたいと思います。

最近は無線関係のシステムを多く構築しています。
なにか無線やカメラ関係でお困りの方はお気軽にご相談ください~(^^)

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?