あけちゃいましたね。
ことしもよろしくおねがいします
先日からNode-REDで毎週月曜日に「来週から本気出します。」とつぶやくようにしたところ、かなり気が楽になりました(笑)
来週から本気出します。
— ポキオ (@pokiiio) 2022年1月3日
こんな感じで今年はゆるーく頑張っていく所存です。
おみくじも凶でしたからね・・・(笑)
というわけで、本ブログをよろしくおねがいします。
姉妹ブログも何卒よろしくおねがいします。
あけちゃいましたね。
先日からNode-REDで毎週月曜日に「来週から本気出します。」とつぶやくようにしたところ、かなり気が楽になりました(笑)
来週から本気出します。
— ポキオ (@pokiiio) 2022年1月3日
こんな感じで今年はゆるーく頑張っていく所存です。
おみくじも凶でしたからね・・・(笑)
というわけで、本ブログをよろしくおねがいします。
姉妹ブログも何卒よろしくおねがいします。
いつもうまく行かない。
(本記事はIoTLTアドベントカレンダー20日目のネタでもあります)
以前予備で買っておいたWebカメラですが、いざWFHで実戦投入しようと思ったけど画質が悪くて、結局使っておらず。いわゆる積みハード的な存在になってしまっていたので、今回はそれを使って監視カメラを作ってみようと思いました。
よくあるフツーのWebカメラです。
よくあるフツーのPi Zero Wです。(Amazon、なんか高すぎ?)
よくあるフツーのNode-REDです。Raspberry Pi OSプリインのものをそのまま使っています。
はじめにお伝えしておくと、Node-REDフローはこんな感じ。
Webカメラは非常用の飲料水にくくりつけて、外を監視させます。
Node-REDのDashboard機能をつかって、Webページを作成。
こんな感じです。
あんまり調べたわけではないですが、ライブラリにWebカメラ用のノードはいくつかあります。
機能としては非常にシンプルですが、
などのCons.があり、結局fswebcamコマンドを直接叩いています。
fswebcam -S 15 -r 1280x800 image.jpg
ここで、2つポイントが。
こんな感じで生のコマンドだと(当たり前ですが)カスタムできます。
見ての通り、夜間は使い物になりません。
fswebcamの露光時間(フレーム数)を伸ばしても、あまり画が変わらなかったので、まぁこんなものなのでしょう。もちろん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脚目。
二足歩行を得た人類の宿命である腰痛。そしてその宿命は突然やってきました。
悲報:腰やった
— ポキオ (@pokiiio) October 10, 2021
ぎっくり腰のような症状に見舞われ、整形外科に行ってきました。そしてなぜか翌日には治ってしまったわけですが、(中略)、やっぱりテレワーク用の椅子が良くないのではと思い、新しい椅子を買ってみました。
いままで色々座ってきましたが…。
昨今のゲーミングチェアブームに私も乗っかりたいなぁと思ったわけです。種々のハイエンドモデルも気にはなりますが、個人的にはコスパの高い椅子が欲しく色々物色してたところ・・・
ほうほう、なかなかコスパが良さそうなゲーミングチェアを発見。ポイントが割と溜まっていたので、全額ポイントで購入してみました。実質無料ですね!
じゃーん。
大きい箱で発送され、脚・座面・背面・肘置きなどがバラバラになった状態で入っていて、それを自分で組み立てて行きます。後での述べますが、リクライニング機構や肘置きの調整機能がない分、部品点数も少なく15分程度で組み立てることができました。
なんとなくWFH環境がぱっとみそれっぽい感じになってきましたね。
背もたれは思った以上にフラット。左右のホールド感は少なめですが、腰のサポートは意外とちゃんとしている印象。
先述の通り、リクライニング機構や肘置きの調整機能はないですが、ロッキング機能があるためそこまで苦にはなりません。本当にリラックスしたければ、床に寝っ転がればいいですしね、WFHですから(笑)
そしてなにより個人的に好きな部分は、ゲーミングチェアでありがちな赤とか青の差し色がないこと。真っ黒なカラーリングなので、リビングに置いておいても、そこまで浮いた存在にはならないのがいいですねぇ。ロゴは刺繍でデカデカと入っててアレですが・・・。
というわけで、HHGearsのSM-115でしたが。
なんだかロゴがハイアットっぽいなぁと思ったんですが、全然違いました。
タイトルがながい。
突然MacBook Airの調子が悪くなってしまったので、この際Big Surをクリーンインストールして、開発環境を整えてみます。
これを参考に起動可能なボリュームを作成し、クリーンインストール。
「とりあえず生」みたいなノリ。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
今回はめんどくさいのでanyenvで環境を整えます。まずはインストール。
brew install anyenv
そして初期化。
anyenv init
で、なぜか怒られる。
# Load anyenv automatically by adding # the following to ~/.zshrc: eval "$(anyenv init -)"
言われたとおりに.zshrc
にeval "$(anyenv init -)"
を追加して、反映。
source .zshrc
そして再度初期化。
anyenv init
また怒られた。DV彼氏みたい。
ANYENV_DEFINITION_ROOT(/Users/pokiiio/.config/anyenv/anyenv-install) doesn't exist. You can initialize it by: > anyenv install --init
言われたとおりに初期化。
anyenv install --init
これで良いはず。
nodenvのインストール。
anyenv install nodenv zsh -l
で、nodenvでLTSなNode.jsをインストール。
nodenv install -l nodenv install 14.18.0 nodenv global 14.18.0 zsh -l
バージョン確認。
node -v
14.18.0が入ってるっぽいのでヨシッ。
v14.18.0
pyenvもインストール。
anyenv install pyenv zsh -l
新しめのやつをインストール。
pyenv install -l pyenv install 3.10.0 pyenv global 3.10.0 zsh -l
念の為バージョン確認。
python3 --version
うん、大丈夫そう。
Python 3.10.0
ちなみに、python
とpip
もPython 3.x系になっちゃうんですね。ちょっと事故りそうで心配ですが、まぁいいです。Python 2.x系を叩きたければpython2
を使えということですね。
pokiiio@pokiiio-MacBook-Air ~ % which python /Users/pokiiio/.anyenv/envs/pyenv/shims/python pokiiio@pokiiio-MacBook-Air ~ % which python3 /Users/pokiiio/.anyenv/envs/pyenv/shims/python3 pokiiio@pokiiio-MacBook-Air ~ % python --version Python 3.10.0 pokiiio@pokiiio-MacBook-Air ~ % python3 --version Python 3.10.0
pokiiio@pokiiio-MacBook-Air ~ % which pip /Users/pokiiio/.anyenv/envs/pyenv/shims/pip pokiiio@pokiiio-MacBook-Air ~ % which pip3 /Users/pokiiio/.anyenv/envs/pyenv/shims/pip3 pokiiio@pokiiio-MacBook-Air ~ % pip --version pip 21.2.3 from /Users/pokiiio/.anyenv/envs/pyenv/versions/3.10.0/lib/python3.10/site-packages/pip (python 3.10) pokiiio@pokiiio-MacBook-Air ~ % pip3 --version pip 21.2.3 from /Users/pokiiio/.anyenv/envs/pyenv/versions/3.10.0/lib/python3.10/site-packages/pip (python 3.10)
ふーん。
pokiiio@pokiiio-MacBook-Air ~ % python2 WARNING: Python 2.7 is not recommended. This version is included in macOS for compatibility with legacy software. Future versions of macOS will not include Python 2.7. Instead, it is recommended that you transition to using 'python3' from within Terminal.
こちらを参考に。
台風がちょっと楽しくなる?
今年も台風シーズンがやってきましたね。台風が好きな人はそう多くはないと思いますし、身の安全や食料の確保などいろいろやらなければならないことは多いですよね。でもエンジニアなら、気圧計も作って設置しておきましょう。
材料はこちら。まずM5StickC。
コンパクトでディスプレイがついているマイコンで、今回はディスプレイに気圧を表示させつつ、クラウドにデータを飛ばすような実装をしてみようと思います。
そして、気圧センサーはBMP280を使います。
気圧センサーといえばおなじみのモジュールになります。モジュールのVCC、GND、SCL、SDAをそれぞれM5StickCの3.3V、GND、26、0のピンに接続しておきます。
M5StickCなのでUI FLOWでもコーディングできると思いますが、既存の豊富なライブラリを使うためにArduino IDEでコーディングしていきます。また、今回はデータをAmbientに飛ばして可視化してみようと思います。(いつもお世話になってます!)
#include <Ambient.h> #include <Adafruit_BMP280.h> #include <Wire.h> #include <M5StickC.h> #define INTERVAL 5*60*1000 #define MY_SSID "xxxxx" #define MY_PW "xxxxx" #define ID xxxxx #define KEY "xxxxx" Adafruit_BMP280 bme; WiFiClient client; Ambient ambient; void setup() { M5.begin(); M5.Lcd.setRotation(3); WiFi.begin(MY_SSID, MY_PW); M5.Lcd.print("Connecting"); while (WiFi.status() != WL_CONNECTED) { M5.Lcd.print("."); } Wire.begin(0, 26); while (!bme.begin(0x76)) { M5.Lcd.println("BMP280 init fail"); } ambient.begin(ID, KEY, &client); } void loop() { M5.Lcd.fillScreen(BLACK); float pressure = bme.readPressure(); M5.Lcd.setCursor(0, 0); M5.Lcd.setTextFont(4); M5.Lcd.setTextSize(1); M5.Lcd.print("pressure[hPa]"); M5.Lcd.setCursor(0, 26); M5.Lcd.setTextFont(7); M5.Lcd.setTextSize(1); M5.Lcd.printf("%4.0fhPa", pressure / 100); ambient.set(1, pressure / 100); ambient.send(); delay(INTERVAL); }
M5StickCはArduino IDE向けにもライブラリがあり、面倒なWi−Fi接続やディスプレイ操作が簡単にできるのでサクッとコーディングできますね。
こんな感じで自宅の2階の壁に貼って観察を監視します。
台風が来る前に気圧計を設置しましたが、1012hPa前後からスタートし台風接近とともにみるみる気圧が低下。
ついに994hPA前後まで到達。
今回は台風がそこまで接近しなかったこともあり994hPa止まりでしたが、2年前の台風のときは968hPaまで低下しました。
台風は恐ろしいものではありますが、こんな感じで自然現象をデータで可視化できると、ちょっと台風が楽しくなる?…なりませんね(笑)
父は減速現示が好き。
息子が日本信号の鉄道用信号機のガチャガチャを見てから、信号機がほしいと言って聞かないわけです。
まぁ、無いなら作ればいい。ということで、今回は4灯式信号機を作ってみます。
イメージはこんな感じ。進行、減速、注意、停止の現示が可能な信号機を作ります。
なにはともあれ、信号っぽいガワを作っていきます。
Fusion 360で、信号機本体にひさしをくっつけて、それっぽくしていきます。今回は、めんどくさいので信号機の裏側や支柱などは作らないでおきます。
今回使用する光源はNeoPixelのLEDテープを使います。
普通のLEDを使ってもいいんですが、抵抗を挟んだりするのが面倒なのと、配線も複雑になるので、今回はこのNeoPixel系のLEDテープを使います。これだと、GND、電源、信号線の3つだけ繋げば動作させる事ができます。
こんな感じです。
LEDテープはLED4つ分のところでハサミで切って使用しています。GND・電源・信号の線をArduinoのピンに接続していきますが、信号の線は5Vピンに近いA0ピンにさしています。
NeoPixelの特徴でもあるんですが、色をRGBで指定するため、赤は良いとしても、黄色と青(緑)色は現物を見ながら調整しています。
// 黄色 255, 128, 0 // 青色 64, 255, 0
一旦は上記のようなRGB値にしています。
光を拡散させたかったので、透明のフィラメントでレンズを作り、LED部分を覆っています。
いい感じいい感じ。
信号機を綿棒の箱に輪ゴムでくっつけて、早速息子氏に遊ばせてみました。2.5秒ごとに信号が節操なく変わるようにプログラミングしてしまったので、若干ビジーかなと思ったんですが、息子的には代わる代わる信号が変わって面白そうな様子でした。
ひとしきり遊んだあとに、息子氏が「中継信号機と踏切も」と言い出したので、おいおいそちらも着手しようと思います(笑)
#include <Adafruit_NeoPixel.h> Adafruit_NeoPixel pixels = Adafruit_NeoPixel(4, A0, NEO_GRB + NEO_KHZ800); void setup() { pixels.begin(); } void loop() { for(int i = 0; i < 4; i++){ switchSignal(i); delay(2500); } } // 0:停止 1:注意 2:減速 3:進行 void switchSignal(int i){ long light1[4] = {pixels.Color(0, 0, 0),pixels.Color(0, 0, 0),pixels.Color(255, 128, 0),pixels.Color(0, 0, 0)}; long light2[4] = {pixels.Color(255, 0, 0),pixels.Color(0, 0, 0),pixels.Color(0, 0, 0),pixels.Color(0, 0, 0)}; long light3[4] = {pixels.Color(0, 0, 0),pixels.Color(255, 128, 0),pixels.Color(0, 0, 0),pixels.Color(0, 0, 0)}; long light4[4] = {pixels.Color(0, 0, 0),pixels.Color(0, 0, 0),pixels.Color(64, 255, 0),pixels.Color(64, 255, 0)}; pixels.setPixelColor(0, light4[i]); pixels.setPixelColor(1, light3[i]); pixels.setPixelColor(2, light2[i]); pixels.setPixelColor(3, light1[i]); pixels.show(); }
ろーーーむ!
オーディオメーカーSonosから発売されたポータブルスピーカーというやつです。
以前参加したSonosのイベントを発端に、だんだんSonosにハマってきてしまったわけですね。はい。
今回のRoamは最近日本で発売されたばかりなんですが…。
ヨドバシさんで先行販売らしく…。
ほう…、オンラインストアでも買えるのね…。
で、気づいたら自宅にあった、というわけです。
箱に布製の「とって」みたいなものが付いてるんですよね。
波平さんみたいで可愛いですよね(そこじゃない)。
箱の中はこんな感じ。毎度おなじみの不織布で包まれています。
不織布の中には、この色白の子。
裏側にはType-Cの充電ポートと、電源ボタンっぽいやつ。
操作系はすべてスピーカーの上側(?)にまとまっています。ボタン類は他のSonos製品と同じような感じで、UXも同じような感じなので、マニュアルを読まずに使い始められるのがいいですね。
Roamはポータブルスピーカーであって、Wi−FiだけでなくBTにも対応しているのが特異的な部分であることは承知をしていますが、ひとまず家の中で使ってみます。あくまでもSonosのスピーカーであることには変わりないので、Wi−Fi接続をして他のSonosスピーカーと連携することもできるのがすごいところです。
こちらは弊家のリビングの間取りと、既存のSonosスピーカーたち。普段は3つのOneを連携させて音楽を聞いています。(訳あって、PlaybarはTVと接続し、独立して使っています)
まずはWFH中の音楽鑑賞。手元にRoamを置いて、3つのOneとRoamを連携させて音楽を聞いてみました。
もともとWFHしている場所が部屋の端によっているため、最適なリスニングポジションではなかったものの、手元にRoamを置いたことで、
上の2つがうまい塩梅で両立しているような環境となりました。また、コンパクトなRoamのおかげで、机の上に置いても邪魔にならない感じが非常に良いです。
次に同様にOne 3つと連携させたまま、Roamをキッチンに持っていってみます。というのも、間取りの関係で、リビングの3つのOneの音楽がキッチンでは聞きづらいと常々感じていたものの、キッチンのためだけにOneを増設するのも微妙かなと思っていたわけです。
Roamはバッテリー内蔵で、先述の通りコンパクト。しかも縦置きもできるので、我が家の狭いキッチンでも置き場に困りません。そして、コンパクトなのにパワフルな音を出せるので、意外と音がうるさい料理中もしっかり音楽に没頭(料理も頑張ってますが)できました。リビングに行っても、キッチンに戻っても、シームレスに音楽が聞ける体験は、本当に素晴らしいですねぇ。そして、必要なときだけ持っていけるのは、ポータブルスピーカーならではのメリットですね。
サマるとこんな感じでしょうか。屋外でのレビューはまた今度!