RaspberryPiへのOctoPrintの導入
何ができた
RaspberryPiへOctoPrintを導入することで、PCからWiFi経由でデータを送れるようになり、3Dプリンターの置き場所が自由になった。
OctoPrintとは
多くの機種に対応した、Webインターフェイスで3Dプリンターをコントロールできるオープンソースのシステム
RaspberryPi向けにはOctoPiという専用OSイメージが提供されており、SDカードに書き込んでいくつかのセットアップだけで使えるようになっている、らしい
しかし、専用イメージに抵抗があったのでRaspberry Pi OSにOctoPrintを追加する形で導入してみた記録
方針
ソースからビルドする手もあるが、pipで取得できるようなので、pipenvで環境を作ってそこにインストールする。
pipenvを使ったのは最近仕事の方で知ってちょっと使ってみようと思ったからで、今回の用途ならvenvだけでもよかった。
バージョン確認
$ python --version Python 3.9.2 $ pip --version pip 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9) $ uname -a Linux raspberrypi3a 6.1.21-v7+ #1642 SMP Mon Apr 3 17:20:52 BST 2023 armv7l GNU/Linux $ cat /etc/os-release | grep PRETTY PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"
ここはRaspberry Pi OSじゃなくRaspbianのままだった
ラズパイの機種はホスト名が示す通りRaspberry Pi 3A+
USBが1つしかなくLANポートもないがWiFi経由のアクセスのみでキーボードも繋がないならコストパフォーマンスもよくてちょうどいいので半年ほど前に購入。
日本ではあまり売れていないとのことだが、Pi4等が品薄な頃にも秋月やスイッチサイエンスで在庫があった。
手順
- OSを更新
- pipenvインストール
- OctoPrint用環境作成
- OctoPrintインストール
- 起動、アクセス
- 自動起動
OSを更新
sudo apt update sudo apt upgrade
pipenvインストール
pip install pipenv echo export PATH=/home/user/.local/bin:$PATH >> ~/.bashrc source ~/.bashrc
OctoPrint用環境作成
mkdir OctoPrint cd OctoPrint PIPENV_VENV_IN_PROJECT=1 pipenv install
環境に入る
pipenv shell または source .venv/bin/activate
OctoPrintインストール
最初インストール途中でエラーで停止したので、必要なものを先にインストールしてからpipenv環境にoctoprintをインストール
sudo apt install build-essential sudo apt install libffi-dev pipenv install octoprint
ユーザーがデバイスにアクセスできるように権限を設定
sudo usermod -a -G tty user sudo usermod -a -G dialout user
起動、アクセス
octoprint serve
http://raspberrypi3a.local:5000/ へアクセス
名前ではIPがうまく引けない時があるのでその際はifconfig
でIPを確認して以下のように
http://192.168.1.25:5000/
自動起動
自動起動用のUnitファイルをダウンロードして環境に合わせて書き換えて登録
wget https://github.com/OctoPrint/OctoPrint/raw/master/scripts/octoprint.service vim octoprint.service sudo mv octoprint.service /etc/systemd/system/octoprint.service sudo systemctl enable octoprint.service
エラーで起動が失敗していたので以下で状況を確認。実行ファイルのパスが間違っていたり等
sudo systemctl status octoprint.service journalctl -xe
まとめ
WiFi内蔵のRaspberryPiにOctoPrintを導入することで、 以前はUSBケーブルでPCに接続していたため置き場所が限られたが、WiFiの接続と電源さえ確保できればどこでも置けるようになった。
以上
3Dプリンター始める際にした準備
Makuakeのクラウドファンディングでプロジェクトに支援という形で購入したGoofoo CUBE
2022年5月に入金して届いたのが9月初めだったので、待ち時間が長かったがその分準備もできた。
- スライサーの準備
- CADの準備
- フィラメントの準備
- 補助的なツール等の準備
スライサーはUltimaker Cura
CADはFusion360の非商用ライセンス
フィラメントはPLAしかほぼ選択肢は無かったが、蓄光して暗闇で光るタイプと500gずつ4つのセットのものを購入
補助的なツールとしてはマスキングテープとスティックのり、シール剥がしカッター、それに除湿保存用の100均ケースと少し大型のケース、乾燥剤としてシリカゲル1kg
これだけの準備だけで最初1ヶ月半ほどは使っていた。
2023/09 追記
今も使用しているものはあまり変わっていないが、フィラメントはだいぶ増えた。
スティックのりはちょくちょく使っているが、マスキングテープはほぼ使わなくなった。
また、モデルを編集するためにAutodeskのMeshmixerを補助として使うようになった。既存のモデルのちょっとした編集ならこちらの方が軽くて使いやすい。
RaspberryPi+Alexa連携模索(Node-Redインストール編)
最近、Nature Remo mini 2を導入した
- Alexaと連携して声でテレビをコントロールできるように!
- 時刻や温度をトリガにした寝室のエアコンの制御が可能に!
ところが問題があって
- 寝室と居間、両方はカバーできない
- かといって、寝室のエアコンを消したら居間に移動するとかは本末転倒
というわけで、
以前からやりたかった[RaspberryPiでの学習リモコン]と連携して居間をカバーできないか、というのが今回の動機
用意したもの
初代RaspberryPi
長いこと引き出しで眠っていたが、最近稼働を再開
- CPU: ARM1コア
- メモリ: 512MB
Node-Red
GUIでのワイヤー接続とプロパティ設定でコーディングなしでいろいろできるやつ。定番?
他の検討サービスは下に挙げているがひとまずこれをいじってみようとしたのだが、
問題発生
- RaspberryPiのCPUアーキテクチャARMv6lに対して、Node.jsがオフィシャルにサポートしているのはv11まで
- Node-RedのインストールにNode.js v12以降が必要
解決策?
調べていたらNodeのUnofficialなビルドがあるとわかりそれを利用してみることに
ARMv6のRaspberry Pi(Gen1, Zero)でも最新版のNode.jsが使いたい! ~nを使って入れてみる~
ラズパイにNode.jsをインストールするときは「n」を使うな
Node-Redインストール手順
- 既存のNode(v10)をアンインストール
- Nodeのアンオフィシャルビルド(v12)をインストール
- Node-Redをインストール
まずNodeのインストールを以下のページの手順に従いUnofficialビルドで進めていく
ARMv6機のRaspbian(Stretch)にnpmコマンドをインストール - Qiita
使用したUnofficialイメージはここから
最初に既存のNodeをアンインストール
sudo apt remove nodejs
アンインストールの表示を見ていたらNode-Redが一緒に削除されていて、あれ~?だったが、 Node-Redのページではaptのパッケージでのインストールは非推奨とあったので気にせずそのまま継続。 (本当はすごく気になっているので余裕があれば確認したい)
Unofficialなビルドをダウンロード・展開
cd /usr/src/ VERSION=v12.22.3 DISTRO=linux-armv6l sudo wget https://unofficial-builds.nodejs.org/download/release/v12.22.3/node-${VERSION}-${DISTRO}.tar.xz sudo mkdir -p /usr/local/lib/nodejs sudo tar xf node-v12.22.3-linux-armv6l.tar.xz -C /usr/local/lib/nodejs vim ~/.profile . ~/.profile
.profileには以下を追記
# Nodejs VERSION=v12.22.3 DISTRO=linux-armv6l export PATH=/usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin:$PATH
続いてリンク作成・確認
sudo ln -s /usr/local/lib/nodejs/node-v12.22.3-linux-armv6l/bin/node /usr/bin/node sudo ln -s /usr/local/lib/nodejs/node-v12.22.3-linux-armv6l/bin/npm /usr/bin/npm sudo ln -s /usr/local/lib/nodejs/node-v12.22.3-linux-armv6l/bin/npx /usr/bin/npx node -v npm -v npx -v
Node-Redは公式の通り
Raspberry Piで実行する : Node-RED日本ユーザ会
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
30分くらいかかりインストール完了
node-red-pi --max-old-space-size=256
または node-red
で起動確認
node-red-start はなぜかうまくいかない
今回はインストールまで
その他検討サービス・アカウント作成メモ
IFTTT
定番のサービスをつなぐやつ
ngrok
一時的にグローバルのアドレスを持てる。初めて知った
ngrokが便利すぎる - Qiita
Slack
Discord
参考メモ
ffmpegで指定区間を静止画で切り出す
たまにやろうとして毎回調べるのでメモ
参考にしたサイトの組み合わせであるが、以下の通り
ffmpeg.exe -i input.mkv -ss 153 -t 3 -r 30 image_%04d.jpg
オプション | 意味 |
---|---|
-ss | 区間開始位置(秒) |
-t | 区間長さ(秒) |
-r | 1秒間当たりの枚数 |
これで3秒間分が90枚のjpg画像で出力される。
出力の形式はオプション指定なしで動いた。
使用したバージョンを記載しておくがこれではよくわからない。
ffmpeg version N-93293-gdb332832a1 Copyright (c) 2000-2019 the FFmpeg developers
参考:
ffmpegで動画から静止画を抜き出す - Qiita
FFmpegで指定時間ごとに静止画を切り出して連番画像で出力する - 動かざることバグの如し
アクセスポイントモードのルーターの設定画面
家で使用しているWifiルーターが少し古いBUFFALOの WHR-1166DHP4 というやつなのだが、最近になってアクセスポイントモード(、またはブリッジモード)で使用し始めた。
通常のルーターモードでは設定画面を開くには192.168.0.1にアクセスすればいいのだが、アクセスポイントモードだとこれができない。毎回調べたりしているので備忘としてここに書いておく。
手順は単純で以下の通り
- PCの設定でIPを手動にして192.168.11.20を指定する
- ブラウザで192.168.11.100を開く
- ユーザー名、パスワードを入力して設定画面を開く
- 終わったらPCのIP設定を戻しておく
以上ですが、ユーザー名はadmin固定。パスワードはデフォルトだとpasswordになっている。
BUFFALOに限らず、ルーターのデフォルト設定は説明書に書いてあったりするので早めに変更しておいた方が無難。
手順の最初のIPの設定について、今回は以下の手順で行った
- [Windows]+qで出る、[ここに入力して検索]ボックスにネットワークの状態と入力
- [ネットワークの状態]から[接続プロパティの変更]へ行く
- [IP設定]以下[IP割り当て]の[編集]ボタンから手動に変更
- [IPv4]のスライドボタンをオン、[IPアドレス]にはうえで書いたアドレスを、[サブネットプレフィックスの長さ]には8を指定した。[ゲートウェイ]は指定したが無効だったように思う
参考:
[WHR-1166DHP4 : 取扱説明書 | バッファロー](https://www.buffalo.jp/product/detail/manual/whr-1166dhp4.html)
Node.js、Expressの手習い
簡単なWebサービス等を作るのに便利そうなNode.jsとよく使われているらしいフレームワークのExpressをいじってみようと思うので、個人的なメモ感覚ですが、やったことを書いていこうと思います。
開発のベースは、先月末にRaspberry Pi2でNode.jsをnodebrewにてインストールし、追加でExpressをインストール。ベースとなるホームページをエンジンにejsを指定して作成していたもの。
また、以前に設定してすでに2ヶ月ほどcsvデータとして取り貯めている温湿度+圧力センサーの10分ごとの計測値について、外から参照できるような仕組みを作り込もうと思う。csvは1日分が1ファイルになっている。
これまでにしたこと
アクセス当日の0時から現在までの履歴グラフ表示
アクセス前日の履歴グラフ表示
指定日付の履歴グラフ表示
今回の変更
ホームページに個別の項目へのリンクを表示。具体的にはindex.ejsにhtmlでリンクを追記。ただし、将来的にはこのリンクを晒す表記は除去する予定
PowerShellでリダイレクトする際の文字エンコード指定
以前の記事でechoで作成した.gitignoreがgitに認識されず困った、と書いたがその後にわかった解決策を書いておきます。
結論から言うとPowerShellのOut-Fileコマンドレットを使い、エンコードを指定すればいい。
この前の例だと以下のようにする
echo test |
Out-File -Encoding Default -Append -FilePath .gitignore
エンコード指定Defaultでシステム標準のSJISで出力される模様。