買ったもの
いつも同じものがあるとは限らない...
内容
- 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
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() {}