Androidのメモとか

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

意識の低いツイートを自動的につぶやいてみる

Techで意識の低いことを。

ポキオ 意識の低い ツイート 自動化 Node-RED

意識が低くてもいいじゃない

意識高い系ばかりで疲れてませんか?

たまにはゆるく行きましょう。というわけで、今回は「意識の低いツイートを自動でつぶやくしくみ」を作ってみます。

やりたいこと

毎週月曜日ってやる気がでないですよね、私は皆無です。

ポキオ 意識の低い ツイート 自動化 Node-RED

やる気がなさすぎて、こういう愚痴をつぶやくのも面倒。ならば自動化するしかない、そういうモチベーションです。意識の低いDX、上等です。

自動化に使うのはNode-RED

毎度おなじみのNode-REDを使っていきます。いわゆるコーディングをしなくてもGUI上でロジックを組み立てて、実行できるすごい開発環境です。

まだNode-REDを使ったことがない方はこちらを…。

relativelayout.hatenablog.com

relativelayout.hatenablog.com

ちなみに、Raspberry PiのOSにもプリインされてたり(されてなかったり)するので、こちらも併せてどうぞ。

relativelayout.hatenablog.com

Node-REDでの設定

こんな感じでノードを組んでいます。

ポキオ 意識の低い ツイート 自動化 Node-RED

すごいシンプルですね…。

nodered.jp

まずはInjectノードで「定期的に発火して」「決まった文字列を次のノードに渡す」ようにします。

ポキオ 意識の低い ツイート 自動化 Node-RED

こんな感じで、時間とか曜日を指定することができます。ほんとに便利ですねぇ。ついでに定期的に「労働はクソ」などとつぶやくようにしたりしています、極めて便利ですね。

flows.nodered.org

そして、Twitterノードで渡された文字列をつぶやきます。これだけ。

意識の低いDX

これで定期的に意識の低いツイートをつぶやけるようになりました。これってなんの意味があるの?そういうことはあまり考えないようにしましょう。

M5Stack ATOM Motion KitをEspNowでラジコンにしてみた

みんなラジコン好きでしょ?

ポキオ M5Stack Atom Motion Kit EspNow

前回までの話

ATOM Motion Kitを購入したので、久々にセットアップをしました。

relativelayout.hatenablog.com

今回は、セットアップしたATOM Motion Kitにモーターをつなぎつつ、それをM5Stack BasicからEspNowでリモートコントロールすることでラジコンっぽくしていきます。

今回使うもの

使うものやら環境はこんな感じ。

ポキオ M5Stack Atom Motion Kit EspNow

  • コーディング : UIFlow ver. 1.9.1 (on MacBook Air)
  • ATOM Motion Kit (M5Stack ATOM Lite) : ver. 1.9.1
  • M5Stack Basic : ver. 1.9.1
  • タミヤ 楽しい工作シリーズ ダブルギヤボックス等

ダブルギヤボックスの2つのモーターをMotion KitのM1/M2端子に直接接続させています。本来はコンデンサを挟むとか挟まないとかあると思いますが、今回は省略しています。

コーディングはUIFlowで

今回もコーディングにはUIFlowを使っていきます。ATOM LiteとM5Stack Basicとの通信にはEspNowという通信を使っていきます。

www.espressif.com

(個人的解釈なので間違ってたらごめんなさいですが)BLEではなくWi-Fi上で通信をする独自通信らしく、UDP的にBroadcastしたりそれをReceiveしたりするのが簡単にできるメソッドです。ホントかよ。

ポキオ M5Stack Atom Motion Kit EspNow

一応、UIFlowの「Advanced」の中にEspNowというカテゴリがあり、ここから利用可能になっています。ありがたいことによく使う「初期化」や「送信」「受信」のテンプレートも用意されているので、それを自分のフローに持ってくるだけでM5Stack間通信が簡単にできてしまいます。

コントローラー側を実装

UIFlowはこんな感じです。

ポキオ M5Stack Atom Motion Kit EspNow

Setupで初期化のテンプレートをそのまま持ってきて、ボタンのPressedとReleasedでそれぞれ別のデータをBroadcastするようにしています。アドレスやチャネルを詳細に設定することも可能そうですが、今回はデフォルトのままで使っています。

ラジコン側を実装

ラジコン側も同じように初期化。データを受信した際に、データの中身によってモータを回転させたり止めたりしています。

ポキオ M5Stack Atom Motion Kit EspNow

今回は、

  • Aボタンが押されたら、左のキャタピラが正回転し、離すと停止
  • Bボタンが押されたら、左右のキャタピラが逆回転し、離すと停止
  • Cボタンが押されたら、右のキャタピラが正回転し、離すと停止

こんな感じでブロックを組んでみました。(Bは別のボタンと同時に押さないこととしますw)

動いている様子がこちら

普通に動きますねー。タイムラグもなく、PressedとReleasedのタイミングで動作が切り替わっていることがわかります。パケットの取りこぼしもなさそうなので、キャタピラが動きっぱなしになる、みたいなこともなさそうです。

本当はBLEで通信させたかったんですが、持っているM5Stackの種類や、UIFlowでできることが限られているため、今回はEspNowを利用しましたが、こちらも簡単にM5stack間連携をさせることができたので、かなりおすすめです。

コードはこちら。

コントローラー側

from m5stack import *
from m5ui import *
from uiflow import *
import espnow
import wifiCfg

setScreenColor(0x222222)




wifiCfg.wlan_ap.active(True)
wifiCfg.wlan_sta.active(True)
espnow.init()

def buttonA_wasPressed():
  # global params
  espnow.send(id=1, data=str('A1'))
  pass
btnA.wasPressed(buttonA_wasPressed)

def buttonA_wasReleased():
  # global params
  espnow.send(id=1, data=str('A2'))
  pass
btnA.wasReleased(buttonA_wasReleased)

def buttonC_wasPressed():
  # global params
  espnow.send(id=1, data=str('C1'))
  pass
btnC.wasPressed(buttonC_wasPressed)

def buttonC_wasReleased():
  # global params
  espnow.send(id=1, data=str('C2'))
  pass
btnC.wasReleased(buttonC_wasReleased)

def buttonB_wasPressed():
  # global params
  espnow.send(id=1, data=str('B1'))
  pass
btnB.wasPressed(buttonB_wasPressed)

def buttonB_wasReleased():
  # global params
  espnow.send(id=1, data=str('B2'))
  pass
btnB.wasReleased(buttonB_wasReleased)


print(espnow.get_mac_addr())
espnow.add_peer('ff:ff:ff:ff:ff:ff', id=1, channel=0, ifidx=0, encrypt=False)

ラジコン側

from m5stack import *
from m5ui import *
from uiflow import *
import espnow
import wifiCfg
from base.Motion import Motion



addr = None
data = None
speed = None

wifiCfg.wlan_ap.active(True)
wifiCfg.wlan_sta.active(True)
espnow.init()




def recv_cb(_):
  global addr,data,speed
  addr, _, data = espnow.recv_data(encoder='str')
  if data == 'A1':
    motion.set_motor_speed(1, speed)
  if data == 'A2':
    motion.set_motor_speed(1, 0)
  if data == 'B1':
    motion.set_motor_speed(1, speed * -1)
    motion.set_motor_speed(2, speed * -1)
  if data == 'B2':
    motion.set_motor_speed(1, 0)
    motion.set_motor_speed(2, 0)
  if data == 'C1':
    motion.set_motor_speed(2, speed)
  if data == 'C2':
    motion.set_motor_speed(2, 0)

  pass
espnow.recv_cb(recv_cb)



motion = Motion()
speed = 96
espnow.add_peer('ff:ff:ff:ff:ff:ff', id=1, channel=0, ifidx=0, encrypt=False)

ATOM Lite

ATOM Lite

  • スイッチサイエンス
Amazon

M5Stack ATOM Lite (Motion Kit) ことはじめ

久しぶりのM5Stack。

ポキオ M5Stack ATOM Lite Motion Kit

これ買いました。

ATOM Lite Motion Kitを買ってみました。

www.switch-science.com

久しぶりのセットアップだったので、メモも兼ねて手順を残しておきます。

ポキオ M5Stack ATOM Lite Motion Kit

今回買ったのはM5Stack ATOM Lite Motion Kitですが…

ポキオ M5Stack ATOM Lite Motion Kit

今回は同梱されているATOM Liteのセットアップの話がメインになります。

ATOM Lite

ATOM Lite

  • スイッチサイエンス
Amazon

まずはファームを焼く

ここにアクセスして、M5Burnerをダウンロード。

shop.m5stack.com

アプリを起動して、ATOMのカテゴリーを表示。

ポキオ M5Stack ATOM Lite Motion Kit

UIFLOW LITE」を見つけて、最新ファームをダウンロードします。

ポキオ M5Stack ATOM Lite Motion Kit

ダウンロードが完了すると、「Burn」できるようになるので、USBケーブルでM5Stack ATOM Liteを接続して「Burn」をクリック。

ポキオ M5Stack ATOM Lite Motion Kit

最初にM5Stackに設定するSSID/PWの入力が求められるので、とりあえず自宅のAP情報を入力。

ポキオ M5Stack ATOM Lite Motion Kit

入力が完了すると、ファーム焼き焼きが開始されます。

UIFLOWとの連携

M5Stackファミリーの真骨頂であるUIFLOWと連携するために、API Keyが必要になるんですが。

flow.m5stack.com

ATOM Liteはディスプレイを持たないため、API KeyをM5Burnerから取得する必要があります。

ポキオ M5Stack ATOM Lite Motion Kit

M5Burnerの画面の「Burn」の隣の「Configure」を押すと・・・

ポキオ M5Stack ATOM Lite Motion Kit

こんな感じでAPI Keyが取得できます。

ポキオ M5Stack ATOM Lite Motion Kit

これをUIFLOW上で入力すると、無事に連携することができます。

ポキオ M5Stack ATOM Lite Motion Kit

とりあえずLEDをいろんな色に光らせてみます。

ポキオ M5Stack ATOM Lite Motion Kit

光ってますね(笑)

UIFLOWからMotion Kitは制御できるの?

UNIT一覧を見ると・・・

ポキオ M5Stack ATOM Lite Motion Kit

Motion Kitがないっぽいので、ゴリゴリポートを指定して使うか、潔くArduino IDEでやったほうが簡単かもしれませんね。

UIFLOWの [BASE] > [MOTION] からモーターやサーボのブロックがあり、そこから実装可能でした!かんたんだね!

ポキオ M5Stack ATOM Lite Motion Kit

2021年版ベストガジェット3つ

2021年はあまり買ってない?

ポキオ 2021年 ベストガジェット

今更ですが

毎年恒例のベストガジェットを振り返ろうと思います。あくまでも個人的な観点でのベスト3なので、異論反論オブジェクションは認めません。

白光(HAKKO) 電池式はんだこて コードレスタイプ FX901-01

まずはこれ。

ポキオ 2021年 ベストガジェット

いままで、コンセントから電源を引っ張ってくるタイプのハンダゴテを使っていましたが、経年劣化のため買い替えを検討していた際に、思い切って電池式に。コードレスになったので取り回しが楽になったのが最高です。エネループ4本でも全然稼働するので、経済面も良し。立ち上がりは遅いかもしれませんが、ガンガンはんだ付けをする感じではないので、これで充分だったりします。

OPPO A73 ダイナミック オレンジ

まさかのOppo

ポキオ 2021年 ベストガジェット

何機種も連続してMotorolaを使っていましたが、数年ぶりにMotorola以外のスマホを使いました。素のAndroid OSではないので、ちょっと気持ち悪いですが、カメラもそこそこ、バッテリーもそこそこ、薄さもそこそこで重宝しています。一番の推しポイントは「廉価なくせして、物理SIMとeSIMに両対応している」という点です。メインはIIJ mioを使いつつ、バックアップ回線として楽天モバイルをeSIMで運用しています。最近、某回線が急に使えなくなる、みたいなことがあるのでバックアップ回線は本当に重要。

Sonos Roam

最後にこれ。

ポキオ 2021年 ベストガジェット

持ち運べる高音質、そして防水。使い方は無限大です。サイクルジャージのポケットに入れてライドに連れて行ったり、キッチンで料理をしながら音楽を聞いたり、お風呂でリラックスをしながら聞いたり…。そしてSonosならではの音質がどこでも楽しめるのが良いですね。Wi-FiとBTに両対応しているので、家の中でも出先でも使えるのもヨシ。

あけましておめでとうございます

あけちゃいましたね。

ポキオ 2022年

ことしもよろしくおねがいします

先日からNode-REDで毎週月曜日に「来週から本気出します。」とつぶやくようにしたところ、かなり気が楽になりました(笑)

こんな感じで今年はゆるーく頑張っていく所存です。

ポキオ 2022年

おみくじも凶でしたからね・・・(笑)

というわけで、本ブログをよろしくおねがいします。

relativelayout.hatenablog.com

姉妹ブログも何卒よろしくおねがいします。

pokio-ringyo.hatenablog.com

upgti.hatenablog.com

Node-REDと余ったWebカメラを使って監視カメラを作ってみてわかったこと

いつもうまく行かない。

(本記事はIoTLTアドベントカレンダー20日目のネタでもあります)

ポキオ Node-RED Webカメラ 監視カメラ

余ったWebカメラを活用(したかった)

以前予備で買っておいたWebカメラですが、いざWFHで実戦投入しようと思ったけど画質が悪くて、結局使っておらず。いわゆる積みハード的な存在になってしまっていたので、今回はそれを使って監視カメラを作ってみようと思いました。

環境・材料

LifeCam HD-3000

よくあるフツーのWebカメラです。

Raspberry Pi Zero W

よくあるフツーのPi Zero Wです。(Amazon、なんか高すぎ?)

Node-RED (v1.0.3)

よくあるフツーのNode-REDです。Raspberry Pi OSプリインのものをそのまま使っています。

成果物

はじめにお伝えしておくと、Node-REDフローはこんな感じ。

ポキオ Node-RED Webカメラ 監視カメラ

Webカメラは非常用の飲料水にくくりつけて、外を監視させます。

ポキオ Node-RED Webカメラ 監視カメラ

Node-REDのDashboard機能をつかって、Webページを作成。

ポキオ Node-RED Webカメラ 監視カメラ

こんな感じです。

わかったこと

1:Webカメラノードは存在するが凝った使い方ができない(かもしれないけどよくわからない)

あんまり調べたわけではないですが、ライブラリにWebカメラ用のノードはいくつかあります。

flows.nodered.org

機能としては非常にシンプルですが、

  • 指定できる解像度が限られている
  • fswebcamのオプション設定ができない

などのCons.があり、結局fswebcamコマンドを直接叩いています。

fswebcam -S 15 -r 1280x800 image.jpg

ここで、2つポイントが。

  • -Sオプションで数フレームスキップさせてからキャプチャさせる(使ってるWebカメラの挙動的に、最初に露光調整が走り、画が白飛びすることがあるため)
  • -rオプションで解像度を指定(使ってるWebカメラの最大値をひとまず設定)

こんな感じで生のコマンドだと(当たり前ですが)カスタムできます。

2:Webカメラの暗所性能が悪い(やつを使ってるだけかもしれない)

見ての通り、夜間は使い物になりません。

ポキオ Node-RED Webカメラ 監視カメラ

fswebcamの露光時間(フレーム数)を伸ばしても、あまり画が変わらなかったので、まぁこんなものなのでしょう。もちろんWebカメラを責めている気は毛頭なく、もともと明るい室内で近くの顔を撮すのが最大のユースケースなので、仕方がないのかなと思っています。

3:Webカメラがたまに認識されなくなる(やつを使っているだけかもしれない)

これが一番困っているんですが、たまにWebカメラが認識されなくなります。具体的にはlsusbを打っても検出できず、Raspberry Piの電源を抜いて刺さないと検出されない現象がたまに起こりました。

 sudo sh -c "echo -n \"1-1\" > /sys/bus/usb/drivers/usb/unbind"
 sudo sh -c "echo -n \"1-1\" > /sys/bus/usb/drivers/usb/bind"

こんな感じでUSBのunbind/bindを繰り返しても検出できず…。電力が足りてなくて不安定になっているのか、長時間等間隔で撮影をしてだめになっているのか、はたまた個体が良くないのか、謎は深まるばかりですが、調査するくらいだったらビールを飲んでたほうが幸せなので、特に深追いはしていません(笑)

というわけで

監視カメラがほしいならちゃんとしたものを買ったほうが良いということです。餅は餅屋。

テレワーク用の椅子(6脚目)

まさかの6脚目。

ポキオ HHGears SM-115 テレワーク

突然の腰痛と椅子

二足歩行を得た人類の宿命である腰痛。そしてその宿命は突然やってきました。

ぎっくり腰のような症状に見舞われ、整形外科に行ってきました。そしてなぜか翌日には治ってしまったわけですが、(中略)、やっぱりテレワーク用の椅子が良くないのではと思い、新しい椅子を買ってみました。

これで6脚目(笑)

いままで色々座ってきましたが…。

relativelayout.hatenablog.com

relativelayout.hatenablog.com

昨今のゲーミングチェアブームに私も乗っかりたいなぁと思ったわけです。種々のハイエンドモデルも気にはなりますが、個人的にはコスパの高い椅子が欲しく色々物色してたところ・・・

game.watch.impress.co.jp

ほうほう、なかなかコスパが良さそうなゲーミングチェアを発見。ポイントが割と溜まっていたので、全額ポイントで購入してみました。実質無料ですね!

HHGears SM-115

じゃーん。

ポキオ HHGears SM-115 テレワーク

大きい箱で発送され、脚・座面・背面・肘置きなどがバラバラになった状態で入っていて、それを自分で組み立てて行きます。後での述べますが、リクライニング機構や肘置きの調整機能がない分、部品点数も少なく15分程度で組み立てることができました。

ポキオ HHGears SM-115 テレワーク

なんとなくWFH環境がぱっとみそれっぽい感じになってきましたね。

実際にWFHしてみた

背もたれは思った以上にフラット。左右のホールド感は少なめですが、腰のサポートは意外とちゃんとしている印象。

ポキオ HHGears SM-115 テレワーク

先述の通り、リクライニング機構や肘置きの調整機能はないですが、ロッキング機能があるためそこまで苦にはなりません。本当にリラックスしたければ、床に寝っ転がればいいですしね、WFHですから(笑)

ポキオ HHGears SM-115 テレワーク

そしてなにより個人的に好きな部分は、ゲーミングチェアでありがちな赤とか青の差し色がないこと。真っ黒なカラーリングなので、リビングに置いておいても、そこまで浮いた存在にはならないのがいいですねぇ。ロゴは刺繍でデカデカと入っててアレですが・・・。

レビュー

というわけで、HHGearsのSM-115でしたが。

Pros.

  • 安い
  • かんたんに組み立て可能
  • ロッキング機能つき
  • 意外と腰のサポートがある
  • カラバリで黒一色がある
  • 耐久性が高いPUレザー

Cons.

  • リクライニング機構・肘置き調整機構がない
  • 左右方向のホールド感が弱い
  • 通気性が悪いため、お尻の下に汗をかきがち
  • ランバーサポートなどクッションは付属していない
  • 「HHGears」っていうブランド名がちょっと「えちえち」

なんだかロゴがハイアットっぽいなぁと思ったんですが、全然違いました。

椅子遍歴

椅子1:IKEA MARIUS

椅子2:バランスボール

椅子3:Colemanの小さい椅子

椅子4:ポンコタン ハイバックチェア

椅子5:CASCADE ハイバックチェア

椅子6:HHGears SM-115

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

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