chakokuのブログ(rev4)

テック・コミック・ごくまれにチャリ

ESP8266/NodeMCU+BME280;温湿度を液晶に表示させてみる

NodeMCUのサンプルをそのまま実行すると以下となる(I2CのPINだけ変更)。
http://nodemcu.readthedocs.io/en/dev/en/modules/bme280/#example


QFE=1006.364
QNH=1012.351
T=23.41
dew_point=9.31
altitude=50.09
これだと液晶画面からあふれるので、、以下となるようにソースを修正

print(string.format("T:%d.%02d/%d.%02d%%",T/100,T%100,H/1000,(H%1000)/10))
print(string.format("QFE:%d.%01d/QNH:%d.%01d", P/1000, (P%1000)/100,QNH/1000, (QNH%1000)/100))


T:23.41/40.696%
QFE:1006.3/QNH:1012.3

横が16文字なので、、以下で実装


lcd.cls()
lcd.puts(0,string.format("T:%d.%02d/%d.%02d%%",T/100,T%100,H/1000,(H%1000)/10))
lcd.puts(40,string.format("%d.%01d/%d.%01d", P/1000, (P%1000)/100,QNH/1000, (QNH%1000)/100))
表示させた結果




文字だけなので芸も華もないですが、CGRAM領域にビットマップデータを流し込むと、℃とか、お天気マークとかも出せるのかも。。面倒なのでそこまで調べる気はないですが。。

現状でinit.luaの設定

--
-- init.lua
--
require("lcd")
lcd.setup()
lcd.cls()
lcd.puts(0,"Hello")

alt=50 -- altitude of the measurement place
PIN_SDA = 6  -- I2C Data  Signal GPIO:12(ID:6)
PIN_SCK = 5  -- I2C Clock Signal GPIO:14(ID:5)


bme280.init(PIN_SDA, PIN_SCK)
tmr.delay(300000) 

P, T = bme280.baro()
QNH = bme280.qfe2qnh(P, alt)
H, T = bme280.humi()
D = bme280.dewpoint(H, T)
P = bme280.baro()
curAlt = bme280.altitude(P, QNH)

lcd.cls()
lcd.puts(0,string.format("T:%d.%02d/%d.%02d%%",T/100,T%100,H/1000,(H%1000)/10))
lcd.puts(40,string.format("%d.%01d/%d.%01d", P/1000, (P%1000)/100,QNH/1000, (QNH%1000)/100))

ESP8266のFlashに書き込むのがちょっと面倒ですが、さらに使いやすいIDEがあったのでこれを使ってみる。
ESPlorerというIDEツール。Flashへの書き込み以外に、FlashのフォーマットやNodeMCUの再起動等も可能


http://esp8266.ru/esplorer/