ArmbianにMQTT環境をインストール

syslogサーバになっているArmbianにMQTT環境をインストールします。作業内容はこちらの記事を参考にしました。(というか、そのまま)

注)ローカルネットワーク内でのテストのため、ユーザー認証なしの状態で実施しています。

サーバー (Broker) のインストール

サーバー(Broker)の起動

クライアントのインストール

リスナー(Subscribe)を動かす

リスナーの起動はサーバ(Broker)の起動後に行う。下記はその後のPublishをした際の記録を含む。トピックは mqtttest としてみた。

今回はローカルのサーバ(Broker)に対して接続(subscribe)しているが、リモートのサーバ(Broker)に対して接続(subscribe)する場合は「-h server名」とする。

別のPCでもクライアントのみ起動してサーバー(Broker)を指定してリスナーを起動すると、Publishした瞬間に同時に両方のリスナーで表示される。

Publishを動かす

今回はローカルのサーバ(Broker)に対して接続(Publish)しているが、リモートのサーバ(Broker)に対して接続(Publish)する場合は「-h server名」とする。

サーバー(Broker)を自動起動するように設定

TTGO T-Cameraの画像をngrok経由で取得

NAT配下のWebサーバ等をインターネットからアクセスできるようにトンネリングをするngrokというサービスがあります。

これを使って、3Dプリンタの監視画像をインターネットから取得できないか試してみました。

テスト環境は以下のとおりです。

まず、ngrok公式サイトからサインアップをします。サインアップすると、「Setup & Installation」という画面に移行しますので、これに沿って操作していきます。

まず、ngrokのダウンロードですが、Linux(ARM)のURLをコピーして、wgetでzipファイルを取得します。(下記はURLを書き換えてありますので、必ずURLをコピーしてください)

ダウンロードしたら、②、③に沿って展開とトークンの取得を行います。トークンの取得は③のところのコマンドラインをコピー&ペーストして実行するだけです。

トークンを取得したら、 ~/.ngrok2/ngrok.yml にある設定ファイルを作成します。

1行目の内容はトークン取得で作成されている内容です。2行目以降が追加した内容になります。

作成したら、

で起動します。(終了すると tunnel も消滅するので screen と併用するとよいかと思います)

という感じで状態が表示されます。この状態でインターネット側から https://b3d16323.ngrok.io にアクセスするとBASIC認証が求められ、設定したユーザー名とパスワードを入力すると、TTGO T-Cameraへアクセスすることができました。アクセスすると上記の状態の下にHTTPリクエストの状態がリストで表示されます。なお、b3d16323の部分は起動する度にランダムに変わります。有料プランにするとこの部分を固定にすることができるようです。

実際にGet Stillをクリックすると、

という感じで実際に画像を取得できました。なお、ストリーミングについては異なるポート(81/TCP)でのアクセスが必要なのですが、ngrokのコンフィグファイルでは複数のポートの設定も記述できるものの、ポートごとに異なるURLが割り付けられます。このため、うまくいきませんでした。有料プランにするとURLを指定できるので、うまく行く方法があるのかもしれません。

dockerをarm64にインストール

ついでなので、dockerをarm64なubuntuにインストールしてみました。
最初、LinutMintと同じ方法で試してみたのですが、途中でエラーがでてうまく行きませんでした。最終的にはスクリプトを使う方法でインストールしました。

ターゲットはPine A64+上のArmbian Ubuntuです。MicroSDカードで初回起動後、armbian-configにてUSBメモリにインストールしたものです。インストールした際のログは以下のとおりです。

結局、手順としては非常に簡単で、

という感じでスクリプトをダウンロードしてきて実行するだけです。

ROCK64リモートデスクトップ環境

1年位前に買ったROCK64 4GBにArmbian Ubuntu18.04を入れてみました。別の端末からリモートデスクトップで接続できる環境が容易に構築できました。RAMが4GBあるので、目的によっては非常に便利に使えそうです。

1.Armbian Bionic for ROCK64のダウンロードとMicroSDへの書き込み

Armbianからダウンロードします。MicroSDへの書き込みはいつものようにディスクイメージライタで行いました。

2.初回電源投入

MicroSDを取り付け、LANに接続します。
接続先のIPアドレス確認のため電源投入の前に、fping でセグメント内で現在使われているIPアドレスを確認します。

ROCK64の電源を投入し、しばらく待って、再度fpingコマンドを実行、差分のところがROCK64のIPアドレスなので、そのアドレスに対して

としてログインします。初期パスワードは 1234 です。

※どうも、avahi-daemonが初めから動いているっぽいので、

で行けそうな気がします。

ログインに成功すると、現在のパスワード、新しいパスワードを確認してくるので入力します。
さらに、通常ユーザーの作成に移るので、適当に通常ユーザーを作成します。

一旦ログアウトして、再度作成したユーザーでログインし直します。

3.初期設定

で適当に初期設定を行います。

Systemの項目から以下のソフトウェアをインストールします。

  • Minimal Desktop
  • Default(ブラウザその他のインストール)
  • Lightdm(ログインマネージャ)

引き続きPersonalの項目から以下の項目を設定します。

  • TimezoneをAsia/Tokyoに設定
  • Languageはja_JP(UTF-8)

さらに、Softwareの項目からRDPを設定します。

4.リモートデスクトップクライアントから接続する

設定が終わると、別のマシンから Remmina(RDPクライアント)で接続するとリモートアクセスが可能となっています。すでに部分的ですが日本語化もされています。

「アプリケーション」⇒「Settings」⇒「言語サポート」で言語の設定を行いますが、この状態では英語のみインストールされていますので、「言語のインストールと削除」から日本語にチェックを入れて適用、キーボード入力に使うIMシステムにfcitxを選択します。その後、メニューとウインドウの言語で日本語を一番上に持ってきてから、「システム全体に適用」をクリックします。

地域フォーマットも同様に日本語を選択し、システム全体に適用します。

一旦ログアウトして、再度ログインして概ね完了です。
初めから Chromium ブラウザも入っているので、

5.ルートファイルシステムをUSBメモリに移動する

USBメモリを挿入した状態でarmbian-configを起動して、System settings で Install(Install on SATA, eMMC, NAND or USB)を選択、Boot from SDを実行すると、USBメモリにルートファイルシステムを移動してくれます。(実行する際にUSBメモリのパーティションを削除しておくと、自動でパーティション作成ツールが起動します)

USBメモリはこの記事で使ったSandisk UltraFit 3.1を使いましたが、システム移動後に

として1GBのファイルを作成してみたところ、所要時間は約10秒、107MB/sの速度が出ました。
まだ挙動がよくわからないところもありますが、速度面でも優位なのではないかと思います。

※Boot from SPIを実行するとSPIフラッシュにブートローダを書き込んで、SDカード無しで起動できるようになるのだと思いますが、戻し方を確認していないのでとりあえずbootはSDカードのままとしました。また、この作業は今回は最後にやりましたが、本来は最初にやっておいたほうがトータルの構築時間は短くて済むような気がします。

Raspberry Piにつないでドップラーセンサーをテスト

LinuxMintにつないで(たぶんFT234Xのせいで)うまくいかなかった秋月のドップラーセンサーキット。こんどはRaspberry Piにつないでテストしてみました。

Raspberry Piにつないで電源投入後、SSHで接続。dialoutグループにユーザー pi がいるのを確認して、screenをインストール。おもむろに、

としてみた。
センサーに手を近づけると反応するので、何か送ってきているのだけど、附属のマニュアルとは異なり、文字化けしているように見える。うーむ。

・・・・まじめにシリアルの波形見るか・・・。

スタンドアローン出力とOctoPrint比較

Ender-3改良(?)の施策として、Thingiverseで見つけたケーブルチェーンを付けてみようと思い、OctoPrintからパーツを数個出力してみたのですが、観察していると、造形の細かいところで動作が遅くなっています。結果として、細かい関節部分の造形がイマイチで、その結果、動きもイマイチな感じでした。そこで、部品作成はOctoPrintではなく、MicroSDにGcodeデータをコピーして、スタンドアローンで出力してみました。

上の写真はスタンドアローンで出力中の写真です。こちらの方は関節部分もよりきれいに出力されました。この後、他の部品も出力して無事に組み立てはできて、非常にいい感じです。動作上も問題なさそうなので、余った部品を見比べてみました。

左の写真は、一番上がOctoPrintで出力したもの。真ん中と下がスタンドアローンで出力したものです。

材料はPLA、積層厚はどちらも0.2mm、Infillは20%(あまり関係ないですが)、ノズル温度200度、ベッド温度60度で、Curaでスライスした際の条件は同じです。(ファイル自体は数個出力か、35個出力かという違いがあります)

真ん中のものが積層割れっぽいのがあるのは置いといて、回転軸となる穴の周囲が違うのがわかりますでしょうか?

右の写真も一番上がOctoPrint、真ん中と下がスタンドアローンで出力したものです。

やはり回転軸となる穴の内側に差がみられます。この部分はOctoPrintでのプリント時にはノズルの移動速度が落ちていて、同じところにノズルが滞留する時間が長くなっています。

そのため、樹脂が余分に出てきてしまっているのか、あるいは、加わる熱量が大きくなって周囲を融かしているのかわかりませんが、影響を与えていそうな感じがします。なにか良い対策があればいいのですが・・。

NanoPi NEO2セットアップ(Armbian編)

一旦は公式ディストリビューション?であるFriendlyCoreをインストールしたのですが、できるだけオープン系ということでArmbianをインストールし直しました。

OSイメージは Armbian の NanoPi NEO2 のページから Armbiean Stretch をダウンロードしました。ダウンロードしたイメージファイルを展開して、USBイメージライタでMicroSDカードに書き込むのは同じです。

書き込んだMicroSDカードをNanoPi NEO2に挿入します。ローカルPCで

を電源投入前後で実行、増えたIPアドレスを調べます。(注:電源投入後の実行はしばらく待ってから行います)
調べたIPアドレスに対して、

として、パスワード「1234」でログインします。ログインすると、rootのパスワードの設定変更を求められ、引き続きユーザーアカウントの作成を求められますので、適当に作成します。作成完了後、そのまま、

としてアップデートとavahi-daemonのインストール、カーネルバージョンアップ後の再起動を行います。以降は

でリモートログインできます。リモートログイン後、

として、Personalの項目内の Timezone、Locale、Hostname を適当に設定しておしまいです。

NanoPi NEO2セットアップ(FriendlyCore編)

何回やってるんだという感じのNanoPi NEO2のセットアップです。

公式イメージが置いてある http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO2#Boot_from_TF のリンク先の Google Drive のURL https://drive.google.com/drive/folders/1w7eMluHWo3ezwKBdaJcDUcCtM9qVaaVv から「nanopi-neo2_friendlycore-xenial_4.14.52_20180628.img.zip」をダウンロードしてきて、イメージを展開、USBイメージライタでMicroSDカードに書き込みます。書き込んだMicroSDカードをNanoPi NEO2に挿入します。ローカルPCで

を電源投入前後で実行、増えたIPアドレスを調べます。(注:電源投入後の実行はしばらく待ってから行います)
調べたIPアドレスに対して、

として、パスワード「pi」でログインします。

でセットアップ。パスワードの変更、ロケール(ja_JP.UTF-8)の追加、タイムゾーンの変更(Asia/Tokyo)して、再起動。
再起動後、再度 ssh でログインして、

完了すると、以降は

でログインできるようになります。(ローカル側にも avahi-daemon が必要)

Raspberry Pi 3B+ でリモートデスクトップ環境

遅まきながらRaspberry Pi 3B+を手に入れた(というか手には入っていたのですが、開封していなかった)ので、リモートデスクトップ環境として立ち上げてみました。

Raspberry Pi 3B+は初めからUSBメモリからブートできるようになっているので、今回はUSBメモリ起動とします。USBメモリには速度も速く、前モデルのUltraFit 3.0のように激熱にならないUltraFit 3.1の32GBを使うことにしました。

ケースはThingiverseにある適当な(=ヒートシンクが取付可能で空気の流れがよさそうな)ケースのデザインを探して3Dプリンタで出力、CPU(SoC)とメモリとUSBハブ兼イーサネットコントローラには適当なヒートシンクを取り付けました。

OSとしていつものようにRaspbian StretchのDesktop版をダウンロードして、Linux Mintに初めから入っているUSBイメージライタでUltraFit 3.1に書き込みます。書き込んだら、一旦取り出した後、再度取り付けて、マウントさせます。/bootディレクトリに touch コマンドで ssh という名前のファイルを作成したら、再び取り出して、今度はRaspberry Pi 3B+ に取り付けて電源投入します。

数分したら、同じサブネットに接続したLinux Mintから

として応答が帰ってくるのを待って、

として接続します。ユーザー名は pi 、パスワードは raspberry です。ログインしたら、

として設定を行います。

  • パスワードを変更
  • ロケールとして ja_JP.UTF-8を追加、デフォルトもja_JP.UTF-8に設定します。
  • タイムゾーンを Asia/Tokyo にセット
  • Wi-Fiの国設定を日本にセット

完了したら、一旦

として再起動しますが、Raspberry Pi 3B+ の場合は電源が切れてしまうようですので、一旦電源供給用のUSBケーブルを抜いて再挿入します。再起動したら、再度 ssh でログインしてから、

として、アップデートとRDPサーバーをインストールします。一方でローカルPC側は Synaptic でリモートデスクトップクライアントの remmina をインストールします。(remminaとremmina-common、remmina-plugin-rdp、remmina-plugin-xdmcpおよびその依存パッケージ)
完了したら、一旦再起動します。(必要かどうかはわかりませんが、とりあえず)

ローカル側で Remmina を起動して、上のアドレスバーに raspberrypi.local(ホスト名を変更せず、同セグメントから接続する場合)またはIPアドレスを入力し、左側の「+」を押して、プロファイルの基本設定内の「色数」をHigh ColorかTrue Colorあたりに設定して、「Save as default」をクリックします。(設定しないとエラーになります)

・・・で、そのまま「接続」を押すと何故かエラーになりますが、アドレスバーに接続先のアドレスを入れてEnterを押すと、ログイン画面が出ますが、ログインしてもその後、Raspberry Piがリブートしてしまいます。

おそらく、デスクトップ環境の何かが足りないからだろう、ということで、ssh でログイン後、

として一旦 raspi-config を起動した後、Boot optionsで起動後デスクトップ環境にオートログインするように設定してから再起動して、しばらく(10分位でしょうかね)待った後、再び Console に戻します。(「Desktop / CLI」で「Desktop Autologin」に設定後、再起動してしばらく待って、「Console」に戻す)

すると、Remmina でリモートデスクトップ接続するとGUIリモートデスクトップ環境に接続できました。(注:試行錯誤のなかで、tightvncserver をインストールしているので、ひょっとしたら必要かもしれません)

危なそうなサイトに接続する場合には有効だと思うのですが、どうでしょうかね。

Raspbianをダウンロードしようとしたら・・・

公式サイトのダウンロードページから RASPBIAN STRETCH LITE のTorrentのリンクをクリックしたところ・・・

ということで、負荷がいっぱいなので・・・ということで .torrent ファイルすらダウンロードできず。でも負荷を軽くするための torrent だと思うのですが、torrentでダウンロードするための .torrent がダウンロードできなかったら余計にサーバーに負荷が集中するような気がします。

幸い、ミラーサイトが国内にありましたので、そちらからダウンロードしましたが・・・。

http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/

で、ZIPファイル展開して、USBイメージライタでイメージを書き込んで、初めからSSHを有効化するために bootパーディション直下に ssh という名前で空ファイルを作ってから起動しました。(/boot/ssh ファイルを作らないと、一度ディスプレイ+キーボードを繋ぐか、シリアルコンソールを繋がないとSSHを有効化できないので・・・)