Arduino付き小型PC基板「LattePanda」を使ってみる。
入手したのはだいぶ前だ。ずっと放置していたのだけど、引っ張り出して使ってみることにした。
まず最初に使い始める前に問題が1つある。実は、Windows10のライセンスが無い物を買っていたので、別途Windows10のライセンスだけ追加で買わないといけない。
激安Windows10ライセンスを購入することにした。激安では買えなかったが、そこそこ安い店で購入した。Home版だ。
購入したWindows10のライセンスは無事アクティベートされてLattePandaが使えるようになった。
—
次にWindows Updateが掛かったので、最新までWindows10の更新をすることにした。かなり時間が掛かった。だが、最後にWindows10 ver 1903アップデートが入らない。
ver 1903を入れるために、Windows Update Assistantを使ってインストールしようとしたのだが、ストレージが小さいので外部ストレージを要求してくる。
なので、USBメモリを取り付けてアップデートしたのだが、更新作業が0%から1%まで一晩くらい進まなくて、1日くらい経過したところで勝手に失敗して元に戻されてしまった。
Windows10を現時点の最新のver 1903へ更新するのができなかった。その手前までの更新だけでとりあえずはあきらめて使うことにする。
—
モニターとキーボードは最初は普通のものを取り付けて使っていたのだが、組み込み基板っぽく使うので、小型のLCDモニターと小型のキーボードを取り付けて使うことにした。小型LCDモニターはRaspberry Pi用の3.5インチLCDモニターだ。
A5サイズくらいの書類トレーをケースにして、そこに入れて持ち運べるようにしてみた。
—
ネットワークは屋外とかのWiFiの無い場所で使うことを想定して、LTEモデムを取り付けた。
このためにLTEモデムモジュールをUSB変換アダプタに取り付けて、設定方法とか試していた。
→ M.2規格の小型なLTEモデムをUSBアダプタでWindows PCに接続して使ってみた
ちゃんと設定ができたので、どこに持って行ってもLTEでネットワークに繋がるようにできた。
—
LattePandaのボード上のArduino部分を使ってみる。
Arduino Leonardo相当の回路が載っている。
LattePanda上でのソフト開発をするのはストレージが狭くてモニタやキーボードの問題もあり厳しい。
なので別のArduino Leonardoを用意して、別のノートPCにArduino Leonardoを接続して仮想LattePanda環境だと見なしてソフトを作ることにした。
大気汚染センサーをArduinoに繋げて測定するというのをやっていたりするので、このセンサーをLattePandaで動かすのをやってみることにした。
—
Firmataというのをちょっと弄ってみた。
Firmataを使うためのライブラリみたいなのを探したのだが、あまり良い物が無い。
FirmataCというC言語用のものが自分には分かりやすそうだった。
FirmataCのソースとかFirmataのプロトコルの説明をみながら、GPIOとAD変換をする部分だけ自作した。
シリアル通信の部分は自前のシリアル通信のライブラリを使っている。自作ライブラリで、フロー制御RTSを使わない設定にしてずっとこのライブラリを使っていたのだが、Arduino LeonardoやArduino Zero Proなどで受信ができないという現象が発生した。
Our_DCB.fRtsControl = RTS_CONTROL_DISABLE;
という部分を、
Our_DCB.fRtsControl = RTS_CONTROL_ENABLE;
と変更して、無事にArduino Leonardoとシリアル通信ができた。
Firmataのプロトコルは簡単なので、説明を見てGPIOとAD変換だけならすぐに自分で作ることが可能だ。(ちょっとプロトコルの作りがださいと感じた。)
GPIOについては、とりあえず出力ピンの制御を試した。
Arduino Leonardoの基板上のLEDのピンをOn,OffしてLEDを点滅させてみた。
COMポートに0x91,0x20,0x00の計3バイトを送信させるとピンをHighに出来る。
COMポートに0x91,0x00,0x00の計3バイトを送信させるとピンをLowに出来る。
一定時間ごとに上記を繰り返すことでLEDの点滅をすることができる。 Lチカとか言うらしい。
LattePandaにもArduino Leonardoと同じように基板上のLEDがあるという説明だったはずなのだが、実際にやってみてもLEDが反応しない。
とりあえずLattePandaのLEDについては保留。
—
LattePandaのArduinoにセンサーを繋げてみた。
5Vで駆動する回路で、アナログの電圧を出力するセンサーを繋ぐことができる。
2.54mmピッチの3ピンのコネクタになっているので、半田付けでケーブルを作って繋げた。
COMポートに0xC0,0x01の計2バイトを送信させるとAnalogのポート1で一定時間毎に自動で計測をして結果を返してくる。
COMポートに0xC0,0x00の計2バイトを送信させると、自動計測を停止させることができる。
LattePandaでセンサーの計測をさせることができた。
—
計測データをネットワーク経由でサーバーに保存してみた。
とりあえず自分のホームーページ&blog用に借りているサーバーがあるので、ここの仮のディレクトリを置き場として、FTPで計測データを記録したファイルを一定時間毎に送信するのを試した。
—
余談
LTEモデムのOn/Offの制御をしたいのだが、うまくいかない。
Windows 10でnetshコマンドでnetsh mbn connect XXXとか実行することでLTEモデムのネット接続を掛けたり、disconnectでネット切断ができる。
しかし、これを自作のプログラムでsystem()関数でシェル呼び出し経由で実行すると失敗してしまう。mbnが指定できない?
なぜ??
netshコマンドの代わりにプログラムからネットワーク接続を制御するAPIとかWindowsにあるのだっけ? (WiFiについてはNative WiFiというAPIがあったような気がするので、それに似たやつ)
と、調べてみたら、LTEモデムとかのブロードバンドアダプタの制御できそうなAPIで、Mobile BoardbandというAPIがあるようだ。
→ Mobile Broadband – Windows applications Microsoft Docs
このAPIでソフトを作るのはちょっと面倒くさそうだ。