Androidのメモとか

ポキオの日記です。今日も遅延してない。

M5STACKでダァシエリイェス(上級)

ついに完成。

ポキオ M5STACK FIRE LED MicroPython

前回までのあらすじ

relativelayout.hatenablog.com

relativelayout.hatenablog.com

MFT2018で購入したM5Stack FIREを使って、京急線の運行情報監視ガジェットを作ってきました。定期的にHPを監視したり、運行情報に応じてSDカード上の画像を表示したりしてきました。今回は最終回として、LEDを光らせてみようと思います。

LEDを光らせる

LEDを光らせるには、Neopixelモジュールをインポートすればいいのですが、

  • LEDは10個だが、LEDの番号は0始まりではなく1始まり
  • LEDを光らせるにはひとつずつset()していく

というのがポイントです。

relativelayout.hatenablog.com

これを使って、

  • 遅延時:黄色点滅
  • 大幅な遅延時:橙色点滅
  • 運転見合わせ時:赤色点滅

させてみようと思います。また、(主にJRからの)振替輸送受託のために京急が遅延した際は、以前のガジェット同様にパリピ点滅させます。

で、作ってみました

DEMOモードで光らせるとこんな感じ。

#m5stack でダァ完成。 train info display with M5Stack FIRE.

A post shared by pokio (@pokiiiiio) on

ポキオ M5STACK FIRE LED MicroPython

ポキオ M5STACK FIRE LED MicroPython

M5Stack FIREのLEDを活かしながら、マグネットでどこでも貼り付けられるので、オフィスや冷蔵庫に貼っておくのもいいですねぇ。

動作確認中に、本当に遅延して驚くなど。

クソコードはこちら

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)

京急電鉄ぴあ (ぴあMOOK)

京急電鉄ぴあ (ぴあMOOK)

  • 発売日: 2018/03/30
  • メディア: ムック

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。