TTGO T-Camera ファームウェア改造

TTGO T-Cameraのファームウェアを改造してみました。

1.ファームウェア開発環境の準備

ファームウェアはArduino環境で開発しますので、まずはLinuxMint19に開発環境を導入します。

まずは、pyserialをインストールしておきます。

自分のユーザーアカウントを dialout グループに追加した後、一旦ログアウトしてログインし直します。

Aruduino公式サイトから arduino-1.8.9-linux64.tar.xz をダウンロードしてきて展開します。生成された arduino-1.8.9 というディレクトリをホームディレクトリ直下に移動した後、
シェルを開いて、

で Arduino をインストール完了です。インストールが完了したら、 「Menu → プログラミング → Arduino」でArduino IDEを起動します。次にArduino IDEの「ファイル→環境設定」で「追加のボードマネージャのURL」に

を設定します。引き続き、「ツール→ボード→ボードマネージャ」で「esp32 by Espressif Systems」を探してインストールします。インストールが完了したら、「ツール→ボード→ESP32 Wrover module」を選択すれば、Arduino自体の準備は完了です。

2.ソースコードの導入

ソースコードは https://github.com/lewisxhe/esp32-camera-series からZIPでダウンロードしてきます。ダウンロードした esp32-camera-series-master.zip を展開し、展開したディレクトリ名をesp32-camera-seriesに変更して、~/Arduino の下に移動します。

Arduino IDEの「ファイル→開く」で ~/Arduino/esp32-camera-series/esp32-camera-series.ino を開いておきます。

3.ライブラリの準備

Arduino OneButton Library を https://github.com/mathertel/OneButton からZIPでダウンロードしてきて、OneButton-master.zip を展開します。展開したら、ディレクトリ名をOneButtonに変更して、~/Arduino/liraries の下に移動します。

BME280のライブラリについては TTGO T-Cameraでは正常な値を表示しない(そのため、途中から削除されている)のでソースコード中の

の行はコメントアウトしておきます。

esp8266-oled-ssd1306 Library を https://github.com/ThingPulse/esp8266-oled-ssd1306 からZIPでダウンロードしてきて、esp8266-oled-ssd1306-master.zipを展開します。ディレクトリ名をesp8266-oled-ssd1306に変更して、~/Arduino/liraries の下に移動します。

ここまででビルドと書き込みはできるはずです。Arduino IDEのチェックマーク(検証)を押してコンパイルしてみます。うまく行ったら、右矢印マークを押して書き込みもテストしておきます。

4.SoftAPモードからSTAモードへ変更

をコメントアウトして、SoftAPモードを禁止して、

のところに接続先のSSIDとパスワードを設定します。

5.ESP32のIPアドレスを固定IPに変更する

SSID/PASSWORDの設定の箇所の後に以下の記述を追加

WiFi.begin()の直前に以下の記述を追加

6.mDNS対応

ローカルネット内からはIPアドレスではなくホスト名でアクセスできると便利なので、mDNS対応させておきます。

先頭の

の後に

を追加します。続いて、SSID/PASSWORDの設定の箇所の後に以下の記述を追加します。

引き続き、setup()の最後の箇所の

に変更します。更に、void drawFrame1(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y) の中の

に書き換えます。(いくつかの行がコメントアウトになっているのは、表示にはIPアドレスもほしいためです。すべてURLでいい場合にはコメントを外します)
さらに、void drawFrame2(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)の中の

に書き換えます。

7.カメラの向きとOLEDの表示が上下逆なのを修正

の後あたりに

を追加します。

これでボードに書き込むと同じサブネットのPCからは http://esp32.local で、異なるPCからは http://IPアドレス でアクセスできます。どちらもOLEDディスプレイにも表示されます。

TensorFlowを試してみる(1)

ふとTensorFlowを試してみたくなりました。(そのためにDocker環境作ってました)

で、なかなかよさげなTensorFlowのチュートリアルを発見しました。

TensorFlow入門(https://deepinsider.jp/tutor/introtensorflow

こちらを参考に進めてみます。

第2回の環境構築でつまづきましたので、そのメモです。

環境は、冒頭に書いたとおり、TensorFlowを試すためにDockerの環境を作ったので、Docker前提で進めます。(Docker環境にしたのは、現状のLinuxMintの環境をできるだけ壊さないためです)

で、TensorFlowの公式サイト(https://www.tensorflow.org/install/)を参考にTensorFlowコンテナをインストール、起動します。

公式サイトの冒頭の起動方法では、まず docker run コマンドに -u オプションをつけろ、と警告が出ます。上記では「-u $(id -u):$(id -g)」を付けています。
しかし、この環境では python のバージョンを確認すると2.7でした。python3とするためにコンテナのタグに-py3を付けます。

python3での対話モードでの確認もエラーは出ませんでした。が、こんどは Jupyter Notebookでハマります。結局、ホスト側でJupyter Notebookのディレクトリをまず作ります。

その上で、Jupyter Notebookに対応したイメージを引っ張ってきて起動します。

ということで、

で起動するのが最終形となりました。起動後、ブラウザで表示されたトークンを含む形(今回の起動であれば http://127.0.0.1:8888/?token=3dcab8dd69809896495d64041dba74e654c52612ea877c70 )にアクセスすると、

こんな感じでアクセスできました。ちなみに、Docker環境を終了させる場合には、Ctrl + Cで「y」入力です。

とりあえず、第2回まで完了です。

Dockerでイメージ・コンテナを作ってみる

とりあえず、空のubuntuのイメージの雛形を作ってみる。

Dockerfileに元になるイメージとイメージ生成時に実行するコマンドを記述して、docker build コマンドでイメージを実際に作成、docker images コマンドで作成されたイメージを確認。元になった ubuntu イメージと作成した my-ubuntu イメージが存在することを確認。

イメージを起動するが、net-toolsもない状態なので ifconfig もエラーになる。
そこで net-tools をインストールして ifconfig コマンドを実行。当然うまくいくが、そのまま終了してみる。

終了してもコンテナ自体は残っている。そこで、残っているコンテナを廃棄して、再度起動して ifconfig を実行すると、エラーになる。つまり、前回イメージを起動した状態と同じ状態になっている。

再度イメージを起動して net-tools をインストールして終了、コンテナIDを確認。

コミットしてコンテナを廃棄。

イメージを起動すると、今度は net-tools がインストールされた状態で起動される。historyも残っている。

つまり、以下のような感じで作業していけばよさそう。

  • 失敗したら終了してコンテナ廃棄。再度イメージを起動してコンテナ生成して再トライ。
  • うまく行ったら、節目節目でコミット。
  • 手順がはっきりしたら、history で作業手順確認してDockerfileに記述、イメージ生成してうまく行っているか確認。

Docker CEをインストール

LinuxMint19にDocker CEをインストールしてみます。

Ubuntuへのインストール方法を書いていただいている方がたくさんあるのであまりハマりどころはないのですが、注意点はリポジトリの設定のところです。

まず、レポジトリ設定の前の部分まで。

リポジトリの設定のところはUbuntuと同じ方法のままでは後でエラーになります。このためUbuntuの場合と異なる作業になります。

あとはUbuntuと同じ作業です。

最後のは一般ユーザーでdockerを実行するために必要なグループ設定です。一旦ログアウトしてログインし直します。

こちらの記事を参考にさせていただき、hello-word コンテナで試してみました。

Google Cloud Print Connectorを設定

これまでAndoidから印刷するのに、わざわざGoogle DriveかGmail経由でLinux Mint側にファイルを持ってきて、それから印刷していたのですが、これが面倒なので、Google Cloud Printが使えるように設定してみます。
プリンタはBrother HL-2240DでLinuxMint19のPCにUSBで接続しています。

1.インストールと設定ファイル生成

まずはSynapticパッケージマネージャで「google-cloud-print-connector」をインストールして、引き続き設定ファイルを生成します。

ローカル印刷は引き続き使うので「Yes」を入力

クラウドプリントを使うので「Yes」を入力

ここでGoogle Chromeを起動して、https://www.google.com/device にアクセスするとGoogleアカウントの認証を求められるので認証ログイン。さらに、コードの入力に移るので、上記のコード(XXXX-XXXX)を入力。入力すると、コンソール画面が進んで、使わせたいユーザーの

Google Cloud Printを使いたいユーザーのメールアドレスをカンマ区切りで入力

入力すると設定ファイルが生成されたことが表示されます。

2.動作テスト

試しに動かしてみます。

Android側では「クラウド プリント」をインストールします。

インストールされた状態でアプリケーションのメニューで「印刷」を選択して、「プリンタの選択」でLinux側でCUPSで管理されているプリンタを選択して、プリンタのアイコンをタップすると印刷できました。

3.自動起動の設定

cloud-print-connector というユーザー/グループを作成します。ホームディレクトリは不要、ログインしないのでログインシェルも不要です。

実行ファイルへのシンボリックリンクを作成します。

設定ファイルを /opt/cloud-print-connector にコピーして適切な権限を付けます。

systemd のサービスファイルをダウンロードしてインストールします。

Google Cloud Print CUPS Connector serviceを許可してスタートします。

停止する場合は、

とします。

Quartus Prime Lite と ModelSim Starter をインストール

昨日ダウンロードした Quartus Prime Lite Edition と ModelSim Start Edition をインストールします。といっても、やり方がわからなかったので、適当です。^^;
OSはもちろんLinuxMint19.1 MATE edition 64bitです。

ホームディレクトリにダウンロードした以下のファイルをおいてあります。

  • ModelSimSetup-18.1.0.625-linux.run
  • Quartus-lite-18.1.0.625-linux.tar
  • QuartusLiteSetup-18.1.0.625-linux.run
  • cyclone10lp-18.1.0.625.qdz

この状態で実行属性をつけて、動かしてみました。

すると、ウィザードが立ち上がり、何も考えずに勧めていくと、途中でダウンロードしたファイルをすべて検出した状態でインストールするソフトウェアをすべて表示してくれました。

さらに進めていくと、

という表示が出て、勝手に起動する模様・・・・に見えましたが、

というエラーを出して止まっていまいました。

として、インストールしたディレクトリを削除して再度トライするも、やっぱりだめ。今度は、

を実行してから、再度インストールしたディレクトリを削除してトライ。今度は

という画面が出て、フル機能版のライセンスを買うか聞いてきます。趣味・勉強の範囲なので、そんな余裕もないので、真ん中を選んで実行してみます。

という感じで、Quartus Prime Lite Edition が無事に起動しました。

しかし、デスクトップにショートカットは生成されませんでしたので、デスクトップを右クリックして「ランチャの生成」で手動でランチャを作っておきます。

  • 名前は「Quartus Prime Lite Edition」
  • コマンドは「/home/(ユーザー名)/intelFPGA_lite/18.1/quartus/bin/quartus」
  • アイコンは「intelFPGA_lite/18.1/quartus/adm/quartusii.png」

として作成しておきます。作成したものをダブルクリックすると起動することを確認しておきます。

さらに、こちらの情報によるとModelSimを動かすには、32bit用のライブラリが要るらしいので以下の手順でインストールしておきます。

Arduino IDE 1.8.8を動かしてみた

久しぶりに Arduino IDE を使ってみたくなったのでLinux Mint 18.1 LTS上にインストールしてみました。ターゲットボードはずっと前に秋月で買った ESP32-DevKitC ESP-WROOM-32開発ボード です。

インストールの手順はこちらに記載されているとおりなのですが、なにはともあれ、こちらからArduino IDE 1.8.8 Linux 64bitをダウンロードして、ホームディレクトリに展開します。

展開したディレクトリに移動して、インストールスクリプトを起動します。

これでメニュー上に追加されます。

「ファイル」→「環境設定」で環境設定画面を開きます。設定の下の方にある「追加のボードマネージャのURL」に「https://dl.espressif.com/dl/package_esp32_index.json」を入力(下記)します。

次に、「ツール」→「ボード」→「ボードマネージャ」

で「esp32 by Espressif Systems」のところにある「インストール」ボタンをクリックしてインストールします。完了すると「ツール」→「ボード」でESP32を搭載したボードが大量に出てくるので、「ESP32 Dev Module」を選択します。

次に、サンプルを動かしてみます。今回はNTPサーバーにアクセスして時刻を取得するサンプルを動かしてみました。まず、「スケッチ例」→「ESP32」→「Time」→「SimpleTime」でサンプルを開きます。開いたら、上の方にある ssid と password の部分に手近な無線LANアクセスポイントの設定を記述します。

チェックマークをクリックしてビルドすると、エラーが発生します。いろいろ調べると、python の pyserial モジュールがないために発生するようなので、インストールします。そもそも、pip も入っていなかったので、インストールしました。

ビルドが通るようになったので、書き込んでみます。

「ツール」→「シリアルポート」で /dev/ttyUSB0 を選択した後、「ツール」→「シリアルモニタ」でシリアルモニタを開き、速度を 115200bps に設定します。その後で、右矢印マークをクリックするとビルドして書き込み、実行します。

うまく行けば、NTPサーバから取ってきた時刻(UTC)が表示されるはずです。

意外にあっさりと動いてしまいました。

DarkStarを動かしてみた

歴史遺産ともいえる、Xerox Starのエミュレータがgithubでリリースされたようです。エミュレータ自体はこちらで、ドキュメントはこちらで参照できます。

LinuxMint19上で実際に動かすには、まずこちらに従って mono をインストールします。

次に、必要なライブラリをインストールします。

ダウンロードしたエミュレータを展開します。

エミュレータを起動します。

しばらくすると、上の方にメニューバーと下の方にステータスバーのついたエミュレータウインドウが開きました。
この状態だと、ハードディスクイメージがないので、ハードディスクイメージを取ってきて展開します。

ダウンロードしたハードディスクイメージをセットします。
「System」⇒「Hard Disk」⇒「load」でイメージを指定します。今回は、ViewPoint-2.0-11-9-1990-18-38.imgを指定してみました。
その後、「System」⇒「Start」で起動するのですが、セルフテストの画面をたくさん表示した後、フリーズしてしまうようです。
「System」⇒「Alternate Boot」で「Rigid」を選んでおくと、セルフテストをスキップして起動するようです。しばらくすると、

ダイムゾーンの設定画面になりました。ここでは -9 を入れてみます。
・・・・が、キーマップがおかしいようです。数字だとキーが一つずれている感じです。

一旦停止させて、ディスクイメージを XDE-5.0.imgに切り替えて、再起動してみました。しばらくしたら、

2値ビットマップのウインドウ表示がされました。渋いです(笑)

秋月ドップラーセンサーキットをテストしました

3Dプリンタでケースを作った秋月ドップラーキットですが、テストしてみました。

環境はLinuxMint19です。

1.準備

  • システム管理の「ユーザーとグループ」でdialoutグループに自分のユーザーを追加
  • synapticでmoserialをインストール
  • 一旦再起動(実際にはログアウト/再ログインでいいはず)

2.通信ソフトのセットアップ

  • アクセサリの下のmoserialを起動
  • 「ポートの設定」で、デバイスを/dev/ttyUSB0(環境による)、ボーレートを9600、データのビットを8、ストップビットを1、パリティをodd、ハンドシェイクは両方共チェックなし、アクセスモードはRead and Write、ローカルエコーはチェックありに設定

3.接続

で、「接続」を押して接続・・・・すると、そこは USB-UARTチップがFT234Xなので、見事にデスクトップがハングアップしました。正確には、moserialは動いていて、@ERと@EOが繰り返し送られてきて表示されるのですが、何も操作できません。で、一旦、USBケーブルを抜いて、再度刺したらデスクトップが復活しました。

うーむ、相変わらずですね、FT234X。どうにかならないんですかねー??
でも、ぐぐっても、FT234XとLinuxの組み合わせでダメという情報は少ない。うまくいったという情報も少ないのだけど。(もっと正確に書くと、うまくいったという情報はポツポツあるのだけど、本当にFT234Xのままでうまく行っているのか、他のFT232R系のものに変えてうまく行っているのか曖昧なものが多いような気がする)

うまく行かないのは自分だけなんだろうか??

LinuxMint19にLTSpiceをインストールしてみる(2)

どうも、wineの最新版は、WineHQを公式ページからインストールするのが良さそうです。ですので、まずsynapticでwineで検索して、wine1.6、wine32など、関連しそうなパッケージを削除した後、

で不要と思われるパッケージを一掃して出直します。

公式ページの記載に従って、

とするのですが、最後のupdateで、

E: リポジトリ https://dl.winehq.org/wine-builds/ubuntu/sudo bionic Release には Release ファイルがありません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。

となってエラーになってしまいます。うーん、ローカル側の感じがしないので、どうしたものか。
後戻りしてしまいました。