TTGO T-Cameraを買った

ESP32でカメラがついているものがほしいなと思っていたら、あったので購入してみました。購入したのは送料無料だったBandgood.comで2,000円ぐらいです。オフィシャルの販売はAliExpressだと思いますが、単品で買うと送料が高いのでご注意を!

表にはカメラ(OV2640)と0.96インチ(128×64ドット)のOLED液晶(SSD1306)、モーションセンサー(AS312)と、環境センサー(BME280)が搭載されています。

ただし環境センサーのBME280はまともに動きません。なので現在販売されているものは最初からついていないみたいです。

裏側には技適マークのついているESP32-WROVER-Bが搭載。これ以外にもカメラデバイスはあるのですが、日本で使えるものは非常に少ないです。

上記とかが注意が必要で、技適がないので日本では利用できません。M5Cameraの方が複雑でこのボードはたぶん技適が通っていないバージョンです。。。

https://www.switch-science.com/catalog/5207/

スイッチサイエンスさんとかを見ると、ESP WROVERを積んでいますので日本で使えるのはケース付きの方です。

こっちは充電池も内蔵しているので、こっちのほうが良かったかも。。。ただ画面が無いので細かい確認はT-Cameraの方が便利な気がします。

動かしてみた

電源をいれるとアクセスポイントモードで起動しますので、TTGO-CAMERA-??:??というWi-fiに接続して、http://2.2.2.1に接続すると上記画面になります。

ボード上の液晶には、モーションセンサーに反応したかの表示と、IPアドレスが1画面目。2画面目には環境センサーのBME280の数値が表示されています。

ただし、私のボードではセンサーの値がデタラメで使い物になりませんでした。たぶん今から購入するとセンサーが無いバージョンが届くので、2画面目は何も表示されていないと思います、、、

自分でコンパイルする

https://github.com/Xinyuan-LilyGO/esp32-camera-bme280

上記からソースコードをダウンロードしてきます。

必要ライブラリを追加する

  • Adafruit_BME280_Library
  • Adafruit_Unified_Sensor
  • ESP8266_and_ESP32_Oled_Driver_for_SSD1306_display
  • OneButton

最終的に追加したのは上記4つです。ただし、BME280が搭載されていないボードか、ソースコードの変更が面倒な人は以下の2つだけ入れましょう。

  • ESP8266_and_ESP32_Oled_Driver_for_SSD1306_display
  • OneButton

プログラムを修正する(BME280を使う場合)

なんとそのままだとコンパイルエラーになります!

#define sensor_t    sensor_t_
#include <Adafruit_BME280.h>
#undef sensor_t

上記のAdafruit_BME280.hの中で読み込まれているAdafruit_Sensor.hがsensor_tを定義しているのですが、esp_camera.hの中でも定義されているのでエラーになってしまいます。

そのため、上記のようにAdafruit_BME280.hの中のsensor_t構造体を別名に避難してから、消します。Adafruit_BME280.hの中にあるAdafruit_Sensor.hの読み込みを消してもいいのですが、ライブラリに手を入れるのは嫌なので、上記のような黒魔術で乗り切ります。

#define ENABLE_BME280

あと、デフォルトですとBME280を使わないように上記の行がコメントアウトしてあったので、有効にします。

プログラムを修正する(BME280を使わない場合)

//#include <Adafruit_BME280.h>

上記の行をコメントアウトします。ENABLE_BME280は最初からコメントアウトされていますが、上記のライブラリ読み込みでエラーが出るので、消しちゃいます。

Wi-fiに接続させる

デフォルトだとアクセスポイントモードになるので、ちょっとしたテストには便利ですが実際使う場合には他のWi-fiルーターとかに接続したほうが便利です。

//#define SOFTAP_MODE       //The comment will be connected to the specified ssid

上記をコメントアウトして、アクセスポイントモードを無効にします。

#define WIFI_SSID   "your wifi ssid"
#define WIFI_PASSWD "you wifi password"

上記の2行を接続したいWi-fiの情報に変更します。これで接続できるはずです。

まとめ

とりあえず動かすことができました。

が、、、記事を書くために写真とか見ていたら違和感を発見!
買ったのフィッシュアイレンズの方なのに、送られてきたのが安い方のノーマルレンズだった。

箱には鱼眼って書いてあるのにー。

USB直挿しマイコン Digispark(ATTINY85)

ちょっと気になったので購入してみました。

Digisparkとは?

超小型のATTINY85を利用したArduinoマイコンです。USBに直接刺さるタイプと、ケーブル接続のタイプがあります。

Windows環境での使い方

Arduino IDEでボード追加

http://digistump.com/package_digistump_index.json をArduino IDEの環境設定の「追加のボードマネージャーのURL」に追加します。

Digistump AVR Boardsをインストールします。

パソコンにドライバをインストール

Arduino IDEの環境設定から、赤枠で囲まれたリンクをクリックします。フォルダが開きますので、「packages」「digistump」「tools」「micronucleus」「2.0a4」と開いていき、ドライバーが入っているフォルダまで移動します。

上記のinstall.exeを実行することで適切なドライバーが入るはずです。

Lチカしてみる

スケッチ例の「Digispark_Examples/Start」がLチカのサンプルです。

上記を実行してから、60秒以内にDigisparkを差し込むことでプログラムが転送されます。リセット機能がないので、強制的に抜き差しをしてリセットする必要があります。

プログラムはシンプルですね。LEDはモデルによってどこについているのかが違うようでして、私のものはpin1に接続していました。

電源確認用のLEDは常時ついていますので、もう一つのLEDが点滅するはずです。

HIDマウスにしてみる

このDigisparkはパソコン上からHIDデバイスとして認識させることができます。そのためマウスやキーボードとして見えるデバイスを簡単に作ることが可能です。

上記が「DigisparkMouse/Mouse」のスケッチ例です。

これを実行するとマウスとして認識して、自動的に動きます。外部からの入力によって動作を変えたり、スクリーンセイバーが動かないように定期的にマウスを震わせることなどができます。

パソコンとのシリアル通信

「DigisparkCDC」というサンプルがあるのですが、ちゃんと動かないと思いますので、現在非推奨になっています。

現在は「DigisparkUSB」を使ってください。こちらは仮想USBなので直接シリアルポートと認識されません。RubyとかPythonだと簡単にアクセスできるのですが、Windowsから使うのは結構面倒です。

https://github.com/digistump/DigisparkExamplePrograms/tree/master/Python/DigiUSB

上記にLinux、Mac、Windowsで使えるサンプルプログラムがありますので、それを実行して通信を試すことが可能です。

個人的にはちょっと面倒なので、シリアル通信をするのであれば他の小型ボードでいいんじゃないかなと思います。HIDデバイスとしてパソコンを制御したいとかの場合には安いので便利そうなんですけれどね。

スケッチ例を調べてみた

カテゴリスケッチ名対象内容
Adafruit_NeoPixelbuttoncyclerPINLEDのNeoPixel用
Adafruit_NeoPixeldigisparkPINLEDのNeoPixel用
Adafruit_NeoPixelsimplePINLEDのNeoPixel用
Adafruit_NeoPixelstrandtestPINLEDのNeoPixel用
DigisparkCDCCDC_LEDUSB非推奨のシリアル通信
DigisparkCDCEchoUSB非推奨のシリアル通信
DigisparkCDCPrintUSB非推奨のシリアル通信
DigisparkIRLibDigiIrDumpPIN赤外線(IR)用
DigisparkIRLibDigiIrRgbCtrlPIN赤外線(IR)用
DigisparkIRLibIRhashdecodePIN赤外線(IR)用
DigisparkIRLibIRrecordPIN赤外線(IR)用
DigisparkIRLibIRrecvDumpPIN赤外線(IR)用
DigisparkIRLibIRsendDemoPIN赤外線(IR)用
DigisparkIRLibIRsendJVCPIN赤外線(IR)用
DigisparkIRLibIRserial_remotePIN赤外線(IR)用
DigisparkIRLibIRservoPIN赤外線(IR)用
DigisparkIRLibSamsung36PIN赤外線(IR)用
DigisparkJoystickJoystickUSBHIDジョイスティック
DigisparkKeyboardKeyboardUSBHIDキーボード
DigisparkLCDBasicUsagePINI2C接続のLCD
DigisparkMouseMouseUSBHIDマウス
DigisparkOLEDDigisparkOLEDPINI2C接続のOLED
DigisparkRcSeqDigiRcSeqZodiacPINRCサーボシーケンス
DigisparkRcSeqMultiPosSwitchPINRCサーボシーケンス
DigisparkRcSeqOnePropTo5PINRCサーボシーケンス
DigisparkRcSeqRcSeqAdvancedDoorsPINRCサーボシーケンス
DigisparkRcSeqRcSeqDemoPINRCサーボシーケンス
DigisparkRcSeqRcSeqZodiacPINRCサーボシーケンス
DigisparkRcSeqUneVoieVers8PINRCサーボシーケンス
DigisparkRGBDigisparkRGBPINPWM出力(PB2)
DigisparkSoftRcPulseInSoftRcPulseInDebugPINpulseIn()関数のノンブロック版
DigisparkSoftRcPulseInSoftRcPulseInDemoPINpulseIn()関数のノンブロック版
DigisparkSoftRcPulseInSoftRcPulseInOutDemoPINpulseIn()関数のノンブロック版
DigisparkSoftRcPulseOutKnobPINパルス出力
DigisparkSoftRcPulseOutknob_moyenneePINパルス出力
DigisparkSoftRcPulseOutSerialServoPINパルス出力
DigisparkSoftRcPulseOutSoftRcPulseInOutDemoPINパルス出力
DigisparkSoftRcPulseOutSweepPINパルス出力
DigisparkSoftRcPulseOutSweepNoDelayPINパルス出力
DigisparkSoftRcPulseOutUsb2ServosPINパルス出力
DigisparkSoftSerialDigi_1io_SerialDbgPINシリアル通信
DigisparkSoftSerialSoftSerialExamplePINシリアル通信
DigisparkSoftSerialTwoPortReceivePINシリアル通信
DigisparkTinyPinChangeEdgePINPINの状態変更検知
DigisparkTinyPinChangeFallingEdgePINPINの状態変更検知
DigisparkTinyPinChangeRisingEdgePINPINの状態変更検知
DigisparkTinyPinChangeTinyRcScopePINPINの状態変更検知
DigisparkTinySoftPwmSoftPwm13PinsPINソフトウエアPWM
DigisparkTinySoftPwmTinySoftPwmDemoPINソフトウエアPWM
DigisparkUSBDigiBlinkUSBDigiUSB(仮想USB)
DigisparkUSBDigiScopeUSBDigiUSB(仮想USB)
DigisparkUSBDigiUSB2LCDUSBDigiUSB(仮想USB)
DigisparkUSBEchoUSBDigiUSB(仮想USB)
Digispark_ExamplesBasicRobot汎用サンプル
Digispark_ExamplesBT_BLE_Echo汎用サンプル
Digispark_ExamplesBT_or_BLERobot汎用サンプル
Digispark_ExamplesCharlieplex汎用サンプル
Digispark_ExamplesCharliePlexMarquee汎用サンプル
Digispark_ExamplesEEPROM汎用サンプル
Digispark_ExamplesExpander汎用サンプル
Digispark_ExamplesGPS汎用サンプル
Digispark_Examplesi2cScanner汎用サンプル
Digispark_ExamplesInfrared汎用サンプル
Digispark_ExamplesMeshGeneralExample汎用サンプル
Digispark_ExamplesMotorShield汎用サンプル
Digispark_ExamplesRfm12b汎用サンプル
Digispark_ExamplesStart汎用サンプル
Digispark_ExamplesWiFiClientGetExample汎用サンプル
Digispark_ExamplesWiFiClientPostExample汎用サンプル
Digispark_ExamplesWiFiServerExample汎用サンプル
Digispark_ExamplesWiFiServerRobot汎用サンプル
Digispark_Examples_9DOF_Shield汎用サンプル
NunchukArduinoNunchukDemoPINWii用ヌンチャック
NunchukDigisparkJoystickDemoPINWii用ヌンチャック
NunchukDigisparkUSBDemoPINWii用ヌンチャック
OneWireDigispark_ExamplePIN1-Wire通信用
RF24digispark_receivePINnRF24通信用
RF24digispark_sendPINnRF24通信用
SPIBarometricPressureSensorPINSPI通信用
SPIDigitalPotControlPINSPI通信用
WS2811digisparkPINWS2811 IC用(LED制御)

あまり情報がないので、スケッチ例を全部見てみました。結構関係なさそうなのも入っているので以下のスケッチ例だけ見ればいい気がします。

  • Digispark_Examples/Start
  • DigisparkMouse/Mouse
  • DigisparkKeyboard/Keyboard
  • DigisparkUSB/Echo

まとめ

スイッチを押したら特定の動作をするなどの、キーボードやマウス入力装置作成マイコンとしてはかなり優秀だと思います。

値段も安いので、一度触ってみてもいいのかな? ただちょっとでも面倒なことをやるのであれば、もっと普通のマイコンのほうが開発しやすいとは思います。

マイコン学習の始め方とステップアップ

ArduinoやESP、mbed、Raspberry Piなどいろいろなマイコンがありますが、おすすめの学習方法をまとめたいと思います。

最初はArduino UNOがおすすめ

世界中で使われているマイコンです。簡単な電子工作と共に使ったり、3Dプリンタの制御などでも利用されています。

特徴としては、あまり高性能ではないですが利用しやすいのと安価で充実した環境が構築できます。

学習セットがおすすめ

私も購入しましたが、上記のセットがおすすめです。三千円前後でArduino UNOと、学習用の部品セットが手に入ります。(もっと部品がついている最終版スタータキットでもいいですが、倍の値段になります)

付属品CDに日本語マニュアルが入っていない場合には、ホームページから最新版をダウンロードすると日本語のチュートリアルが入っています。

マイコンの基板だけ購入しても、何をしたらいいのかわかりませんが、部品セットとチュートリアルがあれば、どんなことができるのかを実験しながら学ぶことができます。Arduino以外のマイコンでも、部品やチュートリアルの回路などは流用できるので無駄になりません。

ELEGOO以外にもいろいろなメーカーがセットを出していますが、日本語チュートリアルが充実しているのはELEGOOになります。

予算がない人はまずはホームページから最新版をダウンロードして中身を見るだけでも学習はできると思います。

Arduino UNOのプラスアルファ

ロボット

実際にものを動かしてみたいという場合には、ロボットのキットがありますので購入してみるのもいいかもしれません。

中身を確認したい場合には、ホームページからマニュアルなどがダウンロードできますので、興味があれば購入する前に確認することができます。

Grove

GroveとはSEEED社が開発をした、コネクタの規格です。学習セットではブレッドボードジャンパー線と呼ばれる線で接続をしますが、もっと簡単に接続するためのものです。

たとえばI2Cのセンサーを利用する場合には、I2Cと書いてあるところに線をつなげるだけで使えます。

Groveは非常に楽に接続が可能で、試験などで入れ替えも簡単にできます。ただし、コネクタが共通なだけで、自分で同じように接続すれば利用することも可能です。

Arduino以外でもGroveの部品は利用することが可能ですので、興味があればチャレンジしてみるのもいいと思います。ただし、普通の部品に共通のコネクタをつなげている関係で単品で買うよりは高くなります。

NanoとMEGA

ArduinoにはNanoやminiと呼ばれる小さい基板と、MEGAと呼ばれる大きな基板があります。使える端子数などが違いますので、用途に応じて選ぶことができます。

Nanoはmini USB端子を使っているものが多いのでご注意ください。私はMicro USB端子になるべく統一しているので、mini USBの基板は極力避けています。

基本を学んだら無線対応のESP32

ESP32とはArduinoでWi-fiとBluetoothが利用できるマイコンです。電波法の関係で日本で利用できるものは技適呼ばれるマークが付いているものだけになりますのでご注意ください。

ついていないものは非常に安いですが、日本で利用できるESP-WROOM-32と呼ばれるモジュールを搭載しているか、個別に申請している商品を利用するようにしましょう。

また、似たようなモジュールでWi-fiのみが利用できるESP8266(ESP-WROOM-02)もありますが、あまり値段差がないので高性能なESP32をまずは触ってみるのがいいと思います。

Bluetoothの利用例は、シリアルケーブルでパソコンに転送していたデータを簡単に無線化できます。シリアルポートの代わりにBluetoothを利用するようにするだけで、簡単に無線化ができます。

Wi-fiの利用例は、インターネット上に直接データを転送することができます。部屋の温度を定期的にアップして、グラフで確認をしてみたり、一定値を超える温度になったらメール通知などをしてくれるサービスなどが無料で提供しているサイトなどもあります。

ESP32のプラスアルファ

M5Stack

M5StackはESP32を利用したマイコンで、小さい画面にボタンやmicroSDカード、スピーカー、Grove用のコネクタなどがあります。

Stackの名前の通り、バッテリーなどの拡張用モジュールを積み重ねて利用することができます。BASICの他にも加速度、ジャイロ、磁気を計測可能な9軸センサを搭載したGrayや高性能なFireなどもあります。

最近はもっと小さいCameraや腕時計ぐらいのStickも販売されています。画面がついているので非常に使いやすいですが、できれば最初はプレーンなESP32の開発ボードから入ってもらい、他のボードで動かないときには、プレーンなESP32では動くのかを確認して欲しいです。

ここで自分の興味の方向性を確認する

Arduino UNOとESP32を触ったところで、ちょっと自分がどんなものに興味があるのかを確認したほうがいいと思います。

もっと細かい制御がしてみたい→mbed

Arduinoは非常に便利ですが、細かい制御や高度な制御には向いていません。もっと細かい制御をしたい人にはmbedをおすすめします。

mbedとはブラウザ上でプログラミングして、出来上がったプログラムをダウンロードして、USBメモリみたいに認識しているマイコンにコピーするだけで動かすことができる仕組みです。

mbed対応のマイコンは大量にありすぎて、選ぶことが難しいです。上記ではArduinoとのピン互換性が高いNUCLEO-F401REと、すこしピンの互換性は下がりますが高性能のNUCLEO-F446REを紹介します。

両方ともSTM32と呼ばれるチップを利用した、オフィシャルの開発用ボードになります。STM32はArduinoも動きますので、mbed専用ではありません。そしてSTM32独自の開発環境もありますので自分の好きな環境で開発することができます。

STM32以外のチップを利用したmbedも大量にあって、用途に合わせてチップを選ぶことになりますが、STM32の中でもたくさんありすぎて選ぶのが大変です。

上記がSTM32の開発ボードのナインナップですが、Nucleo-32がArduino nanoに相当する小さいボードで、右のNucleo-144がMEGAに相当する大きいボードです。通常は真ん中のNucleo-64から選ぶのがいいと思います。

高性能のチップと省電力のチップでそれほど価格は違わないので、バッテリーで長時間動かすなどでない場合には、まずは真ん中の上の方にある高性能のチップを使っておけばいいと思います。

チップ単体の価格は非常に安いわりに高性能のため、実際の商品化する際には利用しやすいとは思いますが、趣味のレベルだとESP32で速度が足りない場合にSTM32の利用を検討すればいいかなと思っています。

ただSTM32は無線機能を持っていないので、無線機能を使う場合には別途ESP32やESP8266に接続して、通信部分だけ任せるみたいな使い方が多いみたいです。

STM32以外だとPICとかAVRも調べてみたも楽しいと思います。

もっとパソコンみたいな制御がしたい→Raspberry Pi

USB接続のカメラとかプリンターを制御したいみたいな場合には、Raspberry Piをおすすめします。Raspberry Piはマイコンではなく、小さいパソコンです。

本体のみのものもありますが、コネクタが特殊なのと、電源の要求が厳しいのでセットのものを選んでみました。

大きなRaspberry Piと、小さなRaspberry Pi Zeroがあります。バリエーションで無線が使えるものと、使えないものや、細かい性能が違うものがありますので最新の情報で調べ直してから購入したほうがいいと思います。

小さいパソコンなので、パソコンで出来ることは、大抵できますが、逆にマイコンではないのでマイコンで利用していたようなアナログ入出力などがそのままではできません。

I2Cなどはありますので、I2C経由でADCを接続するなどが必要になります。

Raspberry PiでGroveコネクタを利用するためのGrovePiという拡張ボードもありますが高いです。これはアナログ入出力などが使えるようにICを搭載して、変換しつつ簡単に使えるようになっているためです。

まとめ

ほんとうはmbedがブラウザだけで開発できるので、簡単なのですがそれを使って電子工作をするとかになると書籍と、部品を購入したりと結構面倒になります。

その点Arduinoのセットだと日本語のチュートリアルもついているのと、開発環境を整える練習もできるのでトータルで始めやすいのかなと思います。

直流安定化電源について調べる

いつかはちゃんとしたのを購入しないといけないなと思って調べました。

電源の種類

PCのUSB端子

ESP32とかの開発時にはパソコンに接続して開発をしています。省電力の場合これで十分ですよね。

ただ、パソコンからの電源の場合には0.5A以上が出なかったり、思ったよりノイズがでていたりするので、パソコンとの接続が必要ない場合には、他の電源を利用したほうがいい場合があります。

USB電源

Raspberry Pi3だと2.5Aぐらい必要になるので、ちょっと選択に困ります。2.4Aまでだと選択肢が多いですが、2.5Aだと途端に少なくなります。

最近のお気に入りは電源タップにUSB充電端子がついているもの。とりあえず一本持っていると何かと助かります。

最近は減りましたが、Quick Chargeとかの制御が入っていないものは、接続したUSB機材がショートしたときに電流制御されずに、煙を吐くのでなるべくならば制御付きの物がおすすめです。

モバイルバッテリー

モバイルバッテリーは便利なのですが、流れる電流が少ないと省電力で出力がなくなったりするので注意が必要です。

充電しながら使えないものや、充電完了した際に電源が一瞬落ちるものなど癖があります。安いものはそもそも電源が安定していなかったりと評判を確認してから購入したほうがいいでしょう。

電圧固定スイッチング電源

利用する電圧が確定している場合には、スイッチング電源が安くて安定していそうです。

とはいえ、中国製が多いので、スペック近くまで常時使うことはできず、かなり余裕をみて使わないと安定稼働しなさそうです。

直流安定化電源

昔ながらの直流安定化電源です。主に無線機用に使われていて、電圧を変更することができます。欠点としてはヒューズとかを入れておかないと、過電流が流れた場合にすぐに接続している機材が壊れてしまいます。

すでに持っている場合に流用することはできますが、電子工作用には適していません。

定電流モード付き直流安定化電源

定電圧(CV)、定電流(CC)とかの表示や機能がついている安定化電源です。

定電流は1Aなどにセットすると、1A以上の電流が流れません。回路がショートしたときにも燃える可能性が減ります。

一般的にはこの電源を持っていればいいのですが、オーディオとかのノイズが影響を与える場合には、国産の高いモデルを購入したほうが安全です。

学習サイト

https://www.kikusui.co.jp/comic/
マンガでわかる直流安定化電源

国産電源で老舗の菊水が公開しているコミックです。これをとりあえず読んでみると概要が把握できると思います。

まとめ

菊水などの国産電源がほしいのですが、高いのでちょっと個人だと手が出にくいですね。型落ちをヤフオクで購入するか、安い中華メーカーの電源をまずは購入するのがいいのかもしれません。

オシロスコープとロジックアナライザ入門

電子工作をやっていると、欲しくなるアイテムであるオシロスコープとロジックアナライザについて調べてみた。

スペックについて

基本的には何本の信号線を測定できるのチェンネル数と、どの周波数までを測定できるかで決まる。(あとは内部のメモリ量もたぶん重要)

チェンネル数

オシロスコープは通常2で、4もある。それ以上は非常に高いのでホビーユースでは使わない。

ロジックアナライザは通常8で、16もある。車用のだと32チェンネルとかもある。

周波数

卓上型のオシロスコープだと20MHzから100MHzぐらいが基本みたいです。小型のハンディータイプですと200KHzから2MHzぐらいが一般的です。

ロジックアナライザでは安いものが24MHzで、100MHzぐらいまでがホビーユースです。

一般的な選び方

いろいろなサイトをみたのですが、測定したいものに対して2倍から10倍の周波数を持つ、適切な機種を選んでねって書いてあって、まったく初心者にはわかりません。

そこで、電子工作で利用する通信プロトコルなどを選んで、実際にどれぐらいの周波数が必要なのかをわかりやすくしてみました。

用途別周波数、チャンネル数一覧

プロトコル周波数チャンネル
PS/215KHz2
UART(MIDI)31.25Kbps2
UART(RS-232C)1.2Kbps~115.2Kbps2
PWM1.2Kbps~312.5Kbps1
I2C100KHz~400KHz2
CAN10Kbps~1Mbps2
PCM64kbps~2.048Mbps4
LPT10MHz17
USB 1.112Mbps2
AC9712.288MHz5
SPI1MHz~24MHz4
Compact Flash 4.133MHz26
SD2.0/SDIO52MHz6
USB 2.01.5Mbps~480Mbps2

ざっくりと電子工作で利用しそうなものを列挙してみました。SPIとか機材が対応していれば周波数上限がないものはESP32とかで安定動作するであろう周波数を入れています。

チェンネル数的にプリンタのLPTとかが多いですが、いまどきパラレルケーブルで接続なんてしないですよね?

実際のところ、I2CとUARTを測定するのであれば、できれば1MHz以上の機種。標準速の4MHzのSPIを測定するんであれば10MHz以上の機種になると思います。高速のSPIを測定するのには100MHz、USB2.0を測定するのには1GHz以上の機種になります。

機種別おすすめ

Arduino 簡易オシロスコープ

九州工業大学情報工学部にて公開している、簡易オシロスコープです。

Arduinoに抵抗とコンデンサを接続して使う簡易オシロスコープです。2チェンネルで50KHzぐらいまで計測が可能です。

実際のところ、実用というよりは実験的なものになりますが非常に安価で試すことが可能です。

小型オシロスコープ DSO138 2CH 1Mbps

組み立て式のオシロスコープです。組み立て済みのものと、自分で組み立てるDIYキットがあります。ケースの付属などで値段が違っていますが、中身の設計は基本的には同じです。

DSO138以外にも似たようなオシロスコープがありますので、予算に応じて選ぶことができます。

1MHzで2chですのでI2CとUARTの信号をみることはできるとは思いますが、実際のところロジックアナライザで確認したほうが楽なので、ちょっと便利なテスターみたいな使い方になると思います。

据え置き型オシロスコープ 2ch, 4ch 100MHz

どうせ買うのであれば100Mhz対応のオシロスコープがいいと思います。ただ使いこなせるかといわれると、かなり難しいです。

I2CとUARTの信号は2chで問題ありませんが、SPIの信号を見るためには4ch必要です。

USB接続小型ロジックアナライザ 8CH 24MHz

パソコンに接続して使うロジックアナライザです。スペック上は変わらないのですが、左型の小型のは非常に当たり外れがあるみたいで、開発ボードのEZ-USBの方がおすすめです。

この商品にはソフトが付いてきませんので、無料で使えるsigrokを入れて使います。ちょっとドライバーとかのセットアップが複雑なので、その点はちょっとマイナスです。

SPIの計測は低速に設定すれば問題ないと思いますが、速度を上げると安定しない可能性があります。

USB接続ロジックアナライザ 16CH 100MHz

この機種以外にもありますが100MHz機種の紹介です。ただしこの機種は3チャンネルまで100MHzで計測できますが、6チャンネルで50MHz、9チャンネルで32MHz、16チャンネルで16MHzと周波数が変わります。

SPIは4チャンネル必要なので、50MHzでの測定になります。24MHzのSPIを測定できるぎりぎりですが、もう少し速度を落としたほうがいいのかもしれません。

Mixed-Signal Oscilloscope(MSO)

MSOとはアナログのオシロスコープに、デジタルのロジックアナライザを搭載した機種です。2chのオシロスコープと16chのロジックアナライザみたいな構成が多いです。

まとめ

本当は国産とか、海外の定番品が一番安全ですが、ちょっと高いんですよね。趣味で使うんだったら安めのロジックアナライザぐらいで十分な気がします。

オーディオとか、アナログ回路をやるんだったら、オシロスコープが必須ですよね。あとノイズとかの調査とか?

https://www.denshi.club/pc/measure/adalm10001.html
オーディオ帯域の波形を見る手軽なツール ADALM1000 (1) | 電子工作の環境向上

上記だとオーディオの場合1MHzぐらいまでなので、5MHz以上の帯域があればよいので一般的に販売されている20MHzの機種がおすすめ。ただ、発振などを調べるのには50MHz以上が必要と書いてあります。20MHzまでであればUSB接続で1万円以下の機種もありますが、そもそも必要なかったか、もっと上位機種に買い替えそうな予感がします。

LoRaWANについて調べてみた

参考にした資料

LoRaWAN 1.0.3仕様書(英文)

https://lora-alliance.org/resource-hub/lorawantm-specification-v103

この資料が一番正しいのですが、流石に読むのが辛いので、他の資料で全体的に調べてからピンポイントで確認する用途に使ったほうがいいです。

本文では引用時に「仕様書」と記述します。

LPWAを牽引する「LoRa」の概要と利用動向

http://www.soumu.go.jp/main_content/000450875.pdf

総務省の会議で利用された、LoRaのチップを製造するセムテック・ジャパン合同会社の資料。全体の概要を知るためには一番いい資料だと思います。

本文では引用時に「概要」と記述します。

What is LoRaWAN(英文)

https://lora-alliance.org/resource-hub/what-lorawantm

LoRa Allianceオフィシャルの説明資料です。「概要」でも引用されており、英文ではありますがわかりやすい資料です。

本文では引用時に「What」と記述します。

LoRaWAN端末番号の設定(引用なし)

「概要」と同じく総務省の会議で利用された資料です。データ送信手順などを「概要」より詳しく説明しています。

LoRaとは?

LoRaとは電波の変調方式で、FM放送とかAM放送みたいなものです。特徴として長距離を低電力で通信するために設計されています。ただしLoRaWANはLoRa変調の他にFSK変調も利用可能ですので、すべてのLoRaWANがLoRa変調を資料しているとは限りません。

また、LoRa変調はLoRaWAN以外でも利用できますので、LoRaWANではないLoRa通信も存在しているので注意しましょう。

日本だと920MHz無線モジュールやLoRaと記述されているが、LoRaWANと書いていないものについては、LoRa変調を利用しているが、LoRaWANと互換性のない独自通信規格です。

用途が固定されており、該当モジュールで問題がない場合にはLoRaWANではなく、独自通信規格の方が日本の場合、安価で購入できるとは思います。

LoRaWANとは?

「Waht」8ページ

LoRaWANとは通信プロトコルとシステムアーキテクチャを定義したものです。通信物理層はLoRa変調、もしくはFSK変調を利用し、長距離通信に対応しています。

アーキテクチャではノードのバッテリー寿命やサービス品質、セキュリティーなどを定義しています。

End Nodes

センサーなどを利用してデータを収集したり、アプリケーションサーバーからのデータを表示したりする端末です。

日本だと単純にノードと表記されていることが多いと思います。

Concentrator/Gateway

ノードと実際に通信をするゲートウェイ装置です。ノードと上位のネットワークサーバーとのやり取りを転送する役目を持っています。

LoRaWANの場合、ノードとアプリケーションサーバー間が暗号化されているので、ゲートウェイは通信されている内容を確認することはできません。

また、ゲートウェイもノードと同等の機能を持っている場合が多く、自身で取得したセンサー情報などを上位にアップすることが可能です。この場合にはLoRa変調などの無線通信を行わず、直接上位サーバーに送信されます。

ゲートウェイは自分で設置することも可能ですし、ネットワークサーバーが提供している公開ゲートウェイもあります。ただし、現状ネットワークサーバーが提供している公開ゲートウェイの数は非常に少なく、自分で設置する必要がある場合がほとんどです。

Network Server

ここがわかりにくいところなのですが、ゲートウェイが接続されるネットワークサーバーは自分で構築することも可能ですし、無償サービスの他、商用サービスもあります。

接続するゲートウェイが、利用したいネットワークサービスに接続されている必要があるので注意してください。また、特定のノードしか接続を許可しないゲートウェイも存在するのでご注意ください。

(商用)SORACOM Air for LoRaWAN

https://soracom.jp/services/air/lora/

日本で一番有名な商用ゲートウェイだと思います。現在はKDDIグループに所属しており、積極的に情報を発信しています。

https://lora-space.soracom.jp/map

上記で共有利用可能なゲートウェイがわかりますが、渋谷とか新宿にはたくさん設置されています。1つだけだといつなくなるか心配ですが、たくさん設置されている人はわざわざゲートウェイを新規で設置する必要はなさそうですね。

自分だけが使えるゲートウェイと、SORACOMユーザー全員が使える公開ゲートウェイを選ぶことができます。

端末ごとにネットワークサーバーに関する費用がかかるので、しっかりしたサポートがあるのの反面、もろもろ費用はかかってきます。

(無償)The Things Network

https://www.thethingsnetwork.org/country/japan/

無料で使える互助会的なサービスネットワークで、TTNと表記されることが多いです。オープンソースで公開されており、同じものを自作することも可能です。

SORACOMのような商用ネットワークサーバーを利用しない場合、まずはTTNに接続することになると思います。

Application Server

ネットワークサーバーはノードとの通信を行いますが、ネットワークサーバー自体ではそのデータを収集するだけで、特殊な処理を行いません。

そこで外部のアプリケーションサーバーと連携して、ノードからのセンサーデータなどを処理を行います。

図ではノードとアプリケーションサーバー間が、暗号化されてセキュアだと書いてありますが、ノードからの暗号化通信をネットワークサーバーが復号化している場合もありますのでネットワークサーバーの実装次第だと思います。この場合でもネットワークサーバーとアプリケーションサーバーはSSLなどで別途暗号化されていますので外部からはセキュアですが、ネットワークサーバーが乗っ取られた場合には通信内容が漏洩してしまいます。

通信クラス

「概要」の9ページから詳細な説明があります。基本はクラスAしか使わないと思いますので、概要だけ説明します。

「What」10ページ

クラスA

一番基本的なクラスで、ノード側から通信を行い、送信後にゲートウェイからの受信を行います。一番バッテリー消費が少ないクラスです。

反面送信をしないと受信をしないので、1日1度しか送信をしないノードの場合、受信タイミングが遅れてしまいます。また、送信タイミングもノード側の時計に依存しますので、1日に何秒もずれるような時計を使っている場合、どんどん送信時間もずれてきてしまいます。

ノード側が一定間隔で送信するため、ほぼ同時に送信する端末がいた場合にはお互いに邪魔をしてしまうことがあります。

クラスB

ビーコンというキーワードが出てきたらクラスBです。ゲートウェイから定期的にビーコンを送信し、ノードがビーコンを受信したらノードからデータを送信することが可能です。

大きなデータをノードから送信する場合には、クラブBなどで他の通信がなるべく発生しないようにしたり、タイムスケジューリングをすることができます。

現状のところ検証段階のため、あまり利用されていないようです。

クラスC

このクラス以外は送信後に一定時間スリープをして省電力モードになっていますが、クラスCは送信時以外は常時受信をするクラスです。

バッテリー駆動ではなく、常時電源接続されている環境用であり、省電力を売りにするLoRaWANと矛盾しますが、遠距離通信や検証時には便利なモードです。

地域別サマリー

「What」12ページ

日本は920-925MHzと規定されていますが「ARIB STD-T108」という運用ルールがあり、実際に使える周波数はもっと狭くなります。

https://qiita.com/ammo0613/items/d952154f1195b64dc29f
LoRaWANと920MHzのルール

上記サイトにまとまっていますが「ARIB STD-T108」では920.6MHzから923.4MHzが利用できるとあります。

https://www.thethingsnetwork.org/docs/lorawan/frequency-plans.html
LoRaWAN Frequencies Overview

TTNの資料によると更に狭い周波数が記述されていました。

Uplink(ノード→ゲートウェイ)

  1. 923.2 – SF7BW125 to SF12BW125
  2. 923.4 – SF7BW125 to SF12BW125
  3. 922.2 – SF7BW125 to SF12BW125
  4. 922.4 – SF7BW125 to SF12BW125
  5. 922.6 – SF7BW125 to SF12BW125
  6. 922.8 – SF7BW125 to SF12BW125
  7. 923.0 – SF7BW125 to SF12BW125
  8. 922.0 – SF7BW125 to SF12BW125
  9. 922.1 – SF7BW250
  10. 921.8 – FSK

この中でチャンネル9と10は通常のLoRaではないので922.2MHzから923.4MHzまでの7チャンネル利用しています。

Downlink(ゲートウェイ→ノード)

  • Uplink channels 1-10 (RX1)
  • 923.2 – SF10BW125 (RX2)

クラスAの場合、ノードから送信した場合、2度ゲートウェイからの受信を待ち受けます。1度目が送信に利用したチャンネルで、2度目がAS923の送信デフォルトチャンネルである923.2MHzです。

送信確認

LoRaWANでは送信したデータを相手が受信できたか確認する機能があります。デフォルトはオフですが、Confirmed Dataと呼ばれる送信確認を受け取った場合にはACKと呼ばれる受信確認を送信します。

Uplink(ノード→ゲートウェイ)

ノードからゲートウェイにConfirmed Dataを送信した場合に、ゲートウェイが受信できたかをゲートウェイからノードにACKを送信します。

この場合にはネットワークサーバーやアプリケーションサーバーは関与しませんが、送信確認が取れているデータということは確認できます。

Downlink(ゲートウェイ→ノード)

アプリケーションサーバーからノードにデータ送信を依頼した場合、ネットワークサーバーにキューイングされており、ノードからの送信があった場合にゲートウェイがネットワークサーバーを確認し、キューイングされていた場合、ノードにデータを送信します。

ノードは受信したデータがConfirmed Dataの場合、ゲートウェイにACKを送信します。ゲートウェイはACKを受信した場合には、ネットワークサーバーを経由してアプリケーションサーバーに送信が完了した旨を連絡します。

技適の費用を調べてみた

通すことは無いだろうが、気になったので調べてみました。

技適とは?

日本国内で通信をする場合、技適と呼ばれているものが必要になります。正式には「技術基準適合証明」もしくは「工事設計認証」です。

技術基準適合証明とは

無線機材ごとに書面と試験を行い、日本の法律に適合していることを証明する仕組みです。実際には全数チェックではなく、ランダムで抜き出した機材を検査して、全数が合格する必要があります。

主に小ロットの製品の場合に使われる証明です。

工事設計認証とは

大量生産した無線機材に対して、一括して認証をする仕組みです。一定した品質で製造されていると仮定して、任意の1台に対して書面と試験を行います。

費用

https://www.telec.or.jp/services/tech/price.html

TELECのサイトに詳細がありましたので、その数字にて計算していきます。

ターゲット機材として、一番安い特定小電力機器のその他を選びました。アンテナ一体型だと暗室利用が必要で10万円追加でかかりますが、外付けアンテナの機材とします。

技術基準適合証明の場合

基本料

初回は2万円、同じ製品を同じ条件で再申請する場合には1.3万円。

検査費用

抜き取り検査のため、申込台数によって検査台数が変わります。

https://www.telec.or.jp/services/tech/item.html

上記によると

申し込み台数抜取台数
1〜2全数
3〜152
16〜252
26〜503
51〜905
91〜1508
151〜28013
281〜50020

となっていました。

1台目は2.4万円で、2台目以降は1.6万円です。

試算表

申込台数検査台数基本料1台目費用以降費用合計費用1台あたり
1120,00024,00016,00044,00044,000
2220,00024,00016,00060,00030,000
10220,00024,00016,00060,0006,000
25220,00024,00016,00060,0002,400
26320,00024,00016,00076,0002,923
50320,00024,00016,00076,0001,520
51520,00024,00016,000108,0002,118
90520,00024,00016,000108,0001,200
91820,00024,00016,000156,0001,714
100820,00024,00016,000156,0001,560
150820,00024,00016,000156,0001,040
1511320,00024,00016,000236,0001,563
2001320,00024,00016,000236,0001,180
2801320,00024,00016,000236,000843
2812020,00024,00016,000348,0001,238
5002020,00024,00016,000348,000696

抜き取り台数が増える直前の25台、50台、90台、150台、280台あたりで頼むのが単価が安くなりますね。

工事設計認証の場合

基本料

30万円。ISO9001認定を受けていない工場だと6万円加算。

検査費用

9万円。

合計費用

39万円

技術基準適合証明と工事設計認証の使い分け

500台に対して技術基準適合証明を取得した場合が約35万円なので、500台以上売れる見込みのないものは技術基準適合証明の方が適していそう。

ただし、技術基準適合証明は、試験用の改造が必要になった場合には全数に対して行う必要がある。改造に手間がかかるのであれば、工事設計認証で試験端末だけ改造をしたほうが安くなる場合もあると思います。

この他の費用

申請で必要な資料作成費用

アンテナなどの特性データが必要なので、製造元から提供されないと検査機関に持ち込んで計測する必要があります。

申請代行費用

自分で申請しない場合には、申請代行を使うと思いますのでその費用がかかります。

最後に

今回の計算は1周波数帯だけの試験なので安いですが、パソコンなどの場合Wi-fi(2.4G, 5G)とBluetoothで3周波数帯になるので、その分高くなると思います。

技適データベースを見ていて、工事設計認証じゃなくて技術基準適合証明だと、あまり数が出ない想定なんだなって思うのと、販売数が申請内容からバレちゃうってのもやだなって思いました。

また、海外の製品だと技適マークがついているけれど、番号が書いてないモジュールとかが販売されていて、技適データベースで調べると日本で正規販売しているものだけ個別で技術基準適合証明を取得している場合があったりして、間違って買ってしまいそうになりました。

電波利用ホームページのWeb-API 機能を利用して、技適を検索できるようにした

技適を調べていたら、Web-APIを提供していることを知ったので、試してみました。

本家のサイトだと、検索がいまいちイケてないですので、全件データを抜いてきて自由に検索できるようにしました。

作成したサイト

https://lang-ship.com/giteki/

概要

JSONで年度ごとにデータを取得してきて、それをSQLiteにいれました。そのDBを検索して表示しています。負荷を考えて過去取得したデータはファイルで保存してありますが、過去データに更新が入ることがなるんですよね、、、特に備考欄で社名変更があるので、たまに全件取り直さないと差分が出るかもしれません。

現状は全角文字を半角に置換しているぐらいで、元データをあまり触っていません。

サンプルURL

https://lang-ship.com/giteki/search.php?typeName=ESP32

こんな感じの検索用URLだとESP32を含む技適が一覧表示されます。

https://lang-ship.com/giteki/detail.php?typeName=ESP32

こんな感じの表示用URLだとESP32を含む技適が詳細表示されます。

今後の拡張

  • データの自動更新がないので、定期的に更新をするようにする
  • 周波数帯で検索できるようにしたい!

Arduinoで赤外線サーモグラフィーカメラを使う

ふと発見したので、調べてみた。

AMG8833(8×8)

Panasonic製のセンサーで、8×8の簡易的なIR Arrayセンサーです。エアコンなどで人がいる場所を検知するために設計された感じかな?

手の温度も検知できるので、手振りでのジェスチャー入力などにも利用が可能です。反面解像度が8×8の64ドットしかないので、細かいデータは取れません。

上記みたいに本来の解像度は低いですが、がんばってバイリニア補間などを使うことによって、擬似的に解像度を上げることができます。

異常発熱している場所はどこかって調べるぐらいの用途であれば、これで十分なのかもしれません。センサーを移動しながら探せばなんとなくヒートマップがわかるはず。。。

Melexis MLX90621(16×4), MLX90641(16×12), MLX90640(32×24)

これは日本だとあまり取り扱いがないのかな? キットとして組み込んで販売している人はいましたが、Amazonだと取り扱いがありませんでした。

ベルギーの会社が作っていて、こちらもエアコンとか、オーブンの中の温度管理で使われているようです。人の移動などを検知しようとしたら正方形の解像度より、横長の方がいいだろうってことで、センサーも横長になっています。

AMG8833に比べると少し高いですが8×8だと使いにくい用途にはいいのではないでしょうか?

FLiR Lepton

ガチの赤外線サーモグラフィーカメラを販売している会社の、センサー部分になります。

  • FLiR Lepton 1.5(80×60)
  • FLiR Lepton 1.6(80×60)
  • FLiR Lepton 2.0(80×60)
  • FLiR Lepton 2.5(80×60)
  • FLiR Lepton 3.0(160×120)
  • FLiR Lepton 3.5(160×120)

上記パターンがあって、基本はカメラだけってよりは、開発ボードと一緒に購入するので組み合わせると結構高額になってしまいます。

これだけの解像度があれば、あまり補間しなくてもしっかりと姿が見えます。

ArduinoでNFC(FeliCa, rfid)を使いたい

RFIFカードリーダーモジュール

定番品がいろいろあって、UNOとかのキットにも含まれていたりします。

ただし、これって電波法的にグレーで、たぶん使っちゃだめなやつだと思います。多くのRFIDは技適じゃなくて誘導式読み書き通信設備とかに該当しますので、規定以下の電波強度しか出しちゃだめなはずです。

多くの製品は外国の基準なので、日本の基準を超えているはずです。非接触のアンテナに電力を届けるためには数センチの距離に近づける必要がありますが、実際の電波はばりばり遠くまで届いているみたいです。

SONY RC-S620/S

通常は一般販売されていないモジュールですが、スイッチサイエンスさんが販売してくれています。通常はフラットケーブルのままだと使いにくいので、同じくスイッチサイエンスさんのピッチ変換基板を一緒に使うのが定番となります。

UARTで通信できますので、開発自体は簡単にすることが可能だと思います。組み込みで利用する場合には、これ一択といって良い状況です。

USB HOSTシールド+PaSoRi

RC-S620/Sだと面白くないので、他の方法がないか探してみました。

USB HOSTシールドを利用して、USB経由で利用している人を発見しました。

ただし、対応しているPaSoRiがRC-S320, 330, 370の3機種のみです。最新型のRC-S380には対応していません。ただPythonなどでRC-S380にアクセスする方法などは、わりと公開されているので頑張れば自分で対応できるような気もします。

RC-S320あたりが自宅にあったかもしれませんので、USB HOSTシールドだけ購入して検証してみようかな、、、