小さなLCDを組み込んだ無線機
小さなLCD表示器、白色 OLEDディスプレイ 128 x 64 0.96インチ SSD1306 LCDモジュール 実際に使ってみましたそれはとても小さかった表示部の高さが arduino nano の幅より小さいのに16文字・8行も表示されるのです表示器として常時眺めるには文字が小さすぎます、測定器の表示確認部として利用します無線で送られてくる家庭内6か所の温度・湿度を連続記録する実験中ですこの小さいLCD表示器とarduino nano そしてNRF24L01を組み合わせた受信機を作ってみました、ケースは厚紙で箱を作ります、くるりと巻いて両面テープで張り付ければ完成ですケースにした紙が少し薄かったようで強度不足です黒い厚紙を貼り付けてケースの強度OKかっこよくなりましたが、受信できない局があります、囲いすぎて電波が届かなくなったみたいです、その日のうちに外部アンテナ付きのものに交換しますバラック状態でテスト完了、両面テープとホットボンドで固めます今回は少し厚手の紙でくるんで完成です寸法はW50㎜・D22㎜・H35㎜に収まりました10分間隔で送られてくるデーターを表示しパソコンのteratermに記録されます、今一つ問題はaruduinoのクロック精度10分タイマーがそれぞれに微妙に変化するのです、以前は1分間隔で送信していたのですが局数が増えるとデーターの衝突で記録されないことが多発しました、そこでポーリングで子局を呼び出してデーター収集を考えたのですがあまりに複雑で私には無理だと諦めました。うまく動いているプログラムここに保管しておきます。//3Data受信TeraTermlogからCSV取り込み#include <SPI.h>#include <RF24.h>#include <Wire.h>#include <Arduino.h>#include <U8x8lib.h>U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);RF24 myRadio (9, 10);byte addresses[][6] = {"1Node"};struct Pack {float data0; float data1; float data2; float data3; } packet;void setup() {u8x8.begin();u8x8.setFlipMode(1);Serial.begin(115200);Serial.println(",ch,d1,d2,d3 ");myRadio.begin();myRadio.setChannel(117);//118myRadio.setDataRate(RF24_250KBPS);myRadio.openReadingPipe(1, addresses[0]);myRadio.startListening(); }void loop() {u8x8.setFont(u8x8_font_chroma48medium8_r);u8x8.setCursor(0, 7);u8x8.print("* Packet_Start *");if ( myRadio.available()) {myRadio.read( &packet, sizeof(packet) );Serial.print(",");Serial.print(packet.data0/99,0);//1~6CHSerial.print("Ch,");Serial.print(packet.data2,1);//温度DHT11/bme280Serial.print(",");Serial.print(packet.data3,1);//湿度DHT11/bme280 Serial.print(",");Serial.print(packet.data1,1);//気圧BMP280/bme280Serial.println(" ");u8x8.setCursor(0, 1);u8x8.print(packet.data0,0);//1~6CHu8x8.print("CH");u8x8.setCursor(0, 3);u8x8.print(packet.data2,1);//温度DHT11/bme280u8x8.print("'C ");u8x8.setCursor(7, 3); u8x8.print(packet.data3,1);//湿度DHT11/bme280u8x8.print("%"); u8x8.setCursor(0, 5);u8x8.print(packet.data1,1);//気圧bmp280/bme280u8x8.print("hpa "); } }