ついに完成。
前回までのあらすじ
MFT2018で購入したM5Stack FIREを使って、京急線の運行情報監視ガジェットを作ってきました。定期的にHPを監視したり、運行情報に応じてSDカード上の画像を表示したりしてきました。今回は最終回として、LEDを光らせてみようと思います。
LEDを光らせる
LEDを光らせるには、Neopixel
モジュールをインポートすればいいのですが、
- LEDは10個だが、LEDの番号は0始まりではなく1始まり
- LEDを光らせるにはひとつずつ
set()
していく
というのがポイントです。
これを使って、
- 遅延時:黄色点滅
- 大幅な遅延時:橙色点滅
- 運転見合わせ時:赤色点滅
させてみようと思います。また、(主にJRからの)振替輸送受託のために京急が遅延した際は、以前のガジェット同様にパリピ点滅させます。
で、作ってみました
DEMOモードで光らせるとこんな感じ。
M5Stack FIREのLEDを活かしながら、マグネットでどこでも貼り付けられるので、オフィスや冷蔵庫に貼っておくのもいいですねぇ。
何故か常に遅延判定してしまっていてバグかなと思ってたんだが、本当に遅延してた。 #keikyu #m5stack https://t.co/xH8FsTCjyj pic.twitter.com/0kBbwOgifJ
— ポキオ@MFT2018 H/04-01 (@pokiiio) August 15, 2018
動作確認中に、本当に遅延して驚くなど。
クソコードはこちら
from m5stack import lcd import urequests import uos import utime import machine import random uos.mountsd() interval_sec = 60 * 10 led_pin = 15 led_num = 10 leds = machine.Neopixel(led_pin, led_num) def setColor(neopixel, color, brightness): leds.brightness(brightness) for i in range(led_num): neopixel.set(i + 1, color) def blinkSoftly(neopixel, color, sec = 1): for i in range(sec): setColor(neopixel, 0x000000, 0) for j in range(8): setColor(neopixel, color, 32 * (j + 1) - 1) utime.sleep_ms(62) for j in range(8): setColor(neopixel, color, 255 - 32 * j) utime.sleep_ms(62) setColor(neopixel, 0x000000, 0) def blinkLikePartyPeople(neopixel, sec = 1): leds.brightness(255) for i in range(sec): for i in range(10): for k in range(led_num): color = 0xff0000 * random.randrange(2) + 0x00ff00 * random.randrange(2) + 0x0000ff * random.randrange(2) neopixel.set(k + 1, color) utime.sleep_ms(100) while True: setColor(leds, 0x000000, 0) response = urequests.get('http://unkou.keikyu.co.jp/') unko = response.text.split("<div class=unko-panel>")[1].split("</div>")[0] response.close() lcd.clear() if unko.find("受託") > 0: lcd.image(0, 0, file="/sd/5.jpg", scale=0, type=lcd.JPG) blinkLikePartyPeople(leds, interval_sec) elif unko.find("見合わせ") > 0: lcd.image(0, 0, file="/sd/4.jpg", scale=0, type=lcd.JPG) blinkSoftly(leds, 0xff0000, interval_sec) elif unko.find("乱れ") > 0: lcd.image(0, 0, file="/sd/3.jpg", scale=0, type=lcd.JPG) blinkSoftly(leds, 0xff8000, interval_sec) elif unko.find("遅れ") > 0 or unko.find("運休") > 0: lcd.image(0, 0, file="/sd/2.jpg", scale=0, type=lcd.JPG) blinkSoftly(leds, 0xffff00, interval_sec) elif unko.find("平常") > 0: lcd.image(0, 0, file="/sd/1.jpg", scale=0, type=lcd.JPG) utime.sleep(interval_sec) else: lcd.clear() lcd.setCursor(0, 0) lcd.setColor(lcd.WHITE) lcd.print("unknown state.") utime.sleep(interval_sec)