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等が品薄な頃にも秋月やスイッチサイエンスで在庫があった。

akizukidenshi.com

手順

  1. OSを更新
  2. pipenvインストール
  3. OctoPrint用環境作成
  4. OctoPrintインストール
  5. 起動、アクセス
  6. 自動起動

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インストール手順

  1. 既存のNode(v10)をアンインストール
  2. Nodeのアンオフィシャルビルド(v12)をインストール
  3. 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にアクセスすればいいのだが、アクセスポイントモードだとこれができない。毎回調べたりしているので備忘としてここに書いておく。

手順は単純で以下の通り

  1. PCの設定でIPを手動にして192.168.11.20を指定する
  2. ブラウザで192.168.11.100を開く
  3. ユーザー名、パスワードを入力して設定画面を開く
  4. 終わったらPCのIP設定を戻しておく

以上ですが、ユーザー名はadmin固定。パスワードはデフォルトだとpasswordになっている。

BUFFALOに限らず、ルーターのデフォルト設定は説明書に書いてあったりするので早めに変更しておいた方が無難。

手順の最初のIPの設定について、今回は以下の手順で行った

  1. [Windows]+qで出る、[ここに入力して検索]ボックスにネットワークの状態と入力
  2. [ネットワークの状態]から[接続プロパティの変更]へ行く
  3. [IP設定]以下[IP割り当て]の[編集]ボタンから手動に変更
  4. [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ファイルになっている。

 

これまでにしたこと

csv一つ分のデータのRでのグラフ描画、png出力。

アクセス当日の0時から現在までの履歴グラフ表示

アクセス前日の履歴グラフ表示

指定日付の履歴グラフ表示

 

今回の変更

ホームページに個別の項目へのリンクを表示。具体的にはindex.ejsにhtmlでリンクを追記。ただし、将来的にはこのリンクを晒す表記は除去する予定

PowerShellでリダイレクトする際の文字エンコード指定

以前の記事でechoで作成した.gitignoreがgitに認識されず困った、と書いたがその後にわかった解決策を書いておきます。

結論から言うとPowerShellのOut-Fileコマンドレットを使い、エンコードを指定すればいい。

 

この前の例だと以下のようにする

echo test |

Out-File -Encoding Default -Append -FilePath .gitignore

エンコード指定Defaultでシステム標準のSJISで出力される模様。