ジャンクや中古パーツで自作PCを作ってみた-その1-
昔から自作PCに憧れがありました。自分でこだわってパーツを用意してそれを合わせることで自分好みのPCができるのって素敵ですよね。
とはいえいきなり新品のパーツを組むのは失敗したときにすごい損する気がします。
なので中古やジャンクのパーツを集めれば格安で自作PCができて壊れても安心です。
物色
というわけで大須の中古PCショップのパウに行ってきました。
電子工作部品を買い集めていたときに偶然見つけたのですが、土日に行くとCPUガチャをやっていて名古屋のPC好きにはたまらないお店だと思います。
ちなみに店舗が入居しているアメ横ビルにはツクモも入っているので新品のPCパーツを求めているならそっちに行くのがいいです。
で、パウであれこれパーツを物色した結果最初の自作PCなので確実に動かす動作確認済みの中古のマザボとCPUとメモリを最初に買いました。
いつか自作PC作りたいと思いながらパーツだけは確保した。
— K.Miura (@k_miura_io) 2021年6月20日
CPUもi7 2700kを選んでメモリは8GB2枚だからちゃんと動いたらかなり格安でハイスペックPC作れそうそのためにもほかに必要になるパーツ調査せねば#パウもりあげ隊 pic.twitter.com/oboFKtWf4w
こうやって見ると思ったより値段がかかりましたね。まぁ初めてPC組むくせにi7使うのもどうかなとは思いましたがガラスケースに置かれてたCPUを見てたらつい惹きつけられたんですよね…
そしてメモリーも便乗していいヤツを選んでしまいました。
ジャンクセールで爆買い
当然ですがこれだけではまだPCが動かなくて後は電源を用意すればBIOSは開けます。
というわけでまた物色に行こうと思ったのですが、ちょうど先日パウでは年に一度(?)のジャンクセールが開催されました。
他のパーツはどうせならここで買うか!ということで張り切ってジャンクセールに出向きましたがものすごい人だかりでした。
このご時世にはよろしくない景色ですw。
タイムセール~
— 大須パソコンショップ パウ (@OSU_PC_SHOP_PAW) 2021年7月4日
色々値下げ中!!
まとめ買い、値下げ交渉OK!!
てんちょー相手に値切って見てね(*^^*)
後「水」も無料配布しているのでお持ち帰りください pic.twitter.com/AGPw0mgdYs
もしかしたら掘り出しものに出会えるかもしれないと思い2日間通いましたが、なんとか電源を入手できました。
そしてタイムセールにつられてSATAケーブルとHDDも買い占めました。
今回の戦利品
— K.Miura (@k_miura_io) 2021年7月4日
閉店間際のタイムセールでSATAケーブルがまとめて150円になった瞬間に勝ち取ることができたのとハードディスクが安くゲットできたのがポイント。
袋とマザボが壊れないか帰りの電車で心配してたw#パウ盛り上げ隊 pic.twitter.com/qBHBqUlSl2
このツイートに載せているのはほんの一部でこの他にもグラボも買いました。
そんな苦労もあってなんとかPC動かすための最低限の用意は整いました。
組み立て
パーツも揃ったところで組み立てを始めていきます。
今回の目標としては最小構成で組み立ててBIOSが起動できることにします。
使うパーツはこんな感じです。
使うCPUやマザボによっては内蔵グラフィックがないので画面表示のためにグラボが必要だったりしますが、今回は特に気にする必要はなさそうです。
まずはCPUを取り付けます。CPUの両脇にあるくぼみとソケットの突起をあわせてそっと乗せるだけです。
後はCPUカバーを取り付けてグリスを塗りたぐります。
ちなみにこのグリスはパウのガチャガチャでゲットしたもので、グリスを塗るための指サックもついてるお得なやつです。
グリスは使い切りタイプなので、頻繁にPC組み立てることがなければこれで十分でしょう。
グリスを塗ったら上からCPUファンをかぶせます。CPUファンって固定するとき結構クセがありますよね。
メモリーを挿します。最大で2本挿せますが、動作確認用にとりあえず1本だけ挿してみます。
今回は基板むき出しの状態で動作確認をするので、電源を入れるときはフロントパネルの電源ピンをショートさせる必要があります。
というわけでマニュアルでピン配置を調べて電源ピンにあたる箇所にジャンパーケーブルを挿しました。
これで電源を入れるときの目印にもなってだいぶ楽になりました。
後は電源を諸々の端子に接続して完成です。
いざ動作確認
組み立てが終わったところでモニターをつないで動作確認です。
が、全く動かない…
何度か起動し直してみましたがだめでした。
何が原因あるんだろう…と思いながらその日は一旦切り上げました。
原因を探る
後日何が原因か考えてみましたが、いくつか心当たりがありました。
- CPUクーラーがちゃんと固定されていない
- メモリがちゃんと挿せてない
- メモリが不足(一本でも動かせていたっぽいから多分違う)
CPUクーラが刺さってないせいでCPUが冷却されなくて熱暴走をおこしたと考えることもできますし、メモリも奥まで挿せてなかったのも考えられます。
メモリは1本でも動かせますが、もしかしたら指す位置が違ってて動かせなかった可能性もあるので保険でもう1本挿しました。
再度確認
とりあえず考えられる原因を解消して再度セッティングをしました。
これが動かなかったらどうしよう…と思ってドキドキしながら電源を入れました。
すると、無事に起動して画面が表示されました!
ジャンクや中古パーツだけでパソコン組んだら画面が表示された!
— K.Miura (@k_miura_io) 2021年7月6日
パーツ揃えば意外と動くもんだな#パウもりあげ隊 pic.twitter.com/fmYavAjmo7
とりあえずすぐに解決するような問題でよかったです。
そして時計は狂ってましたが、現在時刻に直せば大丈夫そうでした(次に狂ってたらボタン電池交換したほうがいいかな…)
時間めっちゃずれてるけどちゃんとCPUとメモリは認識してる!
— K.Miura (@k_miura_io) 2021年7月6日
キーボードも動くし成功だな! pic.twitter.com/7eUnX5meN0
これで自作PCづくりの第一歩を踏み出せた気がします。あとは、ストレージを載せてケースに収納すれば実用性のあるPCの完成です。
ケースはまだ買ってませんが、どうせなら中古で良さそうなやつを探そうと思います。
つづく
【続きはこちら】
SORACOM ArcでiPhoneをつないでみた
前回SORACOM Arcを使ってWifi経由でRaspberry PiをSORACOMのプラットフォームに接続してみました。
これで、SIMがなくてSORACOMを試せないという課題を解消できました。
がまだまだ課題があります。
それはRapsberry Piやセンサーを誰もが持っているわけではないということです。IoTに興味があってもなかなか始められない…という人たちもいるわけなのでそれを解決せねばなりません。
そうは言ってもIoTでセンサーがなければ意味がないといえばそれまでですけど、今どきセンサーだって仮想で作ることは出来てしまいます。
そして、その仮想センサーを手元のスマホで動かして仮想IoTデバイスに見立ててれば物理センサーがない問題を解決してシステムの全体像を理解しやすいわけです。
というわけで今回はSORACOM Arcを利用してiPhoneをSORACOMのプラットフォームに接続する方法を試してみます。
用意するもの
バーチャルSIMの作成
前回Rapsberry Piで試したときにはsoratunを使ってバーチャルSIMの作成が出来ましたが、今回はスマホで使うバーチャルSIMを用意するためSORACOMのコンソールから操作をしていきます。
始める前にSIM管理画面が以下の表示になっている場合はWiregruadの接続情報を登録するときに面倒なので、新しい画面に切り替えておきましょう。(以降の作業は新しいSIM管理画面に対応しています)
ユーザーコンソール画面からSIM登録
をクリックします。
バーチャルSIMを登録
タブをクリックして、登録
ボタンをクリックします。
登録の前に画面の注意事項はよく確認しましょう。
登録を終えたらSIM IDとWiregruadの接続情報が表示されます。
この中のPrivateKey
はSIMを作成したときにだけ確認できるので、Wiregruadの接続情報はどこかにメモしておきます。
コピーを終えたら終了して元の画面に戻る
をクリックして登録を終えます。
iPhoneをSORACOMのプラットフォームへ接続
WireGuardクライアントをインストール
これで接続情報を用意できたのでiPhoneに接続するための準備をします。
以下のリンクからWireGuardのクライアントをお使いのOSに合わせてインストールします。
WireGuardアプリを起動するとトンネルの追加
ボタンで接続情報を登録することができます。
登録方法はいくつかありますが、iPhoneで設定を登録するときに一番簡単な方法はQRコードを読み込んで登録する方法です。
ただ、今はそのQRコードがないので今度はそのQRコードを作っていきます。
QRコードを作成
それではQRコードを作成するために以下のサイトを使います。
FREE TEXT
タブをクリックして先程メモした接続情報を貼り付けます。
すると接続情報が書き込まれたQRコードが生成されます。
iPhoneに接続情報を登録
WireGuardアプリを起動してトンネルの追加
ボタンをタップしてQRコードから作成
からQRコードリーダーを立ち上げます。
QRコードリーダーで先程作成したQRコードを読み込むと以下のダイアログが表示されるので接続設定を管理できるように任意の接続名を設定します。
設定後VPNの構成を追加するか聞かれるので許可
をタップします。
しばらくしたら接続設定の一覧に先程設定した接続が表示されていたら設定は完了です。
後は使いたいときに設定を有効にすればSORACOMのプラットフォームに接続できるようになります。
接続確認
いよいよ接続確認です。接続確認は例の如くping pong.soracom.io
を叩くのですが、iPhoneなのでコマンドが叩けません。
そこでiPhoneでpingを実行するアプリをダウンロードします。
色々ありますが、今回は「Network Ping Lite」をダウンロードします。
apps.apple.comダウンロードしたら、起動画面からping
をタップしてデフォルトで設定しているアドレスを消してpong.soracom.io
に書き換えてstart
をタップします。
実行後以下のようにSORACOMのプラットフォームからの応答があれば無事にSIMを使わずにiPhoneをSORACOMのプラットフォームに接続できています。
まとめ
今回はSORACOM Arcを使ってiPhoneをつないでみました。
これでスマホで仮想のIoTデバイスを用意してIoTシステムのプロトタイピングを加速します。
これでSORACOMを使ったオンラインハンズオンでデバイスが手元にない問題が解決することは間違い無いでしょうね。(なんかのフラグかなw)
SORACOM ArcをRaspberry Piで試してみた
先日ソラコムのカンファレンス「SORACOM Discovery 2021」にて非常に素敵な新サービスが発表されました。
その名もSORACOM Arc
今までのSORACOMを使ったIoTシステム開発ではSORACOMが提供するSIMカードやデバイスありきでIoTシステム構築をする必要がありました。
ところが、このSORACOM Arcを使えばそのようなデバイスがなくてもWifiや有線経由でSORACOMのシステムにアクセスすることができるようになります。
つまり、手元にあるデバイスをSORACOMのシステムと連携させてIoTのプロトタイピングを簡単にするということなんです!
もうSORACOMのSIMを注文を待って技術検証する必要がなくなるわけですね。
というわけで今回はリリースしたばかりのSORACOM ArcをRaspberry Piで使えるようにセットアップして動かしてみました。
用意するもの
- Raspberry Pi 3 Model B (OSはRaspbian buster)
- Grove Base HAT for Raspberry Pi
- Grove Temperature&Humidity Sensor
soratunのインストール
まずは、soratunをインストールします。
soratunを使えばバーチャルSIMの作成から接続までのサポートを行うクライアントエージェントです。
以下のダウンロードページの中でRaspberry Pi向けの実行ファイルをダウンロードします。
[vesion]
はダウンロードするバージョンによって異なります。
ダウンロードするファイル名は、soratun_[version]_linux_armv7.tar.gz
です。
ダウンロードするファイルのリンクをコピーして以下のコマンドを実行します
wget https://github.com/soracom/soratun/releases/download/v[version]/soratun_[version]_linux_armv7.tar.gz
ダウンロードしたtar.gzファイルを以下のコマンドで展開します。
tar xvf soratun_[version]_linux_armv7.tar.gz
展開したフォルダ内にあるsoratunの実行ファイルをシステム上のディレクトリにコピーします。
sudo cp soratun_[version]_linux_armv7/soratun /usr/local/bin/
これでインストールは完了です。あとは以下のコマンドを実行してエラーが出ずにsoratunのヘルプが表示されたらコマンドが正常に機能しています。
soratun --help
ブートストラップ
さて、soratunのインストールを済ませたら今度はsoratunでSORACOMのサービスに接続するためにブートストラップを行います。
ブートストラップとはデバイス側から新しいバーチャル SIM/Subscriber を作成することを指します(ドキュメントからまんま引用)。
ブートストラップを行うには3つの方法がありますが、今回はSIMがなくてもできるSORACOM API の認証キーを使用したブートストラップ
をやってみます。
SAMユーザを作成
SORACOMのユーザーコンソールを開き右上のアカウントのボタンをクリックしてセキュリティ
をクリックします。
SORACOM Access Management (SAM) ユーザーの一覧ページがあるので、新規でSAMユーザーを作成します。
名前と概要の設定が出てきますが、ここは適当なものを設定します。迷ったら下記のやつを真似してもOKです
作成できたら今度はSAMユーザーにアクセス権限や認証キーを設定します。
先程作成したSAMユーザーをクリックして、ユーザー権限の設定画面を開きます。
権限設定
権限はドキュメントにあった以下の最低限の構成をコピペします。
右側のドキュメントには用途に応じた権限のテンプレートがあるようですが、いつかArcのテンプレも追加されるといいですね
{ "statements": [ { "api": ["Sim:createSim", "Sim:createArcSession"], "effect": "allow" } ] }
以下のように設定できたら保存
ボタンをクリックして設定を保存しちゃいましょう
認証設定
今度は認証設定を行います。
認証設定タブをクリックして認証キーを生成
をクリックします。
クリックされると以下のダイアログが出ます。ダイアログの注意にもある通り、認証キーシークレットは一度ダイアログを閉じると再確認出来ないので、クリップボードにコピー
をクリックして手元にメモしておきましょう。
ちなみに、クリップボードにコピーされた文字列はコンマ区切りなので、ファイルで保存するときにはCSV形式で保存すると後で見やすくなります。
ブートストラップの実行
SAMユーザーを作成したところでブートストラップを実行します。
ブートストラップは以下のコマンドで実行します。
arc.json
とはSORACOM Arcの設定ファイルでブートストラップを実行したときに作成されます。
SAMユーザーを変更するようなことがなければこの作業は1回だけやれば良さそうです
soratun --config ~/arc.json bootstrap authkey
コマンドを実行するといくつか質問が来ます。
最初の質問では認証キーIDを入力します。認証キーIDはkeyId-
から始まる文字列です。
✗ SORACOM API auth key ID (starts with "keyId-"):
次の質問では認証キーシークレットを入力します。認証キーシークレットはsecret-
から始まる文字列です。
✗ SORACOM API auth key (starts with "secret-"):
今度はバーチャルSIMを作成するカバレッジを選択します。今回はJapan coverage
を選択します。
Use the arrow keys to navigate: ↓ ↑ → ← ? Coverage to create a new virtual SIM: ▸ Global coverage (g.api.soracom.io) Japan coverage (api.soracom.io)
実行後に以下のようにバーチャルSIM IDができて、arc.json
の保存先のパスが表示されたらブートストラップは完了です。
Virtual subscriber SIM ID: 1234567890 Created/updated configuration file: /home/pi/arc.json
接続確認
それでは接続確認です。soratunを使ってsoracomのプラットフォームに接続するには以下のコマンドを使います。
sudo soratun --config ~/arc.json up
実行するとログが表示されるので、ちゃんと接続できるか別ターミナルで以下のコマンドを実行します。
ping pong.soracom.io
無事に応答が返っていればSORACOMのプラットフォームに接続出来ています。
systemdを使う
ここは必須ではありませんが、Raspberry Piを立ち上げたときにSORACOMの接続をするためには、systemdを使う方法があります。
そしてそのserviceファイルはなんと先程ダウンロードしたsoratunの実行ファイル一式の中のsoratun_[version]_linux_armv7/soratun.service.sample
に入っています。
なので、以下のコマンドでserviceファイルを保管しておきます。
sudo cp soratun_[version]_linux_armv7/conf/soratun.service.sample /etc/systemd/system/soratun.service
あと、設定ファイルの内容に合わせてarc.json
も以下のコマンドでコピーしておきます。
sudo cp arc.json /etc/
以下のコマンドでsoratun.serviceを立ち上げます。
sudo systemctl start soratun.service
立ち上げた後にping pong.soracom.io
を実行してシステムから応答があればサービスは正常に起動しています。
この時点でバックグラウンドで起動しているのでこの先の作業はターミナル一つだけでできるようになります。
Raspberry Piの起動時にsoratunを立ち上げるには以下のコマンドを実行してデーモンに登録します。
sudo systemctl enable soratun.service
センサーデータを送信する
これでSIMを使わずにRaspberry PiをSORACOMのプラットフォームに接続ができるようになりました。
ということでここからRaspberry Piでとったセンサーの値をSORACOM Harvest Dataに送信してみます。
SIMグループの作成
SORACOMのコンソール画面にあるSIMの一覧で先ほど作成したバーチャルSIMには名前が何もありません。
なので作業するときにSIMの管理をしやすくするために名前をつけておきましょう。
名前の項目にマウスカーソルを当てると名前が設定できるようになるので、そこで変更が出来ます。
これでSIMの名前を変更したのでここからSIMグループを作成します。
SIMの一覧画面から先程作成したバーチャルSIMを選択して詳細
ボタンをクリックします。
SIMの詳細画面が開くのでグループのセレクトボックスから新しいグループを作成
をクリックします。
グループ名の入力が要求されるので任意の名前を設定します。
作成が完了してグループ名に設定した名前が表示されたらグループの作成は完了です。
SORACOM Harvest Dataを有効にする
作成したSIMグループでSORACOM Harvest Dataを使えるように設定します。
Menu → SIMグループ
から先程作成したSIMグループを選択してSORACOM Harvest Data
をONにして保存します。
センサーの接続
Grove Base HATをRaspberry Piに取り付けたら、温湿度センサーは12, 11ピンに接続します。
プログラムの作成
次にRaspberry Piでセンサーの値をHarvestに送信するプログラムを用意します。
以下のコードをRaspberry Pi上の任意のディレクトリに保存します。
# coding: utf-8 import time import seeed_dht import requests sensor = seeed_dht.DHT('11', 12) while True: humi, temp = sensor.read() if not humi is None: print('Humidity: {0:.1f}%, Temperature: {1:.1f}'.format(humi, temp)) data = {'Humidity': humi, 'Temperature': temp} res = requests.post('http://harvest.soracom.io', json=data) print(res.status_code) else: print("None") time.sleep(30)
このプログラムを実行するときに使うライブラリを以下のコマンドでインストールします
sudo pip3 install seeed-python-dht
動作確認
いよいよ動作確認です。以下のコマンドで先程作成したプログラムを起動します。
python3 send_harvest.py
実行後、センサーの値が表示されてステータスコードが201
と表示されていたらSORACOMにデータ送信は出来ています。
ちゃんとデータが保存できてるか確認
それではちゃんとデータが取れているかを確認してみます。
コンソール画面のSIM一覧からSIMを選択して、操作 → データを確認
で開きます。
以下のようにデータの確認画面が表示されてセンサーデータのグラフが表示されたらデータが正常に保存されています。
まとめ
今回はSORACOM Arcを使ってRaspberry Piからセンサーの値を送信してみました。
SORACOM ArcはSORACOM Discoveryでも話していた「IoTの民主化」を体現された究極のサービスと言っても過言ではありません。
そしてsoratunを使えば面倒な通信の設定がコマンド操作だけであっという間に終わってしまうのでめちゃくちゃ便利です。
これさえあればSORACOMのサービスと連携したIoT開発がより手軽になって「IoTの民主化」がさらに加速していくことでしょう!
AWSのLightsailを使ってドメインを設定してみた
以前Lightsailを使ってVPNサーバーを用意しました。
あれから数ヶ月経ち結局Clubhouse自体起動することもなくなってもう使うことがなくなったので、この時作ったVPNサーバーは削除しましたw。
で、最近とある案件でアプリを作成することになりそれを公開できるようにしようと考えて、いつもならHerokuを使うのですがなんとなくルーティンになってつまらない気がしました。
せっかくならAWSを使って、本格的なシステムのWebアプリケーションを作ってみたいと思ったわけです。となるEC2かな?となりますが、なんかハードルが高いし個人で運用するには見積もりがめんどくさそう…
そこで再びLightsailの出番です。Lightsailなら定額でアプリを運用できるので、個人開発で本格的なWebサービスを公開するには丁度いいです。
でサーバーの選定はこれで解決できますが、サービスを公開するために必要なのがアプリにアクセスするためのドメインです。
流石にサーバーのポート番号をそのまま公開するのは、その後の管理が辛いですしあまり聞きません。なのでDNSを使って独自でドメインを指定したいわけです。
AWSのサービスを使ってドメイン周りの設定だとRoute53が使われますが、LightsailにはDNSを管理する機能があり、それを使えばLightsailのインスタンスと接続するのが簡単にできます。
というわけで今回はLightsailを使ってドメインを設定してみたいと思います。
ドメインの取得
まずは今回使用するドメインを取得します。今回は無料でドメインを取得できるfreenomを使っていきます。
このサービスはオランダで提供されているドメインを発行するサービスです。
ドメインでよく使われるトップレベルドメインが.com
や.net
のものは有料ですが、それにこだわらなければ無料で作れます。
有効期限は1年ですが更新手続きをすれば簡単に更新できます。
以下のリンクから使いたいドメインで検索していきます。このときはログインをしなくても大丈夫です。
以下のスクショのように使いたいトップドメインを含めてドメイン検索をするとドメインを選択出来るようになります。
取得できるドメインであれば【チェックアウト】ボタンをクリックします。ここでログインをしてチェックアウトします。
アカウントを作成していない場合はここでアカウントを作成した後にチェックアウトします。
ドメインの設定
ドメインを取得出来たらここからLightsailでの作業になります。
前提条件として予めlightsailでnginxなどでWebサーバーの設定ができている状態だとします。
はじめ外部に公開するための静的IPを作成します。
Lightsailの【ネットワーキング】タブをクリックして、【静的IPの作成】をクリックします。
任意のリソース名を設定して【作成】をクリックします。
作成後にアタッチしたいインスタンスを選択します。
続いてDNSゾーンを設定します。
同じく【ネットワーキング】タブから【DNSゾーンの作成】をクリックします。
登録済みドメインに先程freenomで取得したドメインを記入します。記入したら一番下にある【DNSゾーンの作成】をクリックします。
ゾーンが作成されたらDNSレコードを設定します。
サブドメインには任意の名前、解決先は先程作成したインスタンスの静的IPを選択します。
DNSレコードの下に書かれた4行のネームサーバーは次のfreenomの設定で必要になるので、どこかにメモしておきます。
DNSサーバーの登録
再度freenomを開き、「services」→「My Domains」で取得したドメインが出てきます。
取得したドメインの「Manage Domain」でドメインの設定画面を開きます。
「Management Tools」→「Nameservers」をクリックします。
Use custom nameservers (enter below)
を選択して先程メモしたDNSサーバーを選択して【Change Nameservers】をクリックします。
これでドメインの設定が完了しました。あとはDNSレコードで設定したドメインをNginxなどのWebサーバーシステムに適用すれば、そのドメインでWebサービスに接続できるようになります。
obnizとNode-REDで自作スマートロックを作ってみた
スマートロック、便利ですよね。
最近では家で簡単に取り付けれるものが増えてきて価格もお手頃になりました。
ただ、こういうシステムっていざ買ったら全然サイズ合わなくて使えなかったって話をよく聞きますよね(僕も何度かそんな経験してます…)
それだったら最初から自分で作ったほうがいいじゃないって思ったわけです。
というわけで今回は家のスマートロックを作ってみました。
実は数年前から構想はあったのですが、やれずじまいでした。
ですが、今回は舞台が整ったので実行にうつします。
用意するもの
obnizが6000円ほどしますが、他を揃えても大体1万円前後で作れると思います。
僕はobnizを人からもらったのでobnizがタダになって、綿棒ケースとかサーボモータやモバイルバッテリーは家にあるものを使ったので、実際はつまみ回す器具を3Dプリンターで出力するのにお金を出費した程度なのでかなり安く作れたと思います。(3Dプリンターの出力はだいぶ前で覚えてないので実質タダで構築したようなものw)
配線
配線は以下の図のとおりです。
プログラム
ソフトはNode-REDを使いました。
obnizのAPIを叩くノードも使えますし、UIもダッシュボードを使って簡単にできるのでNode-REDだけでシステム構築ができるわけです。
何よりエッジ側に何もプログラムを書かなくてもいいのはいいですね。
そして実際用意したフローはめちゃくちゃシンプルです!
予めダッシュボードノードとobnizノードを用意しておきます。
obnizノードについてはこちらのブログで紹介しています。
obniz functionノードには以下のコードを使用します。
// サーボモータを動かす var servo = obniz.wired("ServoMotor", {gnd:0, vcc:1, signal:2}); servo.angle(msg.payload); // ディスプレイに状態を表示 var status = msg.payload == 85 ? 'Close' : 'Open'; obniz.display.clear(); obniz.display.print(status);
組み立てと取り付け
サーボモーターに付属しているパーツとツマミ回す器具をホットグルーでくっつけて後は綿棒ケースの底にサーボモータを差し込む穴を用意してネジで固定すれば組み立ては終わります。
後はドアに諸々を取り付ければ完成です。
見た目が凄くダサいw。
動作チェック
実際に動かしてみました。
サーボのトルクが心配でしたが、歯車がギシギシ言わずかなりスムーズに回ってくれました!
ついに我が家にスマートロックを導入した!#obniz と #NodeRed だけで組んだ超シンプルな構成。これでちゃんと運用できるかな? pic.twitter.com/BiQALOCRt5
— K.Miura (@k_miura_io) May 18, 2021
課題
実際に一日動かしてみて課題に感じたことをピックアップします。
綿棒ケースが外れる
これはサーボモーターとケースそのもの重みで下に落ちてしまうんですね。
なのでここは4箇所テープを貼って更にその周りを囲むように厳重に固定して落ちないようにしました。
つまみを回す器具が外れている
何度か使っていると気づいたらつまみが外れているせいで鍵が開かないことがありました。
これも上のように綿棒ケースが外れることでサーボモーターが回るのと同時に器具が外れてしまっていました。
なので綿棒ケースを厳重に固定したら外れることはなくなりました。
サーボモータが回らなくなる
綿棒ケースがしっかり固定されているのにも関わらずサーボモータが回らなくなるんですね。
これはError: No More pwm Available.
と表示されてサーボモータが制御不能になるっぽいです。
これはESP32に切り替えたほうがいいのかな…なんて思っていましたが、ドキュメントを見ているとPWMを切るメソッドがあるようです。
これを入れればいいと思ったのですが、obniz Functionで書いたコードは非同期で動くのでサーボモータが動く前にPWMが切れてしまいます。
そこで、obnizのwait関数を使ってサーボモータの動作が終わるまで処理を待つようにしてみました。
これらを踏まえて先程のfunctionノードのコードを修正したものがこちらです。
// サーボモータを動かす var servo = obniz.wired("ServoMotor", {gnd:0, vcc:1, signal:2}); servo.angle(msg.payload); // PWMを切る(New) await obniz.wait(500); servo.off(); // ディスプレイに状態を表示 var status = msg.payload == 90 ? 'Close' : 'Open'; obniz.display.clear(); obniz.display.print(status);
これで一連のフローが終わるとPWMがリセットされるので、サーボモーターの動作が安定するわけです。
まとめ
今までずっとやろうとしていたスマートロックをついに完成させました。
実際使ってみたからわかる課題があってそれを解決して今の所動作が安定するようになりました。
改めて作って動かしてみないとどこが行けないのかがわかるのはとてもいいなと思いました。
あとは家族が不安がっているので安心できるように安定動作できるようにしていきたいですね。
1週間M1 Macを使い続けた結果…
この記事はM1Mac触ってみたの7日目のエントリです
さて、今日は誕生日です。毎年子供の日に一つ歳を取る日々を送っております。
今日は天気が悪くておとなしく家でひたすらコード書いていました。
さて、M1のMacBook Airが届いて1週間が経ちました。
この1週間新しいMacBook AirをメインPCとして使っていての感想ですが…
すげー快適!!
もうこの一言につきます。最初は悪い話しか出てこなくてこれは買うべきか迷う…
なんて思っていましたが、つかってみるとかなり快適に使うことができて先代のMacBook Airとは比にならないぐらいパワフルなPCでした。(まぁ先代は9年前のモデルなので比べるのが野暮な気もしますがw。)
少なくともMacBook Proを買わなくて正解だったと思います。
パフォーマンス面
Chromeでタブをたくさん開いても動作がもっさりすることなくYouTubeもしっかり動きました。
更にDockerを長時間動かし続けていても動作が安定していました。
なおかつパソコン本体が熱くなることなく安定して動作していました。
CPU使用率もだいたい30% を切るぐらいで安定しているのはいいですね。
ただ、メモリーはChrome&Dockerを動かして7割近くですが普段開発する分にはそんなに困らないかなと言う感じです(今のところは)
気になるところ
ただひたすら「MacBook Proはいいぞ」といってましたが、気になることがあるとすればBluetoothの接続が不安定です。
これは、仕事で使っているIntel MacでもそうですがAppleはBluetoothに弱いのかなというのが気になりました。
ただ、つかっているフルワイヤレスイヤホンが安物だからそっちにも原因がある気がしますね…
それ以外は特に気になることはないので、MacBook Airを買ってよかったと思います。
M1 MacでDocker動かしてみた
この記事はM1Mac触ってみたの5日目のエントリです(3, 4日目は別ネタにするかスキップしますw)
MacBook Airが届いてセットアップができたので動作検証も兼ねて開発環境を整えて開発作業をしてみました。
最近自分でWebアプリを開発するときには、もっぱらDockerで環境構築をして仮想環境上で開発をすることが多いです。
特にDB周りはコンテナでまとめたほうが作り直しや掃除が簡単なので、めちゃめちゃ重宝してます。
そんなDockerですが、先日M1 Macで正式にサポートされるようになりました
これもあったのでM1のMacを買っても大丈夫だろうと革新をしていたわけです。
というわけで今回はM1 MacにDockerを入れて動かしてみたのでそのレビューです。
インストール
インストールは以下のURLからできます。
ダウンロードボタンにカーソルを当てると各OSに合わせたインストーラーを選択できるようになっているのでDownload for Mac - Apple Chip
を選択してダウンロードします。
ダウンロードしたインストーラでインストールします。
とりあえず動かしてみた
ダウンロードが終わり初回起動すると出てくるコマンドを実行してみます。
docker run -dp 80:80 docker/getting-started
最近正式にサポートされるようになってM1MacでDockerがちゃんと起動できるようになった!
— K.Miura (@k_miura_io) 2021年4月29日
俺的にはDockerが動けば無問題である。
VS CodeとiTermもセットアップできたしひとまず開発環境構築は整ったことになるだろう pic.twitter.com/zvzYoFqAiP
ブラウザでlocalhost
を開くとページがちゃんと開きました。
開発環境を構築してみた
以下のコンテナを組みわせてDjangoの環境構築を構築してみました。
本当はMySQLを使おうとしましたがAppleシリコンだとオプションを入れてセットアップしないといけないっぽいので面倒だと感じたのでAppleシリコンでも使えるmariadbで代用しました。
設定やポートはMySQLと同じものが使えたので良かったです。
構築はdocker-composeをつかってやってみました。
参考までにyamlファイルはこんな感じです。
version: '3' services: db: image: mariadb:10.1 ports: - "3306:3306" environment: MYSQL_DATABASE: app-db MYSQL_ROOT_USER: root MYSQL_ROOT_PASSWORD: admin TZ: 'Asia/Tokyo' app: build: . command: python3 manage.py runserver 0.0.0.0:8000 volumes: - ./app:/code ports: - "8000:8000" depends_on: - db
後、アプリ側のDockerfileはこんな感じです。
# syntax=docker/dockerfile:1 FROM python:3 ENV PYTHONUNBUFFERED=1 WORKDIR /code COPY requirements.txt /code/ RUN pip install -r requirements.txt COPY . /code/
これらを用意してdocker-compose build
してからdocker-compose up
すると普通にアプリが起動できました。
ただ、これはDockerの挙動が原因かコンテナの挙動が原因かわかりませんが、アプリの動作が重く感じました。
リクエスト投げてもレスポンスが遅かったのが気になりました。
Djangoを使っているので仕方ないのかもしれませんね…
まぁあくまで開発環境なのでそこまで気にすることではないかと(と信じたい)