Androidのメモとか

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

ファーンだけじゃなくファファファファファーンができるようになった

ファーン。

ポキオ Raspberry Pi Speaker pHat Air Horn

ファーン?

前回はこちら。

relativelayout.hatenablog.com

要はエアホーンの効果音をRaspberry Piで鳴らしたいよっていうお話なんですが、前回のNode-REDのノードの場合、音声ファイルをノードで再生中に、更に音声ファイルをノードに対して再生させようとすると、正しく再生されなくなってしまいます。つまり、エアホーンのファーンという音は鳴らせても、それを連続して再生してファファファファファーンみたいな鳴らし方はできませんでした。

Pythonで再生してみる?

Node-REDではノードで再生中の音楽を途中で止めるすべがなさそうだったので、Pythonを使って愚直にコーディングしてファファファファファーンしてみようと思います。

Pythonではpygameというゲーム用モジュールを使うと簡単にMP3を再生できそうだったので、それを使って実装してみます。

$ pip list

手元のRaspberry PiRaspberry Pi OS)にはプリインされてるようで、上記コマンドでモジュール一覧を表示したところ、

Package           Version    
----------------- -----------
(中略)
pygame            1.9.4.post1

pygameは入っていました。良かった良かった。これを使ってMP3を連続再生してみようと思います。

import pygame.mixer
import time

def main():
    pygame.mixer.init()    
    time.sleep(1)  

    pygame.mixer.music.load("./Music/airhorn.mp3")    
    pygame.mixer.music.play(1)          
    time.sleep(0.2)                   
    pygame.mixer.music.stop()   

    pygame.mixer.music.load("./Music/airhorn.mp3")    
    pygame.mixer.music.play(1)          
    time.sleep(0.2)                   
    pygame.mixer.music.stop()   

    pygame.mixer.music.load("./Music/airhorn.mp3")    
    pygame.mixer.music.play(1)          
    time.sleep(0.2)                   
    pygame.mixer.music.stop()

    pygame.mixer.music.load("./Music/airhorn.mp3")    
    pygame.mixer.music.play(1)          
    time.sleep(0.2)                   
    pygame.mixer.music.stop()

    pygame.mixer.music.load("./Music/airhorn.mp3")    
    pygame.mixer.music.play(1)          
    time.sleep(2)                   
    pygame.mixer.music.stop()

if __name__ == '__main__':
    main()

便利なことに、再生だけでなく、再生中の音楽を止めたりもできるので、まずはsleepで時間を少しずつづらしながら、再生中のファーンを停止し、そのまま再度ファーンを再生させながら、ファファファファファーンをしてみました。

この投稿をInstagramで見る

Pythonでファファファファファーンできたお

pokio(@pokiiiiio)がシェアした投稿 -

おーーー。いい感じ。あとは、これをサンプラーみたいにボタン操作でファファファファファーンしたいところ。

Raspberry PiでMP3を再生させてエアホーンをいつでも鳴らせるようにする

気分はパリピ

ポキオ Raspberry Pi Speaker pHat

RPiでMP3再生

今回は以前購入したSpeaker pHatを使って音を鳴らしてみようと思います。

relativelayout.hatenablog.com

Pimoroni Speaker pHAT - スピーカー pHAT キット

Pimoroni Speaker pHAT - スピーカー pHAT キット

  • メディア: エレクトロニクス

というのも、Raspberry PiからGoogle Homeとかを喋らせることとかは結構やりましたが、Raspberry Pi上でMP3を再生することはあまりありませんでした。wavファイルであればコマンドラインからaplayコマンドで再生できましたが、MP3の再生コマンドがデフォルトでは入ってないっぽいようでした。

ひとまずコマンドラインからMP3を再生すべく、mpg321をインストールしてみました。

$ sudo apt install mpg321
$ mpg321 ./Music/airhorn.mp3 

これでMP3が再生できました。

Node-REDからはどうか?

サクッと調べた感じ、node-red-contrib-play-audio-fileで再生できそうだったので、早速インストール。このノードもmpg321をベースに動作するようなので、予めmpg321をインストールしておく必要がありそうです。

ポキオ Raspberry Pi Speaker pHat

予めノードでファイルパスを指定したり、msg.filenameで流し込んだりして、特定のMP3を再生できます。ただ、再生中に再度ノードを発火させてしまうと、正しく再生されないのでちょっと使い方には注意が必要そうです。

そしてエアホーン

パリピがファファファファーンって鳴らしてそうな、アレのことです。アレを鳴らせばきっとパリピな感じになれそうですよね。

はい。こんな感じです。先程のNode-REDから再生できるようにしたので、Injectionノードを叩けばいつでもエアホーンが鳴らせるようになりました。ただ、ファーンしかならず、ノードの制約でファファファファーンができないのが非常に残念です。

できればMPCやサンプラーのように、色々な音を好きなように再生したいんですけどねぇ。それはおいおい。

神奈川県内のCovid-19の新規陽性者数をM5StickCで表示してみる

減ったり増えたり。

ポキオ M5StickC Node-RED Covid-19

前回はM5StickC”もどき”に表示させてました

前回はこちら。

relativelayout.hatenablog.com

眠っていたM5StickCの火入れを行ったので、UI Flowでちょっぱやで実装して、神奈川県のCovid-19陽性者数をM5StickCでも表示してみようと思います。

今回も裏ではNode-REDが活躍しています

前回、Node-RED上に神奈川県のCovid-19陽性者数の情報を取得しパースする仕組みを作りました。

ポキオ Covid-19 Node-RED ESP32

今回も、これを利用していきます。具体的には、M5StickCでNode-RED経由で情報を取得し、その結果をM5StickCのディスプレイに表示させてみようと思います。

UI Flowで爆速実装

気安く爆速という単語を多用してますが、UI Flowは本当に爆速でした。

ポキオ M5StickC Node-RED Covid-19

とはいえ、最初はBlockyで実装していたものの、簡単な文字列操作ができなかったので結局Pythonで実装しちゃいました。ただ、Blockyのおかげで、フルスクラッチPythonを書くよりかは簡単に実装できたので、まずはBlockyで大まかに実装してしまって、細かい部分をPythonで実装するのがいいのかもしれないですねぇ。

さっそく実行

いい感じで動いてますね。データが更新されるのが毎日夕方〜夜なので、ポーリングはせずにボタン押下時にデータ更新を行うようにしています。

そして、今日(2020/09/26)は91人でした。早く収まるといいなぁ。

この投稿をInstagramで見る

今日は91人。

pokio(@pokiiiiio)がシェアした投稿 -

M5StickC

M5StickC

  • メディア:

実際のコード

クソコードはこちらです。

from m5stack import *
from m5ui import *
from uiflow import *
import wifiCfg
import urequests
import time

setScreenColor(0x000000)

label0 = M5TextBox(79, 10, "connecting", lcd.FONT_DejaVu18,0xFFFFFF, rotate=90)
label1 = M5TextBox(49, 10, "to Wi-Fi", lcd.FONT_DejaVu18,0xFFFFFF, rotate=90)
label2 = M5TextBox(19, 10, "access point...", lcd.FONT_DejaVu18,0xffffff, rotate=90)

def buttonA_wasPressed():
  # global params
  label0.setText('getting')
  label1.setText('covid-19')
  label2.setText('data...')
  try:
    req = urequests.request(method='GET', url='http://xx.xx.xx.xx:1880/covid', headers={})
    label0.setText(str(req.text.split('\n')[0]))
    label1.setText(str(req.text.split('\n')[1]))
    label2.setText(str(req.text.split('\n')[2]))
  except:
    label0.setText('*****')
    label1.setText('error')
    label2.setText('*****')
  pass
btnA.wasPressed(buttonA_wasPressed)

wifiCfg.doConnect('MASARU-Wi-Fi_elecom', 'linkinpark123')
label0.setText('press')
label1.setText('button A')
label2.setText('to get data...')

M5Stackのファームを更新して久しぶりに電源ON

シルバーウィークは火入れウィーク。

ポキオ M5Stack ファームウェア 更新

久しぶりにさわるよー

巷では新しいM5Stackで賑わってますが、手持ちのM5Stack、M5Stack Fire、M5StickCを久しぶりに触るべく、まずはファームウェアを更新してみようと思います。

flow.m5stack.com

今回はビジュアルプログラミングしてみたいので、UI Flow用のファームウェアを焼いていきます。

まずはUSBドライバーから・・・

手持ちのMacBook AirにUSBドライバーが入っていなかったっぽく、まずはそこから。

m5stack.com

M5Stack本家のDLページから各OS向けにCP2104 Driverが入手できるので、ひとまずインストール。

ポキオ M5Stack ファームウェア 更新

その後に、おなじページからM5Burnerをダウンロード。こちらも各OS向けに用意されています。

ポキオ M5Stack ファームウェア 更新

Electronのアプリになっていて、各種ファームウェアをM5Stackに焼くことができます。今回は、UI Flow向けのファームウェアをアプリ上でダウンロードして、M5Stickたちに焼いていきます。

ポキオ M5Stack ファームウェア 更新

はい、一通りファームウェアを焼けましたー(笑)

これでUI Flowで爆速開発できそうですね!

M5Stack ATOM Matrix ESP32 Development Kit

M5Stack ATOM Matrix ESP32 Development Kit

  • メディア: エレクトロニクス

ポキオ的Raspberry Piセットアップ

メモメモ。

ポキオ Raspberry Pi 初期設定

OSをSDカードに焼く

今回はRaspberry Pi Imagerで焼きました。

relativelayout.hatenablog.com

Wi-Fi接続情報作成・SSH有効化

Wi-Fiの接続情報(wpa_supplicant.conf)とSSHを有効化するためのssh.txtという空ファイルをSDカードに予め入れておくと、起動時に自動でWi-Fi接続・SSH有効になって非常に便利。

mascii.github.io

wpa_supplicant.conf作成には@masciiさんのWebアプリをいつも使わせていただいておりますー。ありがとうございます。

SSHでアクセス

同じネットワークから、おもむろにSSH接続します。初期パスワードはraspberry

$ ssh pi@raspberrypi.local

お守り代わりにパッケージ更新しておきます。

$ sudo apt update
$ sudo apt upgrade

その後、Raspberry Piの名前とかパスワードを変更。

$ sudo raspi-config 

設定後に再起動。

Node-REDの設定

何故かRaspberry Pi ImagerでOSを焼くと、Node-REDが入っていないっぽく、イチから入れていきます。

nodered.jp

とりあえずインストール。

$ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

あとはRaspberry Pi起動時に自動で立ち上がるように設定しておわり。

$ sudo systemctl enable nodered.service

これでNode-REDまわりの設定はいい感じ。

ポキオ Raspberry Pi 初期設定

とりあえず、ここまでできればOKですね。

いつの間にかRaspberry Pi Imagerができてて爆速OS焼きができた

秒で焼いていく。

ポキオ Raspberry Pi Imager

Raspberry Pi Imagerって?

Raspberry Piを使う上で面倒なことの一つにOSをSDカードに焼くという作業がありました。いつもmacOS標準のターミナルからコマンドを打ったりしてたんですが・・・。

www.raspberrypi.org

ポキオ Raspberry Pi Imager

いつの間にか各OS向けにRaspberry Pi Imagerなるかんたんアプリが登場していましたー。

早速インストール

macOS向けのアプリはdmgファイルになっているので、とりあえずDL。開くとドロップアンドドロップでインストールできるタイプのアプリになっています。

ポキオ Raspberry Pi Imager

さっそくアプリを起動すると、こんな画面。OSと出力先のSDカードを選択できるボタン、それと実行ボタンが用意されているだけのシンプルなアプリになっています。

ポキオ Raspberry Pi Imager

すごいのは、いわゆるメジャーなRaspberry Pi OSだけでなくUbuntuなど他のOSも選べるようになっています。すごい便利ですねー。

ポキオ Raspberry Pi Imager

とりあえずRaspberry Pi OSを選択して書き込み開始。Verifyまで自動でやってくれます。

ポキオ Raspberry Pi Imager

焼くのにかかる時間はあまり変わらないものの、焼く作業が格段にかんたんになりました。そんなに頻繁にOSを書くことはありませんが、あると便利なアプリですねー。

livedoor天気のAPIが終了してしまった話

突然の死。

ポキオ livedoor 天気 API Node-RED

サービス・エンドは突然に

2年ほど前に作った天気予報ガジェット、テレワーク中も自宅で頑張って稼働していました。

relativelayout.hatenablog.com

しかし、今月頭に何故か動作していないことに気づきました。

そうなんですよ、情報元であるlivedoor天気がサービス終了してまして・・・。

help.livedoor.com

目の前が真っ暗になりました。

というのも

Node-REDユーザーグループの一員として執筆させていただいた本でバリバリlivedoor天気のAPIについて触れてたんですよね…。

読者の皆さん、本当にごめんなさい…。とりあえず、そのあたりの経緯を先日の出版記念イベントで話させていただきました。

ポキオ livedoor 天気 API Node-RED

node-red.connpass.com

speakerdeck.com

私以外にもサービス終了の話をされてる方がいたので強い心で生きていこうと思いました(笑)

さて、どうするか

livedoor天気のAPIを失った今、とりあえずバックアップで作っていた気象庁データの活用でなんとか凌ぐことに。

ポキオ livedoor 天気 API Node-RED

一応、下記ブランチにて公開中です。

github.com

また、livedoor天気予報APIをつかったNode-RED向けノードですが、公開を停止させていただきました。

ポキオ livedoor 天気 API Node-RED

ソースコードGithubで引き続き公開しています。

github.com

さてさて

皆々様にはご迷惑をおかけしておりますが、今後も便利なノードを作っていきたい所存です。何卒よろしくお願いいたしますますます。

この投稿をInstagramで見る

気象庁のデータで復活。

pokio(@pokiiiiio)がシェアした投稿 -

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

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