3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

esp32 + LoRa をやってみた

Last updated at Posted at 2021-11-25

買ったもの

いつも同じものがあるとは限らない...

内容

  • esp32
  • LoRa
  • 915MHz
  • OLEDディスプレイ
  • CH9102X USB-serial

注意

自分は M1 Mac BigSur [11.6 (20G165)]を使ったが、そのままだとこのボードを認識しなかった。これはCH9102チップのUSBドライバがないためらしく、

ここのスレッドで説明されているように、認識させるには製造元のドライバを入れる必要があった。

TTGO lilygo オフィシャル (と思われる)

こっちで似たようなものを買ったほうが良いかも知れない

とにかく分からん

どこの商品ページにも適当な画像と適当なリポジトリリンクとがあるだけのざっくりとした説明があるが、そもそも本当に内容が商品とあっているのかも分からん。

多分届いた時には送受信できるようにサンプルプログラムがボードそれぞれにアップロードされているはず?だが、そうとは思っていなかったので、片方先に開けたほうを下のgithubのコードで書き換えてしまって、余計に混乱した
もう一方の何もしてない方は通電させるとsenderとして動いていたが、receiver側は既に書き換えてしまっていたので、壊れているのか?コードが悪いのか?全然判断付かなかった

Test Code
https://github.com/LilyGO/TTGO-LORA32-V2.0/tree/LilyGO-868-V1.0

H30e773c23d07426ca4b524ff86343fed9.jpeg
H9cf63887c869483f85382c2b37feaac31.jpeg

https://github.com/LilyGO/TTGO-LORA32-V2.0/tree/LilyGO-868-V1.0
↓リダイレクトされる
https://github.com/LilyGO/TTGO-LORA32/tree/LilyGO-868-V1.0

とりあえず

  • sender
  • receiver

それぞれのフォルダが有り

  • ソースコード
  • 謎のimages.h

がある。謎のimages.hは参照しているが使ってる様子すら無い...

ソースコードのGPIOピン番号と上の画像とで見合わせると、なんとなく番号同士はあっている様子。
が、ボードにアップロードしてもなんとも動かない...

まずOLEDを表示させられるか(壊れてないか)

  • アドレス
  • SDA
  • SCL

上の画像ではSDA=4、SCL=15につながっている様子で、githubのコードもそう。
試しに適当なサンプルコードでやってみるが、OLEDに何も表示されない。

# include <Wire.h>
# include "SSD1306.h"//ディスプレイ用ライブラリを読み込み
 
SSD1306  display(0x3c, 4, 15); //SSD1306インスタンスの作成(I2Cアドレス,SDA,SCL)
 
void setup() {
 
  display.init();    //ディスプレイを初期化
  display.setFont(ArialMT_Plain_16);    //フォントを設定
  display.drawString(0, 0, "Hello World");    //(0,0)の位置にHello Worldを表示
  display.display();   //指定された情報を描画
}
 
void loop() {}

色々見ていくうちに0.96インチ単色OLED(128×64,SSD1306,I2C)が載っているESP32マイコンボードで表示を試してみたという似たような事をしているサイトが有り

OLEDのリセット信号がESP32マイコンのGPIOに結線されている。
なので、自前でリセットの処理をしなくてはならない。

とあったのでやってみるとすんなり表示できた。
(画像ではリセットはGPIO16につながっている様子...)

# include <Wire.h>
# include "SSD1306.h"//ディスプレイ用ライブラリを読み込み
 
SSD1306  display(0x3c, 4, 15); //SSD1306インスタンスの作成(I2Cアドレス,SDA,SCL)
 
void setup() {
  pinMode(16, OUTPUT);
  digitalWrite(16, LOW);
  delay(100);
  digitalWrite(16, HIGH);
  delay(100);
 
  display.init();    //ディスプレイを初期化
  display.setFont(ArialMT_Plain_16);    //フォントを設定
  display.drawString(0, 0, "Hello World");    //(0,0)の位置にHello Worldを表示
  display.display();   //指定された情報を描画
}
 
void loop() {}

とりあえずOLEDは生きている。

後からサンプルコードをよく見ると、同じことはしてた

肝心なLoRaが動かない

ディスプレイは生きてるし、シリアルモニターでloop内も動いてる様子だけど、ここのpacketSizeが入ってこない。
周波数違いだろうとは検討をつけているが、本当にsender側は915MHzで動いてるのかすらわからない。

一旦指定されていたリポジトリ(LilyGO-868-V1.0)は無視して、LilyGO-V1.0-915タグを見てみると、周波数ぐらいしか違わない。ので、変えてみる。
が、#define BAND 915E6でも状況は同じ。

相当悩んでネットで色々見てみるけど、同じボード買った人の記事がないし、壊れてるのかなーとか思いながらソースコードをよくよく見ると

  if (!LoRa.begin(868E6)) { // !!!!

ベタ書き!

なので、

-  if (!LoRa.begin(868E6)) {
+  if (!LoRa.begin(BAND)) {

こう変えてアップロードしてみたら...すんなり受信しだした。

915MHz送信側のコードも同じようにベタ書き

868MHzのサンプルコード送信側はなぜか433MHz...

因みにimages.h

こう言う感じにすると"HELTEC"のロゴが出る。

# include "SSD1306.h"
# include "images.h"
# include <Wire.h>

SSD1306 display(0x3c, 4, 15);

void setup() {
  pinMode(16, OUTPUT);
  digitalWrite(16, LOW);
  delay(50);
  digitalWrite(16, HIGH);

  display.init();

  display.clear();
  display.drawXbm(0, 0, logo_width, logo_height, logo_bits);
  display.display();
}

void loop() {}
3
2
1

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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?