μアンペア・オシロを購入

また電子工作ネタですが、μアンペア・オシロなるものを購入しました。
bit-trade-one.co.jp
電子ペーパーの消費電流を測った時に、家にある中華製の安物テスターではまともに測ることができなかったので、もっとまっとうな電流計はないかと探していたところ、上記の商品を見つけました。
元々は、トラ技(トランジスタ技術という雑誌)に後閑哲也さんが書いた製作記事をベースに作られた商品のようです。商品のページにも後閑さんの解説記事がリンクされています。ところが、この記事がおおはまりの元でいろいろと苦労しました。一応念のために断っておきますが、決して後閑さんの書いた記事が悪いわけではありません。製品の使い方を勝手に解釈して、記事の通りにやってみようとして四苦八苦してしまったというだけの話です。
結論から言うと、買った状態で、あとはWindowsマシンにソフトを入れるだけでちゃんと動きます。その構成ならラズパイは必要ありません。もし、この記事を読んで買ってみたいと思った方は私のようなへぼなことはしないでください。
今回は備忘録として、やったことを書いておきたいと思います。

ファームウェアはインストール済み

まず、装置の基本構成ですが、測定はシャント抵抗と専用のADコンバータを使って微小電流を測定し、それをPICで取り込んで、Windowsパソコンで表示させるというものです。後閑さんの記事には、ハードの基本構成から、PIC用のファームウェア、ラズパイ用のPythonスクリプトなど非常に細かに説明されています。この記事を真に受けてその通りやろうと思ったのが今回の失敗でした。
使用しているPICはメモリ消費が多いということでかなり上位機種のPIC24FJ256GA702というチップを使っています。記事にはファームフェアの全文は記載されておらず要点だけが書かれています(といってもほぼ全文記載に近いですが)。ファームウェアはどこにあるのかと検索したところ、トラ技のHPからダウンロードできることがわかりました。
toragi.cqpub.co.jp
今から思えば、これはトラ技の記事を読んで自分でも作ってみようという人のためのサイトであって、今回買った商品とは別物だったということです。いずれにしても、ファームウェアを見つけたので書き込もうと思って作業をし始めました。当たり前なんですが、MPLAB XIDEにダウンロードしたファームを読み込もうとしたらエラーになってしまいました。これは、PICが今までのPIC16シリーズと異なり、PIC24Fシリーズなので、16ビット用のコンパイラが必要なためです。

XC16を入れると何故かパソコンが超重たくなる。

16ビット用のコンパイラはXC16というもので、ちなみに8ビット用はXC8で、どちらもマイクロチップのサイトからダウンロードが可能です。
ところが、デスクトップのパソコンにXC16をインストールすると動作が亀のようにのろくなってまともに動いてくれなくなりました。そして、相変わらずエラーを吐いて読み込んでくれません。デスクトップのパソコンは前にも書いたようにMPLAB XIDEのバージョン5.2を使っているので、ひょっとすると最新のXC16をダウンロードしたお陰で相性が悪くうまく動かなかったのかもしれません。
ここで、実はファームウェアは既に書き込み済みなのではないかと気が付きました。なぜなら、製品には確かにPICの書き込み用に配線がされているのですが、ピンヘッダは袋には同梱されていたものの実装されていなかったからです。ほかの部品は全部実装されているのに、ファーム書き込み用のピンだけ実装されていないのは妙だと思い、電源を入れてみると液晶ディスプレイに電流値(といっても何も図っていないのですが)が表示されて、ファームが書き込み済みであることがわかりました。もっと早く気づけよという話ですが、まじめに記事を読んで作業しようとするとこうなってしまったというところです。
ちなみに、MPLAB XIDEのその後ですが、XC16が不要ということでアンインストールしてみましたが、動作がのろい状況は改善されませんでした。謎は謎のままです。どうしようもなければMPLAB XIDEをインストールしなおそうかと思っています。前にも書いたように、ノートパソコンの方ではPIC16LFシリーズの書き込みができず、デスクトップの方では書き込みができるのでこの環境はそのまま置いておきたいと思っているのですが。

ラズパイも必要ない

記事では、PICのファームを書き込んだ後は、ラズパイ用のPythonスクリプトを作成しラズパイに載せていく作業が書かれています。ラズパイでの作業はほかにもいろいろ書いてあり、それらを順番にやっていったのですが、この辺はかなり知識を要する作業でラズパイはあまり触ったことがなかったので結構苦労しました。しかしと言っては身もふたもないのですが、ラズパイを使って動かすこともできますが、なくてもWindowsPCがあれば動きます。それも、最後になって気づいたので、やらなくていい作業を一杯やってしまいました。まあ、ラズパイの勉強になったと思うしかないですが。

使ったのはRaspberry pi Zero W

家にはラズパイは2つあり、2つともほぼ遊んでいる状態なので、どちらを使ってもいいのですが、今回はRaspberry Pi Zero W(以下ラズパイZeroW)を使いました。これは発売になった時に思わず買ってしまったものですが、一度も動かすことなく家に眠っていたものです。もう一つは、Raspberry Pi モデル3Bで、こちらはメディアサーバーとしてソフトを入れてあるのですが、ほとんど稼働しない状態です。たまに使う程度なので、SDカードを別のにしてこちらを使うという手もあったのですが、どうせなら全く使っていない方のラズパイZeroWを使おうと思った次第。ちなみに、後閑さんの記事ではRaspberry Pi モデル3Bを使っていますのでこちらの方が作業はやりやすそうです。まあ大きな差はなさそうですが。

まずは立ち上げ

一度も動かしていないので、基本の立ち上げ作業からやる必要があります。
用意するものは、マイクロSDカード、ACアダプタ、MicroUSBケーブル、HDMIケーブル、キーボード、マウス。ちなみに、ラズパイZeroWはUSB端子が2つしかなく、ひとつは給電用なので、インターフェイスとして使えるのは一つだけとなります。そして、どちらもmicroUSB端子になっているので、マウスやキーボードを繋ぐためにはmicroUSBとTypeAの変換アダプタが必要です。Bluetoothも内蔵されていますが、初回にペアリングが必要なので、立ち上げの時は使えません。一応裏ワザとして、いきなりSSHを使って別のパソコンから操作するという方法もありますが、今回は正攻法でUSBのマウスとキーボードを使いました。Bluetoothでなく、USBアダプタと直接通信するタイプのワイヤレスタイプのマウスやキーボードは使えるようです。今回は、マウスはワイヤレスのものを使用しました。
USB端子がひとつなので、キーボードとマウスを両方使う場合は、USBハブも必要です。これも、買っただけで放置されていたものが家にありました。
また、HDMIケーブルもラズパイ側の端子がミニHDMIなので標準サイズの端子は刺さらないので、対応したケーブルが必要です。何故か家には対応ケーブルがありました。ラズパイZeroWを買ったときに必要だと思って購入してあったのか、なにかのおまけでついてきたものなのか不明です。ちなみに、マイクロHDMIのケーブルもありました(こっちは今回は不要ですが)。
SDカードも余っている32GBのを使いました。一応8GB以上が推奨とのことです。オーバースペックなのですが、新しく買うほどのこともないと思って家にあるやつを使いました。カードの読み書き速度はラズパイの速度に結構影響するようで、今回使ったカードではけっこうもっさりとしか動きませんでした。
ラズパイのOSはLinux系で、かつてはRasbianと呼ばれていましたが、今は、Raspberry Pi OSという名前になっていました。中身は大きくは変わっていないようですが。ラズパイの立ち上げ手順はいろいろなところに書かれていますので、ここでは改めて書くことはしません。私は、こちらのサイトを参考にしました。
www.indoorcorgielec.com
手順に従い、SDカードにOSを書き込み、電源投入して初期設定を行います。ちなみに、最近はユーザーネームとパスワードの入力が必須になっています。また、自分のダウンロードした最新のOSでは、上記のサイトの説明と微妙に異なる部分がありました。まあ、そんなに気にするほどのこともなかったですが。
後閑さんの記事では初期設定の後、日本語環境にすることと、リモートデスクトップにすることと書かれていますが、どちらも好みの問題であまり必要ないように思います。日本語の方は今回のOSでは、環境設定を行うと自動的に日本語になっていました。またリモートデスクトップの設定も行いました。やり方は、VNCを使う方法とXRDPを使う方法があるようです。今回はXRDPを使う方法を行いました。この方法では、ラズパイにソフトをインストールするだけでWindows側では特にインストール作業は必要ありません。VNCの方は逆に、ラズパイ側にはあらかじめインストールされていますが、PC側にソフトをインストールする必要があるようです。今回の作業はこちらのサイトを参考にして行いました。
scratchpad.jp
リモートデスクトップを設定しておけば、ディスプレイにつながず、キーボード、マウスなしでラズパイが操作できるので便利ではあります。

シリアルインターフェイスは必要か?

後閑さんの記事では、ラズパイのOSインストールの後の手順はシリアルインターフェイスの有効化になっています。結局検証できていないのですが、USBポートを使う限りこの設定は不要なのではないかと思い飛ばしました。理由は下記の記事を読んだからです。
toki-blog.com
上の記事によらず、ラズパイでシリアルポートを検索すると、たいていはGPIO端子を使ってシリアル接続する方法が出てきます。USBシリアルで接続する方法は全然ヒットしないのと、上の記事で書かれている方法と後閑さんの記事に書かれている方法がほぼ似た感じなので、おそらくGPIO端子経由での接続のための設定と推測しました。ちなみに、後閑さんの記事でBluetoothを無効にする設定として、dtoverlay=pi3-miniuart-bt と書いてありますが、上の記事を読む限り、この設定ではBluetoothをMini UARTに割り当てるようになるように思います。無効にする設定は、dtoverlay=disable-bt のようです。
やっていることはプライマリーのシリアルポートをPL011(初期設定ではセカンダリに設定)としてGPIO側に接続、Mini UARTをセカンダリにしてBluetoothと接続しているようです。
この設定にすると、シリアル接続はGPIO経由となり、ポートとしてはttyAMA0ということになります。ちなみに、USBでなくGPIO経由で測定器と接続する場合は、PythonのGetData.pyの「/dev/ttyUSB0」の部分を「/dev/ttyAMA0」に書き換えると書かれていますので、上記の設定とマッチしています。しかし、後で書きますが、この部分を飛ばしたからなのかよくわかりませんが、USB経由の接続ではうまく動きませんでした。

webiopiのインストール

次の手順はwebiopiのインストールです。webiopiはラズパイをWindowsMACなどから操作できるようにするものです。手順に従ってインストールすれば問題ありません。ただ、最後の方で、インターネットで接続するかという問いが来ますがここは、同じルーター内の機器同士の接続ならNoで問題ありません。
引き続きwebiopiのコンフィグレーションファイルを書き換えるところがありますが、ここも記事の通りに設定します。自動起動の設定も記事の通りです。

pythonスクリプトを書き込む。

pythonスクリプトも先のトラ技のHPのPICのファームをダウンロードしたら同時にダウンロードされています。これを、ラズパイの/home/pi/Currentに書き込みます。ダウンロードした一連のPythonスクリプトがCurrentというフォルダに入っていますので、homeの下にpiというフォルダを作ってフォルダごとコピーすればよいです。ただ、私は初めファイルマネージャーでやろうとして権限がないと言われてけられました。ファイルマネージャーでもやり方はあるのかもしれませんが、コンソールからsudoを付けて、フォルダの作成とコピーを行いました。

オシロに付属のUSBシリアル変換器はそのまま繋げない

じつは、この事実は、ファームが書き込まれているか確認しようと思ったときに気づいたのですが、オシロの取説には、いかにも付属のUSBシリアル変換器がそのままつながるような感じの写真が載っていますが(そのままつないでいるわけではないので虚偽の内容とは言えないが紛らわしい)、そのままさしても動きません、というか最悪は壊れる可能性があります。

取説に記載されている写真

装置を買ったときについてきたUSBシリアル変換器も写真のものと同じものが入っていました。これは、よくあるCP2102(多分模造品)を使ったUSBシリアル変換器です。よく見ると、変換機側の端子は、上から3.3V、TXD、RXD、GND、5Vとなっています。一方のオシロ側の端子はシルクを読むと、上から、G(GND)、ひとつ飛ばして、5V、TX、RXとなっています。ピンの配置が異なるのでこのままさしても動きません。
家にある別の奴と比較してみました。

オシロに付属のUSBシリアル変換器(左)と家にあったUSBシリアル変換器(右)

家にあるUSBシリアル変換器はアマゾンで買ったおそらく中華製の安物ですが、ピン配置はそのままさせる配置になっています。こちらは、チップにFT232RLを使っています。

ピンは左からGND、CTS、VCC(5V)、TX、RX、DTRの順です。
また、出力電圧をジャンパーピンで3.3Vと5Vから選択できるようになっています。これをUSBタイプのACアダプターに繋いで、オシロに繋ぐと5Vにしておくと何故か液晶ディスプレイのコントラストが強すぎてとても見づらくなります。3.3Vに設定しておくと普通に見えるようになります。オシロの電源は5Vを使っているということだし、設定が3.3Vだろうと5Vだろうと5V端子からは5Vが出ると思うのですが何故こうなるのかよくわかりません。違いは、RX、TX端子からの信号レベルだと思うのですが。たしかにラズパイは3.3V系で動くので信号のレベルは3.3Vだと思うのですが、それが液晶のコントラストに影響する理由がよくわかりません。
なお、オシロに付属のUSBシリアル変換器でもピンを直接さすのではなく、ケーブルを使ってそれぞれの端子を繋いでやれば使えると思います。オシロには、メスメスのケーブルが付属していました。これは、ラズパイのGPIOと繋ぐためのものと思っていましたが、USBシリアル変換器とオシロ側のオスのピンヘッダを繋いでやれば使えるはずです。

ようやくテスト、でも動かず。

これで準備が整ったので動かしてみましたが、冒頭にも書いたようにちゃんと動きません。ラズパイを起動し、ラズパイのUSB端子にUSBシリアル変換器を接続、シリアル側をオシロに接続します。

ラズパイでテストをしている様子

すると、オシロが起動し測定が開始されます。PCから見る場合は、ブラウザでラズパイの「IPアドレス:8030」と入力すればオシロの画面が見れます。確かに画面は表示されましたが、ボタンをクリックしても何の反応もなく、コマンドが送られていない様子。ブラウザで画面が見れるということはラズパイからの通信はできていると思われますので、ラズパイとオシロの通信がうまくいっていないのではないかと思います。上にも書いたように、シリアルポートの設定をすっ飛ばしたのがまずかったのかもしれません。ただ、これ以上の検証はしていません。シリアルポートの設定を手順通り行い、PythonスクリプトをGPIO用に変更し、GPIOからオシロに繋げば動くとは思うのですが。

Windowsソフトを使えば問題なし

ラズパイを使った制御で動かないと思う前から、ちょっと引っかかることがあって、それは、商品のマニュアルのページにWindowsのソフトが載っていたことです。
github.com
この、GitのページにAppというフォルダがあってその中にWindowsのソフトが入っています。これはどう使うのだろうというのが引っかかっていて、もしやと思い、もう一度マニュアルをよく読むと、このソフトを使う使い方が書いてありました。このマニュアルをちゃんと最初から読んでいればこんなに苦労することなくすぐに使えたのに。
ということで、Windowsのソフトを使って、USBシリアル変換器でオシロとPCを繋ぐと問題なく使えました。
早速PICで液晶を動かしているときの電流値を測ってみました。

PICでセグメント液晶を動かすときの電流を測定

測定時の画面がこちら。

電流値の測定結果。スリープ時は20μA程度なのがわかる。

まだ作りかけのプログラムですが、前回紹介した、Aliexpressで買った液晶のうち、小さい方の6桁7セグメントの液晶をPIC16F19155のRTCCを使って1秒ごとに割り込みで起動し、液晶の数字を更新してすぐにスリープするというプログラムです(写真はテスト中のため1桁表示になっていますが、RTCCの値を読み込んで6桁全部に表示して時刻表示にする予定)。
PIC起動時の電流は約250μA、スリープ時は20μA程度。しかも、大半がスリープ状態ということで、非常に消費電流が少ないことがわかる。これなら電池で動作も問題なし。
後閑さんがこちらのブログで測定していたのと基本的には同じようなプログラムなので、結果も同じような結果になるのは当然なんですけど。
www.picfun.com

やっぱり、自分で測定して確かめてみるとちょっと感動する。そして、スリープ時の電流やどのくらいの期間実際にスリープしているかよくわかる。
ちょっと回り道したし、お値段も¥7000以上とちょっと高いなと思ったのだけれど、電池を使った機器の開発にはうってつけですね。ちゃんと図れなかった電子ペーパーやTWE-LITEのスリープ時の電流も測ってみようかなと思っている。