t3ta blog

作ったり登ったりします

秋月電子通商でLPC11U35マイコンボードキット(LPC11U35 QuickStart Board互換)を買った

インターネットを徘徊していたところ、ARM Mbedでの開発に対応しているマイコンボードが1000円以下で買えるということを知ったので、会社帰りに秋月電子通商で購入し、自宅で動作確認を行った。
購入したのはこちらの LPC11U35マイコンボードキット(LPC11U35 QuickStart Board互換) だ。
f:id:t3ta:20180204171401j:plain
ぼくはこれまでマイコンを扱うのにArduino IDE、MPLAB X IDE、ESP-IDFしか使ったことがなく、ARM Mbedは知ってはいたが使うのが初めてだった。

ARM Mbedを知らない人がいるかもしれないので、(ほとんど使ったことないくせに)一応説明したいと思う。
ARM MbedはARM社が開発したプロトタイプ用ワンボードマイコンとその開発環境だ。
他のIDEと比較して特徴的なのはブラウザ上で動作するIDEを備えていることであり、これによってユーザーは様々なOSで同じように開発を行うことができる。また、オンラインにあるコードはコンパイルするとバイナリファイルとしてダウンロードされ、USBメモリにデータを書き込むのと同じようにマイコンに書き込むことができる。

こうやって説明してみるとものすごく便利そうだ。早速動作確認をすることにした。

まず、ボードを認識させるために付属する説明書の手順でMacに接続する。すると、ボードはUSBメモリやSDカードのようにデスクトップに表示される。
次に、ボードにデータを書き込む。親切なことに秋月電子通商のサイトで動作確認用のバイナリファイルが配布されているので、データはそれを使った。 USBメモリに書き込むようにドラッグ&ドロップすると容量が足りないという警告が出る。これは既にfirmware.binが書き込まれているためなので、書き込まれているfirmware.binを削除する。
再度ドラッグ&ドロップすると書き込む事ができるが、これでは動作しなかった。MacLinuxでは下記コマンドで書き込む必要があるようだ。

$ cp firmware.bin /Volumes/CRP\ DISABLD

上記コマンドで書き込み、マイコンボードを電源を一度抜いて再起動する。ボード上のLEDが点滅すれば、動作確認は完了だ。

今回は動作確認だけ行ったが、次はARM MbedのIDEを用いた開発についての記事を書こうと思う。

OV2640をESP32-DevKitCに繋いで写真を撮ってみた その2

前回の記事:OV2640をESP32-DevKitCに繋いで写真を撮ってみた その1 - t3ta blog

前回はOV2640で写真を撮影することに成功した。(本当か?)
しかし、少々画像が乱れていたため、今回は鮮明な画像を取得するまでを書きたいと思う。

原因はいくつか考えられた。

  1. 配線が雑だったため、接触が悪かったり、絶縁できていなかった(ハードウェア側の問題)
  2. デモプログラムの設定が適切ではなかった(ソフトウェア側の問題)

1は導通確認を再度行なったところ問題なかったので、2に絞って調査を行なった。
本当は原因がわからずかなり苦労したが、そこに至るまでの過程はここでは割愛して、結果だけ書く。

原因はクロック周波数だった。
igrr氏によるデモではXCLK(OV2640のメインクロック)は20 MHzに設定されていた。
データシートによるとMin値が6 MHzでTyp値が24 MHzなのでデモで指定されているクロック周波数は範囲内であるが、これを6 MHzに変更することで正常に動作した。

f:id:t3ta:20180128123658j:plain

やったーーーーーー!!!!!

なぜ20 MHzでは動作しないのか調査をしたが、同じような事例は確認されなかった。
水平同期が上手く取れていないように見えるが、よくわからない🤔
個人的にものすごく気になるところなので、暇があれば今後も調べてみたいと思う。(わかる人いたら教えてください)

ひとまずJPEGを取り出すことに成功したので、次回はこれをUDPで飛ばしてみようと思う。

OV2640をESP32-DevKitCに繋いで写真を撮ってみた その1

以前eBayで注文したOV2640が届いたので、早速ESP32-DevKitCに繋いで動作確認をしてみた。

GitHubで公開されているデモ(GitHub - igrr/esp32-cam-demo: Demo for working with a camera on ESP32)を使った。
このデモを使うためにはESP32公式の開発キット(GitHub - espressif/esp-idf: Espressif IoT Development Framework. Official development framework for ESP32.)を用意する必要がある。
これらの準備に関してはREADMEを読めば分かるので割愛する。

当初はメスメスのジャンパーで適当に繋ごうと思っていたが、秋月で10本330円だったのでテスト用の基板を作ることにした。(毎回配線するの面倒だしね)
ピン番号を確認しながら頑張って作った結果がこれだ。
f:id:t3ta:20180116211204j:plain
とても汚い。悲しい。
後になってデモのREADMEを読んだところ配線の仕方が書いてあった…
説明書はよく読もうね…

ということで、ひとまずハードウェアの準備は整った。
早速先ほど用意したデモを書き込もう。
ESP32-DevKitCへの書き込みは以下のコマンドでできる。

$ make flash
・
・
・
CC build/main/app_main.o
/Users/*****/esp/esp32-cam-demo/main/./app_main.c:35:25: fatal error: http_server.h: No such file or directory
compilation terminated.
make[1]: *** [app_main.o] Error 1
make: *** [component-main-build] Error 2

出来なかった。
git cloneする際にrecursiveオプションをつけていなかったため、esp32-http-serverがcloneされなかったためだった。凡ミス。
esp32-http-serverを持ってくると無事書き込むことができた。
以下コマンドでserial terminalが起動する。

$ make monitor
・
・
・
E (204) camera_demo: Camera probe failed with error 0x20001

また怒られた。
0x20001はカメラモジュールが認識されていない場合に出るエラーのようだ。
汚い基板の導通確認をしたが、特に異常はなかった。
これは結局ピンの割り当てが間違っていたのが原因だった。
デフォルトではESP32-DevKitJ向けの割り当てになっているので、割り当て直す必要がある。
設定の変更には以下のコマンドを使う。

$ make menuconfig

ESP32 Camera Demo Configuration->Pin Configurationを選択し、ピンを割り当てる。
この時に設定する数値はGPIOのピン番号だ。(参考:ESP-WROOM-32
ピンを割り当て直し、再度書き込むとカメラを認識するようになった。やったー!

しかし、まだ撮影出来なかった。 今度はWi-Fiの設定をしていなかったためだった。(説明は読もうね…)
先ほどと同じように設定画面でESP32 Camera Demo Configurationを選択し、WiFi SSIDWiFi Passwordを設定する。
ここでもう一度書き込んで、serial monitorを立ち上げると…

$ make flash
$ make monitor
・
・
・
I (914) camera_demo: Connecting to "SSID"
I (2844) event: sta ip: 192.168.0.12, mask: 255.255.255.0, gw: 192.168.0.1
I (2844) camera_demo: Connected
I (2844) camera_demo: Open http://192.168.0.12/jpg for single image/jpg image
I (2844) camera_demo: Open http://192.168.0.12/jpg_stream for multipart/x-mixed-replace stream of JPEGs
I (2854) camera_demo: Free heap: 201760
I (2864) camera_demo: Camera demo ready

ここまでの道のりは長かった…デモが動いた…!
ブラウザからこの時出力されたhttp://[IP Address]/jpgにアクセスするとjpgを取得することができる。
出力された画像がこれだ!
f:id:t3ta:20180116210645j:plain
えええ………なんで上手くいかないの………

ひとまず撮影するところまではできた(?)ので今回の記事はここまでにして、鮮明な画像を取得する方法については次回にする。

ngrokを使ってRaspberry Piのポートを公開した

帰省している間に自宅にあるRaspberry Piにログインしたくなる可能性があったので、ngrokを使ってSSHのポートを公開してみることにした。

まず、ngrokをインストールした。

$ wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip
$ unzip ngrok-stable-linux-arm.zip
$ mv ngrok /usr/local/bin
$ ngrok version
ngrok version 2.2.8

とりあえずインストールできた。
今回使用したOSはRaspbianなのでlinux(arm)版をインストールした。

次に、ngrokにSign Upした。
Sign Upは下記サイトで行うことができる。
ngrok.com

Sign Upするとtokenが発行されるのでRaspberry Piで認証を行い、アカウントに紐付ける。

ngrok authtoken xxxxxxxxxxxxxxxx

最後に、今回はSSHのポートを公開したかったので、以下のコマンドを実行した。

ngrok tcp 22

このコマンドを実行して表示されるドメインとポート番号でSSHログインすることができる。
この通りとても便利だが、ローカルネットワークに容易に入ることが出来てしまうので、利用する場合はパスワードログインを禁止するなど最低限のセキュリティ対策は行うべきだ。

Raspberry Piで動体検知した

正月帰省している間にペットのヘビやカメがが元気かどうか心配だ。
そこで、ありきたりではあるが、Raspberry Piとカメラで動体検知してサーバーにアップロードする仕組みを作った。 SNSで送ろうかなとも考えたが途中で面倒になった。サーバーにアップロードする部分はただscpをcronで定期実行しているだけなので特に触れない。

使ったものはこちら

まず始めに簡単に動体検知するためにmotionをインストールした。
motionはaptを使ってインストールすることができる。

$ sudo apt install motion

次に、motionの設定ファイル(/etc/motion/motion.conf)を書き換える。

初期設定ではdaemon自動起動するようになっているのでこれをoffにする。

daemon off

今回は動画は撮影しないのでoffにする。

ffmpeg_output_movies off

SDカードの劣化を防止するために撮影したファイルはメモリに書き出す。

target_dir /tmp/motion

設定変更は以上だ。
以下のコマンドを実行すると撮影されたファイルが/tmp/motionに保存される。

$ sudo motion -c /etc/motion/motion.conf

すごーい!
かんたーん!
多分似たような記事がQiitaにたくさんあると思う。

eBayで初めてお買い物をした

今日はeBayでガラクタ作りに使うパーツを買った.
いつも何かものを作る時にはすぐに手に入れたくなるので秋葉原秋月電子通商千石電商で買ってしまうが,今回欲しかったものは国内ではそれなりのお値段がするので,eBayを覗いてみた.
eBayで電子部品を買ったことがある人たちにとっては当たり前の事かもしれないが,その安さに驚いた.

OV2640 2Mp HD CMOS Camera Module /w Adapter Board JPEG OUT
Ublox NEO-6M GPS Module Aircraft Flight Controller For Arduino MWC IMU APM2

安い…めっちゃ安いよ…

CMOSカメラモジュール(OV2640、200万画素)、STM32F429IGボードと直結可
u-blox GPSモジュール

国内の通販サイトだと倍以上するようだ.(適当に見つけたサイトなのでもっと安いところあったら教えてください)
これで送料無料なので驚きである.

ただeBayもいいところばかりではなく,発送元にもよるが届くまでにかなり時間がかかる.

f:id:t3ta:20171220005135p:plain

かなり時間かかりますねえ…

このようにメリットデメリットはあるが,安く買いたくて気長に待つ覚悟があるのならeBayはとても良いなと思った.

「はさみを使うとよりあけやすくなります」

先日レトルト食品を食べようとして袋を開けようとしたところ,切り口のすぐそばに「はさみを使うとよりあけやすくなります」と書いてあるのを見つけた.

うわーなんか気持ち悪いなーとなんだろうなーこの感じと思っていたら,友人が下記のように省略された言葉を補ってくれた.

(この袋は){(あなたが)ハサミを使うとよりあけやすくなります}

大抵のものははさみを使うとよりあけやすくなるしその文いらなくないか?????とは思ったがスッキリした.

どういう経緯でこの文をパッケージに書くことになったのかなど疑問は残る.