空気亜鉛電池 PR44 P675を使った ESP8266搭載Wi-Fiセンサで1週間動作

小型で大容量の空気亜鉛電池を使ってESP-WROOM-02を1週間、動かすことができました。
アルカリボタン電池といえば、 LR44 が有名ですが、同じ大きさの空気亜鉛電池が登場しています。今回、空気亜鉛電池 PR44  (P675)を使ったワイヤレス通信の実験を行ってみました。
なお、初めての実験だったため、開始時に電池を消耗しています。おそらく、1週間以上、動くでしょう。

また、送信中は電池の仕様である標準電流(2mA)を大幅に超え、70~80mAに達します。このあたりが安全かどうか分からないので、十分に注意してください。
ドイツ製の空気亜鉛電池(亜鉛-空気電池)PR44 (P675)。この小さなボタン電池一つで 600mAh以上の容量を持つ。
空気亜鉛電池のことを、あまり知らなかったので、まずはWikipediaを読んでみました。「燃料電池の一種」とのことなので、化学変化により発電する仕組みのようです。
空気亜鉛電池(くうきあえんでんち、英語:zinc–air battery)は、燃料電池の一種で単に空気電池とも呼ばれる。現在では主にボタン型電池として利用され、使用時には電極に張られているシールを剥がして用いる。一度剥がしたシールを貼り直して保存することはできない。正極に空気中の酸素、負極に亜鉛を使用するものを言う。電解液にはアルカリ金属水酸化物が使われるが、現在では水酸化カリウムを用いるものが主流。ドライタイプとウェットタイプ(現在はドライタイプのみ)がある。
Wikipediaより
上記の説明の通り、電極のプラス側にシールが貼られていました。剥がしてから約30秒後に電圧が生じます。
電極にシールが貼られている。これを剥がすと、化学反応が始まり発電する。剥がした状態の写真は、実験後に撮影予定(剥がした状態だと、電池が消耗するので)。
次に、同じ大きさのアルカリボタン電池 LR44 の仕様と比較してみました。
下記はネット検索で得た一般的な仕様値です。写真のものと一致しているかどうかは分かりません。
およそ容量が5倍で、値段も5倍です。
電圧は、1.4Vと、やや低下しますが、標準電流が10倍に増えており、ESP-WROOM-02などで使用した場合の電池寿命が、容量比の5倍以上に得られそうに感じられました。
                          アルカリ      空気亜鉛
                          ボタン電池    ボタン電池
                  型番       LR44       PR44
                  電圧       1.5V         1.4V
                  標準電流    0.1mA       2.0mA
                  容量       120mAh      600mAh
                  価格       10円        50円
早速、ブレッドボード上を製作してみました。下図は通常のアルカリ電池を使った比較実験用の製作品です。
ボタン電池を搭載したワイヤレス機器。10分ごとに電池電圧を測定し、クラウドサービスAmbientへ送信する。(ただし、写真はアルカリ電池を使った動作確認の様子)
アルカリボタン電池での動作確認が完了したら、空気亜鉛電池へ置き換えますが、ひとつ注意事項があります。アルカリボタン電池と同じように電池を直列に密着させると、空気穴が塞がってしまい、放電することが出来ません。そこで、電池と電池の間にピンヘッダのピンを挟んで、電池の空気口を塞がないようにしました(下図)。
まずはESP-WROOM-02を取り付けない状態で、空気亜鉛電池PR44の保護シールを剥がし、電池をブレッドボードへ装着して、電池電圧を測定してみましょう。始めは、3直列で1Vくらいしか出ません。徐々に化学反応により電圧が上昇するでしょう。4.2V(1.4V×3個)まで上昇したら、準備完了です。
この状態で、ESP-WROOM-02を取り付けてみたところ、適切に動作し、Ambientへ電池電圧値を送信しました。ところが、得られた電池電圧値は約2.0Vと、著しい電圧降下が発生することが分かりました。
また、ディープスリープに入っても、すぐにはコンデンサへ充電されず約30秒くらいかけて4.2Vまで戻ることが分かりました。使用開始時の空気亜鉛電池の内部抵抗は、アルカリ電池に比べて、高いようです。
空気亜鉛電池を取り付けて実験開始。あまりにも電圧降下が大きかったため、レギュレータをNJU7223F33へ変更した。また電池と電池の間にピンヘッダのピンを挟んで、電池の空気口を塞がないようにした。
今回の実験では、ESP-WROOM-02が電池電圧を測定し、測定値をAmbientへ送信します。下図は実験を開始した直後の様子です。
実験開始直後の様子。30分後には、切れているかもしれないと不安でしかたなかった。
ESP-WROOM-02は、起動時した瞬間に大きな電流が流れ、その時に一定の電圧が確保できていれば、おおむね動作します。それでも、新品の電池を入れた状態で2.0Vまで下がってしまうようだと、あまり電池が持たないのは明らかです。電圧が低く、いつ停止しても、おかしくない状態でした。
ところが、しばらく動作させていると、電圧が上昇しはじめます。約半日ほどをかけて、2.7Vまで上昇しました。。シールをはがしてから半日くらいは待ったほうが良かったのかもしれません。
その後、5日ほど一定の電圧で放電し、6日目から電圧が下がり始めました。下図は、1週間の動作試験後の様子です。
こんな小さな電池で、1週間以上、動作した。小型化が図れる点で、様々な用途が考えられる。ただし、安全性については未検証につき、活用時は製造元に確認するなど、十分な注意が必要。
Ambientからダウンロードしたデータをエクセルで表示させてみた。電池の放電特性とは思えない。
以上のように、空気亜鉛電池を使ったESP8266搭載ワイヤレスセンサで、1週間以上の動作が可能であることが分かりました。また、空気亜鉛電池の使い方に関する理解が少し深まりました。
ボクにもわかるESP-WROOM-02
by ボクにもわかる電子工作
https://bokunimo.net/

32GBのマイクロSDカードって、どのくらいの大きさなのか

32GBのマイクロSDカードを購入しました(写真の右側)。
すでに32GBという大きさを感覚的に感じられなくなってきているので、手持ちのメモリーカードなどを使って比較してみました。
写真は、16KB、8MB、32GBのメモリカードです。
フラッシュメモリが発明されるまでの時代のメモリカードには、SRAMなどが使われていました。
殆ど電力を消費しないので、小型のリチウム電池などで長期間の保存が可能でしたが、容量としてはキロバイトの単位でした。
その後、フラッシュメモリを搭載したメモリカードが登場します。容量もメガバイトと3桁も増大します。写真中央のSDカードは8MBと、フロッピーディスク6枚分もの大容量時代になりました。
フラッシュメモリも、著しく進化します。今日、手に入れたマイクロSDカードは32GB。これらを数字で比較してみましょう。
(1) SRAM 16KB = 約 16,000 Bytes
(2) SDカード 8MB = 約 8,000,000 Bytes
(3) マイクロSD 32GB = 約 32,000,000,000 Bytes
どうも、ピンときません。
まずは、1バイト1円として金額にしてみましょう。
この金額が技術の進歩の価値に相当するはずです。
(1) SRAM 16KB = 約 1万6千円
(2) SDカード 8MB = 約 800万円
(3) マイクロSD 32GB = 約 320億円
あぁ、永遠に分からない金額になりました。
今日、届いたマイクロSDカードは320億円の価値があるようです。
やはり分かりやすいのはグラフのはずです。
棒グラフにしてみましょう。
数値感をつかむための作業です。対数軸表示にしてはいけません。
はい、わかりません。わざとですね。
もう少し、数値感をつかめるように、距離にしてみました。
(1) SRAM 16KB ≒ 東京都の横幅(km) × 係数200くらい(B/km)
(2) SDカード 8MB ≒ 地球1周の距離(km) × 係数200くらい(B/km)
(3) マイクロSD 32GB ≒ 太陽までの距離(km) × 係数200くらい(B/km)
まだ、太陽までの距離を移動したことがないです。
時速4kmで歩いてみましょうか?
時速500kmのリニアモーターカーを使えばすぐでしょうか?
いや、あきらめましょう。
by ボクにもわかるホームページ
https://bokunimo.net/

IchigoJamで小型ゲーム機~OLED有機ELディスプレイを使って~

OLED有機ELディスプレイを使った簡単なゲームを作ってみました。Facebook のIchigoJam-FANグループのRuria Amanagiさん作成のマシン語によるデータ生成部を利用することで、OLEDへの高速表示が可能となり、ゲーム画面が実現しました。
ハードウェアは、OLEDをIchigoJam Tへ接続するだけです。
ハードウェアは、OLEDモジュールをIchigoJam TのCN5へ接続するだけ。超簡単に小型ゲーム機が作れた。
上図のようにIchigoJam T + MixJuiceの組み合わせであれば、「ボクニモワカルfor MixJuice」のメニュー[8]→[5]→[5]でダウンロードすることも可能です。プログラムの内容は後に示します(当ブログからコピーしても良い)。
Topメニューから[8]→[5]→[5]:
?"MJ GET bokunimowakaru.github.io/MJ/
または、直接、ダウンロード:
?"MJ GET bokunimowakaru.github.io/MJ/pg05/4.txt

ゲームの内容

このゲームは雑誌「1行リターンですぐ動く! BASIC I/Oコンピュータ IchigoJam入門」のP.34で作成したレーシングゲームのOLED版です。同誌に掲載しているプログラムはCC BYライセンスとして配布することが出来ます(出版社から承諾してもらっています)。ゲームの作成方法については、同誌を参考にしてください。
起動すると画面が縦方向にスクロールします。中央やや下に表示された「O」をカーソルキーの左右でコントロールします。道路の壁や障害物に衝突しないように「$」を獲得してください。徐々にスクロール速度が上がります。
壁や障害物をよけながら「$」を獲得する。スクロール速度は、徐々に上がり、難しくなる。
壁や障害物に衝突すると、ゲームオーバーとなる。

関連動画

Facebook IchigoJam FANグループの松永さんが撮影された関連動画へのリンクです。
ゲームの様子
MixJuiceからのダウンロード

OLEDに関して全体をまとめたページ

IchigoJam用OLEDの全体をまとめたページはこちらです:

プログラム

以下にプログラムを示します。行番号800番以降がOLED用のドライバ部です。マシン語の部分はFacebook のIchigoJam-FANグループのRuria Amanagiさんが作成したものです。
赤文字のgsbがドライバ部を呼び出す部分です。行番号1からOLEDの初期化を、行番号150でゲーム中のOLED表示を行っています。
なお、配列変数の全領域を使用するので、ゲーム部に配列変数を用いることが出来ません。
new
' RACING GAME
' OLED ドライバ for IchigoJam
' CC BY Wataru KUNINO https://bokunimo.net
' マシン ゴ Ruria Amanagi
1 CLS:?"RACING":?"GAME":gsb800
10 X=4
20 C=2
30 P=0
40 wait120:cls
50 LC 0,0:?"–|$$$|-"
100 'DISP
110 LC X,12:?"O"
120 LC 0,15:?"P=";P;
130 LC RND(32),0:?"-"
140 LC C,0:?"|":LC C+4,0:?"|"
150 R=RND(50):gsb900
160 IF R<4 LC R+C+1,0:?"$"
170 IF R<20 AND C>0 THEN C=C-1
180 IF R>30 AND C<3 THEN C=C+1
190 WAIT 10-P/10
200 LC X,12:?" "
210 K=INKEY()
220 IF K=28 THEN X=X-1
230 IF K=29 THEN X=X+1
300 'JUDGE
310 SCROLL 2
320 V=VPEEK(X,12)
330 IF V=36 BEEP 1:P=P+10:V=0
340 IF V=0 GOTO 110
400 'CRUSH
410 BEEP 20,10
420 LC X,12:?"X"
430 LC 0,15:?"P=";P;" "
440 LC 0,7:?"GAME OVR":gsb900
450 LC 0,23:?:end
800 'INIT
810 let[84],#4000,33,#227F,#700,#D5AE,#8D80,#2014,#DA00,#8112,#D9CF,#DBF1,#A440,#AFA6
820 for[99]=#8B0to#8C1:ifi2cw(60,#8A8,1,[99],1)?"E
830 next
840 let[64],#B570,#1840,#2308,#21B,#18C9,#2410,#7803,#DB,#18D3,#681D,#600D,#685D,#604D,#3020,#3108,#3C01,#D1F4,#BD70
900 'OUT
910 ifi2cw(60,#8A8,1,#8AA,6)?"E
920 for[98]=0to7:D=usr(#880,#907-[98]):ifi2cw(60,#8A9,1,#800,128)?"E
930 next:rtn
MixJuiceから簡単にダウンロードして実行することが出来る。
MixJuiceのロゴも表示してみた。MixJuiceの名称やロゴはNaturalStyle Co. Ltd.(http://na-s.jp/)の権利物。イチゴマークはjig.jpの権利物。両社の権利を侵害しないように(例えば、他の類似の商品を示す用語として使用しないなど)、取り扱いには注意する。
下記のTopメニューから[8
]→[5]→[5]:
?"MJ GET bokunimowakaru.github.io/MJ/
OLEDモジュール購入時の注意点
□ SSD1306搭載品である
□ 128 × 64 ドット品である

□ ピンの並びが、GND、VCC、SCL、SDAの順である

□ I2Cアドレスが0x78または0x3Cである
□ 単色発光品である(表示エリアの一部だけが異なる色になっているタイプがある)
□ (なるべく)過去に購入したことのある販売店を選ぶ

以下で販売されているものは、ピン配列が異なる可能性があります。

HiLetgo

当ブログ内の関連記事

(1) 接続方法など:
(2) IchigoJamロゴ表示:
(3) 今回のブログ記事の短縮URL:
by ボクにもわかるIchigoJam用マイコンボード
IchigoJam用OLEDの全体をまとめたページはこちらです:
https://bokunimo.net/ichigojam/oled.html

IchigoJam ロゴを OLED有機ELディスプレイへ表示する

先週、IchigoJamで簡単にOLEDへ文字を表示する方法について紹介しました。今日は、そのOLED表示用ライブラリ(ソフトウェアドライバ部)の改良を行い、IchigoJamロゴを表示してみました。
OLEDへIchigoJamのロゴを表示したときの様子。ロゴを32文字分のフォントへ変換して表示した。IchigoJamのロゴはCC BY ライセンス( jig.jp http://ichigojam.net/ )の範囲内で利用可能。とはいえ、IchigoJamの看板そのものであり、権利者の不利益にならないように注意して利用しよう。
ロゴは64ドット×16ドットの2値イメージファイルをIchigoJam用のフォントへ変換し、IchigoJamのフォント領域へ保存しました。ただし、正規のロゴからは若干の修正を行っています。
IchigoJamの開発者である福野さんや、Facebook の IchigoJam FANグループのAmanagiさんの意見をもとに短縮版のロゴを作成しました。「c」と、「J」、「a」「m」が本来のロゴと少し、違っていますが、違和感はあまりないでしょう。
c 1マス分(フォントで2ドット分)幅を狭くした
J 0.5マス分(フォントで1ドット分)幅を狭くした
a 0.25マス分(フォントで0.5ドット分)幅を狭くした
m 0.25マス分(フォントで0.5ドット分)幅を狭くした
合計 2マス、フォント4ドット分を狭くすることが出来た

OLEDへの表示方法

ハードウェアは前回のブログ記事と同じです。下記をご覧ください。
前回の記事:
CC BY 国野亘 https://bokunimo.net
ソフトウェアについては、以下の改良を行いました。
  • OLED用データを変数領域(変数[84]以降)へ移動しました
    (これにより、フォント領域が使えるようになりました。)
  • OLED用データをPOKEではなくLET命令で変数代入するようにしました
    (これにより、20 バイトほどの節約が出来ました)
  • ライブラリ部は 288 バイトまで少量化することが出来ました
注意事項
配列変数[80]~[96]を本ライブラリで使用します。本ライブラリを使用したプログラム中に、配列変数を使用する場合は、[0]~[79]までしか使えません。

改良したライブラリとIchigoJamロゴデータ

以下に改良したライブラリを含むプログラムを示します。行番号700番台のPOKE文の部分がIchigoJamのロゴデータです。
new
' OLED ドライバ for IchigoJam
' CC BY Wataru KUNINO https://bokunimo.net
'
' IchigoJam オヨビ IchigoJam ロゴ ハ jig.jp (ichigojam.net jig.jp) ノ
' トウロク ショウヒョウ デス. CC BY ライセンス ニ シタガッテ シヨウ シテマス.

1 cls:?"OLED LIB":?:?"   by":?:?" Wataru":?" Kunino":?:?"   for":?
2 gsb700:forI=0to15:?chr$(#E0+I);:ifi=7?
3 next:?:?:?
4 ?"    ";chr$(255)
5 gsb800
9 end

700 'LOGO
701 poke#700,#C0,#C0,#C0,#C0,#C0,#CF,#CF,#CC,48,48,48,48,48,63,63,51
702 poke#710,48,48,0,0,0,51,51,51,0,0,0,0,0,#F3,#F3,51
703 poke#720,0,0,0,0,0,#F0,#F0,48,96,96,96,96,96,#67,#67,#66
704 poke#730,0,0,0,0,0,#E7,#E7,99,0,0,0,0,0,#FF,#FF,51
705 poke#740,#CC,#CF,#CF,0,0,0,#FF,#FF,51,51,51,0,0,0,#FF,#FF
706 poke#750,51,51,51,0,0,0,#F3,#F3,51,#F3,#F3,48,48,48,#F3,#F3
707 poke#760,48,#F3,#F3,0,0,0,#FF,#FF,#66,#E7,#E7,0,0,0,#FF,#FF
708 poke#770,99,#F3,#F3,0,0,0,#FF,#FF,51,51,51,0,0,0,#FF,#FF
709 rtn

800 'INIT
810 let[84],#4000,33,#227F,#700,#D5AE,#8D80,#2014,#DA00,#8112,#D9CF,#DBF1,#A440,#AFA6
820 forP=#8B0to#8C1:ifi2cw(60,#8A8,1,P,1)?"E
830 next
900 'OUT
910 ifi2cw(60,#8A8,1,#8AA,6)?"E
920 forX=0to7:forY=0to15:P=vpeek(7-X,Y)*8:copy#8A0,P,8:ifi2cw(60,#8A9,1,#8A0,8)?"E
930 next:next:rtn

OLEDとテレビへIchigoJamロゴを表示したときの様子。

(追記)ロゴを作成する際に使用した変換ツール

BMPファイルからPOKE文に変換するツールを下記に保存しました。
gccでコンパイルし、ファイル名を引数にして実行してください。-0オプションを付与すると、白黒反転します。
OLEDモジュール購入時の注意点
□ SSD1306搭載品である
□ 128 × 64 ドット品である

□ ピンの並びが、GND、VCC、SCL、SDAの順である

□ I2Cアドレスが0x78または0x3Cである
□ 単色発光品である(表示エリアの一部だけが異なる色になっているタイプがある)
□ (なるべく)過去に購入したことのある販売店を選ぶ

以下で販売されているものは、ピン配列が異なる可能性があります。

HiLetgo


当ブログ記事への短縮リンク:
by ボクにもわかるIchigoJam用マイコンボード
IchigoJam用OLEDの全体をまとめたページはこちらです:
https://bokunimo.net/ichigojam/oled.html

熱抵抗15℃/W!? 誤差は大きいかもしれないが効果は確か!

驚きの15℃/Wの熱抵抗で放熱できることが確認できました。
タカチ製のプラスチックケースの中にRaspberry Pi Zeroを収容したときの熱対策を行っています。今回は、3M製の放熱シートを使って放熱効果を高める実験を行ってみました。
使用した3M製ハイパーソフト放熱シート 5589H。10cm×10cm×厚み1.5mm で800円程度。粘土のように変形する。1mmほどの隙間だったが、常に圧力がかかるように、1.5mmの厚目のもの放熱シートを選定した。
3M製ハイパーソフト放熱シート 5589H :
前回は、タカチのプラスチックケースLC115H-N-Dへアルミ板を装着し、放熱を高めることに成功しました。今回は、Raspberry Pi Zeroと放熱版との間に3M製のハイパーソフト放熱シート 5589H を挟み込んでみました。
前回の記事(アルミ板の効果):
前々回の記事(ケースへ収容):

※プラスチックケースからの放熱を含みます。
※簡易的な測定につき誤差が多く含まれます。

放熱シートを挟み込む

Raspberry Pi Zeroの基板の裏側に3M製ハイパーソフト放熱シート 5589H を貼り付け、筐体内のアルミ板へ接触するようにして、Raspberry Pi Zeroの発熱を、外部へ逃がせるように工夫しました。
ケース上側(写真・左)のアルミ板と、Raspberry Pi Zero基板(写真・右)との間に放熱シートが入るようにした。放熱シートをRaspberry Pi Zero基板へ張り付けた。
Raspberry Pi Zero の基板の裏側に放熱シートの接着面側を張り付けた。基板上の黄色のテープは絶縁用。放熱シートの接着面以外を囲むようにポリイミドテープで絶縁保護した。ピンヘッダなどのハンダ付け部の突起は、ニッパで切断し、平らにした。コンデンサは破裂防止用の切込が放熱板に接触しないように、一部分だけに通常のシリコンシート(3M製ではない汎用品)を貼った。
アルミ板の表面へ熱を伝えるためのビス部に凹みをつけ、放熱シートとアルミ板との接触面積が大きくなるようにした。2mm厚のアルミ板と0.5mm厚のアルミ板の2層構造にした(ビスは0.5mm厚のアルミ板に取り付け、2mm厚のアルミ板はビスを避けるための開口部を設けた)。
完成例(前回の写真の引用)

実験結果。

          状 態  室温  CPU温度  熱抵抗
          対策前 25.8 ℃  41.2 ℃  25.6 ℃/W
          対策後 27.0 ℃  35.8 ℃  14.6 ℃/W (11.0℃の改善)
簡易的な測定方法なので、実験による誤差があるかもしれませんが、11℃もの熱抵抗を改善することに成功しました。表面のアルミ板だけでも熱抵抗が10℃/W以上あると思いますので、少し過剰な改善結果のように感じられますが、大幅な改善効果があったことは明らかです。
はじめから金属製のケースで製作すれば、簡単なのかもしれませんが、加工が容易で防水加工が簡単なプラスチックケースを使った放熱は有用だと思います。参考にしていただければ幸いです。
by ボクにもわかるRaspberry Pi

IchigoJamで超簡単ミニ表示器! I2C超小型OLED有機ELディスプレイ

IchigoJam TのCN5へ接続するだけ
超簡単にOLEDへテキスト文字を表示してみました。

アマゾンなどで市販されているSSD1306搭載の超小型I2C接続OLEDディスプレイ(128×64ドット)を、IchigoJam TのCN5へ接続し、BASICプログラムだけで文字を表示する実験を行ってみました。
IchigoJam基板上の5ピンのCN5端子の手前側に寄せて(+5V以外の端子)をOLEDモジュールへ接続します。
※接続するだけ:専用のハード改造が不要という意味です
(動作するIchigoJamやCN5の取り付けが必要です)
IchigoJam TのCN5へOLEDモジュールを接続。これだけでハードは完成。あとはBASICプログラムで表示可能。古い初代IchigoJamやIchigoJam Uには対応していない。
IchigoJam用OLEDの全体をまとめたページはこちらです:
https://bokunimo.net/ichigojam/oled.html

SSD1306搭載 I2C接続OLED 128×64ドットを使用する

アマゾンなどで市販されているI2C接続のOLED(有機ELディスプレイ)を使用します。いくつかのタイプが売られています。ピン配列がGND、VCC、SCL、SDAの順になってかどうかを確認してください。I2Cアドレスは78(7ビット表示で3C)のタイプを使用します。
IchigoJam TのCN5へ接続するだけ。ピンソケットの一番奥の+5V以外の4ピンの部分へ装着する。※誤って+5Vに接続してしまうとOLEDモジュールが故障する恐れがある。取り付けは簡単だが、慎重に。
OLEDモジュール購入時の注意点
□ SSD1306搭載品である
□ 128 × 64 ドット品である

□ ピンの並びが、GND、VCC、SCL、SDAの順である

□ I2Cアドレスが0x78または0x3Cである
□ 単色発光品である(表示エリアの一部だけが異なる色になっているタイプがある)
□ (なるべく)過去に購入したことのある販売店を選ぶ

以下で販売されているものは、ピン配列が異なる可能性があります。

HiLetgo

表示用BASICプログラム・OLED用ライブラリ for IchigoJam

以下にBASICプログラムを示します。行番号800番台が初期化部、900番台が表示部です。
行番号1~3でテレビ画面上へ文字を表示します。この状態で、gsb 800を実行すると、左上隅から8桁×16行のテキスト文字をOLEDへ出力します。一度、gsb 800を実行した以降は、gsb 900で表示を更新できます。

 最新版は、https://bokunimo.net/ichigojam/oled.htmlをご覧ください。
new
' OLED ドライバ for IchigoJam
' CC BY Wataru KUNINO https://bokunimo.net
1 cls:?"OLED LIB":?:?"for15jam":?:?"    ";chr$(255):?
2 ?" http://":?" goo.gl/":?" re3i4s":?
3 ?"  CC BY":?:?" Wataru":?" KUNINO":?:?" クニノ ワタル"
5 gsb800
9 end
800 'OLED INIT
810 poke#708,0,64,33,0,127,34,0,7,#AE,#D5,#80,#8D,#14,#20,#00,#DA,#12,#81,#CF,#D9,#F1,#DB,#40,#A4,#A6,#AF
820 forP=#710to#721:ifi2cw(60,#708,1,P,1)?"E:Init";hex$(P)
830 next
900 'OLED OUT
910 ifi2cw(60,#708,1,#70A,6)?"E:ADR
920 forX=0to7:forY=0to15:P=vpeek(7-X,Y)*8:copy#700,P,8:ifi2cw(60,#709,1,#700,8)?"E"
930 next:next
940 rtn
★ 本プログラムの製作時に下記の情報を参考にしました。

★ 本ライブラリの配布時には下記を表示してください。
CC BY 国野亘 https://bokunimo.net

美しいIchigoJamフォントが、より美しく

最大の特徴は、IchigoJamフォントが、そのまま表示されることです。見慣れた美しいフォントが、こんな感じで、より美しく表示され、これだけでも大満足です(ボク個人の感想です)。
I2C接続のキャラクタ液晶などへの表示と異なる点は、IchigoJamのフォントが、そのまま表示されること。あぁ、ライブラリ部を#700番台にしたのは失敗だったかも。

課題

BASICで画像を転送しているので表示に100tick(約1.7秒)がかかります。(マシン語を使ったサンプルについては後述)

(追加) 参考情報 2017/6/13

以下は、初期化時のパラメータを変更したい方に向けた参考情報です。本ブログで紹介したBASICプログラム「OLED LIB」を作成する際に、Adafruitが作成したライブラリの初期化手順を参考にしました。
以下に、Adafruit作成のコードを示します。
上記のコードについてはMITライセンスとなります
ボクが作成したOLED LIBとの違いは、コマンド5つ、計7バイト分です。
省略したコマンドのうち2つ(A1とC8)は、Adafruitが画面を180°回転するために使用していたものです。これら(A1とC8)を追加することで、元のコマンドと同じ設定になります(画面が180°回転します)。

(追加) マシン後で高速化と横表示 2017/6/13

Facebook のIchigoJam-FANグループのRuria Amanagiさんが、データ処理の一部にマシン語を使用して、高速化していただきましたので、紹介いたします。ゲームなどで高速表示が必要な方には、うれしい進化だと思います。
(プログラムが長くなりますが、行番号800~880は、一度、実行すれば電源を切るまで再実行する必要が無いので、プログラムを分割するなどの工夫で対策することが出来ます。)

最新版は、https://bokunimo.net/ichigojam/oled.htmlをご覧ください。
【縦表示】マシン語版
800 'OLED INIT
810 poke#780,#00,#40,#21,#00,#7F,#22,#00,#07,#AE,#D5,#80,#8D,#14,#20,#00,#DA,#12,#81,#CF,#D9,#F1,#DB,#40,#A4,#A6,#AF
820 forP=#788to#799:ifi2cw(60,#780,1,P,1)?"E:Init";hex$(P)
830 next
840 poke #79a,#70,#b5,#40,#18,#07,#23,#1b,#02
850 poke #7a2,#c9,#18,#10,#24,#03,#78,#db,#00
860 poke #7aa,#d3,#18,#1d,#68,#0d,#60,#5d,#68
870 poke #7b2,#4d,#60,#20,#30,#08,#31,#01,#3c
880 poke #7ba,#f4,#d1,#70,#bd
900 'OLED OUT
910 forP=#782to#787:ifi2cw(60,#780,1,P,1)?"E:ADR";hex$(P)
915 next
920 forX=0to7:D=usr(#79A,#907-X):ifi2cw(60,#781,1,#700,128)?"E"
930 next
940 rtn

【横表示】マシン語版
800 'OLED INIT
810 poke#7D0,#00,#40,#21,#00,#7F,#22,#00,#07,#AE,#D5,#80,#8D,#14,#20,#00,#A1,#C8,#DA,#12,#81,#CF,#D9,#F1,#DB,#40,#A4,#A6,#AF
820 forP=#7D8to#7EB:ifi2cw(60,#7D0,1,P,1)?"E:Init";hex$(P)
830 next
840 poke #79a,#f0,#b5,#40,#18,#07,#23,#1b,#02,#c9,#18,#94,#46,#10,#24,#03,#78
850 poke #7aa,#db,#00,#d2,#18,#08,#27,#00,#23,#07,#25,#56,#5d,#fe,#40,#5b,#41
860 poke #7ba,#01,#3d,#fa,#d2,#0b,#70,#01,#31,#01,#3f,#f4,#d1,#01,#30,#62,#46
870 poke #7ca,#01,#3c,#ec,#d1,#f0,#bd
900 'OLED OUT
910 forP=#7D2to#7D7:ifi2cw(60,#7D0,1,P,1)?"E:ADR";hex$(P)
915 next
920 forY=0to7:D=usr(#79A,#900+Y*32):ifi2cw(60,#7D1,1,#700,128)?"E"
930 next
940 rtn

by ボクにもわかるIchigoJam用マイコンボード
IchigoJam用OLEDの全体をまとめたページはこちらです:
https://bokunimo.net/ichigojam/oled.html

Zero W対応準備を完了。タカチ製ケースに放熱対策を行ってみた。

プラスチックケース内に機器を収容しときの放熱対策として、アルミ板をケース内外に取り付けてみました。Raspberry Pi Zero Wへ対応する準備が出来たので、紹介します。
前回、タカチのプラスチックケースLC115H-N-DへRaspberry Pi Zeroを収容しました。Raspberry Pi Zeroの消費電力は80mA(0.4W)ほどと低いのですが、発熱をともなう部品であることには変わらないので、放熱対策が必要です。
前回の記事(タカチのプラスチックケースLC115H-N-D):
はじめに対策方法について説明し、後半で対策効果と検証結果について説明します。

発熱対策の方法

プラスチックケースの上部にアルミ板を取り付けて放熱します。また、内部にはRaspberry Pi Zeroからケース上部への熱路を作りました。
ケースの上部にアルミ板 40mm×30mmを取り付けた
ケース内部にもアルミ板を取り付け、Raspberry Pi Zeroと熱伝導シートなどで接触させる。

対策効果を確認する

Raspberry Pi にはCPU内部の温度を測定する機能があります。CPU内部の温度と室温との差を測定すると、ケースの熱抵抗が求まります。熱抵抗が下がれば効果ありと判断することが出来ます。
熱抵抗 = (CPU内部温度-室温) / 消費電力 [℃/W]
以下は、測定時の様子です。左側が温度計、右側が測定対象機器です。右側の機器の液晶の下段の数値がCPU内部温度です。
室温とCPU内部温度を測定しているときの様子。室温26.3℃、CPU42.8℃、消費電力0.6Wから熱抵抗は27.5℃/Wであることが分かった(撮影時)
記事の順序は前後しますが、あらかじめ製作前に対策前の熱抵抗についても求めておきました。比較結果は以下の通り、放熱対策による効果が確認できました。
          状 態  室温  CPU温度  熱抵抗
          対策前 25.0 ℃  42.8 ℃  29.7 ℃/W
          対策後 25.8 ℃  41.2 ℃  25.6 ℃/W (4.1℃/Wの改善)

対策効果の検証

最後に追加した放熱器の性能を推定することで、対策効果の検証を行います。とはいっても、かなり荒っぽい検証です。考え方だけ、参考にしていただければと思います。
熱抵抗が下がったのは対策した放熱器が、元のケースの熱抵抗に対して並列に入ったためです。
熱抵抗は、その名の通り抵抗と同じように計算することが出来ます。すなわち、29.7Ωの抵抗と未知の抵抗の並列接続で25.6Ωの抵抗値が得られたことと同じであり、以下のようになります。
          放熱器の熱抵抗 = ( 29.7 × 25.6 ) ÷ ( 29.7 – 25.6 ) = 185 ℃/W
一見するとケースよりも高い熱抵抗というのは妙に感じるかもしれません。
ケースよりも高いのは、ケースに比べて面積が5.5分の一ほどだからです。比較のために5.5分の一にすると33.6℃/Wになります。それでも、ケースよりも高いのは元のケースの面積が減ることを無視しているからです。元のケースの29.7℃/Wの5.5分の一は5.4℃/Wに相当し、この分を考慮すると追加した放熱器の性能は、28.2℃/W相当と換算でき、元のケースを下回ります。
なお、本記事で示した「ケースの熱抵抗」、「放熱器の熱抵抗」には、CPUとRaspberry Piの基板との熱抵抗や、基板から放熱器までの熱抵抗も加算された値を示しています。実際には、CPU~Raspberry Piの基板間のほうが大きいみたいです(最後の写真にケース内の温度の目安を示しています)。
※現時点では、Raspberry Pi Zero Wは国内の電波法への適合が受けれれていませんので、本ブログでは、Raspberry Pi Zero Wのアンテナ部を51Ωのダミー抵抗に置き換えて確認しました。
by ボクにもわかるRaspberry Pi

タカチのプラスチックケースに秋月I2C液晶AQM0802がピッタリ

タカチのプラスチックケースLC115H-N-Dの開口部に、秋月のI2C液晶AE-AQM0802を取り付けてみました。
余ったスペースにはDCジャックを取り付けました。
まるで市販品みたいに仕上がります。
タカチ電機工業 LC115H-N-D
秋月電子通商 AE-AQM0802
電子工作用のケースといえばタカチ電機工業。同社のプラスチックケースの開口部が秋月の液晶にピッタリだったので活用してみた。

中身はマイコンボードとWi-SUN通信モジュール

今回製作した機器の中身です。Raspberry Pi ZeroとWi-SUN通信モジュールを内蔵しました。そのうちRaspberry Pi Zero Wに置き換えて無線LANとBLEに対応する予定。
今回はRaspberry Pi Zeroを内蔵した。Raspberry Pi ZeroのUSB端子にはUSB HUBと無線LANアダプタを接続。そのうち無線LANとBLEを搭載したRaspberry Pi Zero Wへ置き換える予定。

基板をネジ止め出来るけど、秋月のユニバーサル基板とは合わない

残念なことは、秋月電子通商で販売されているCタイプやBタイプといったユニバーサル基板とは合っていないので、基板のネジ止めには工夫が必要です。
秋月のCタイプ基板を内蔵した様子。ネジ止め穴が一致しない。奥の1穴のみネジ止めが可能。他の穴には秋月で販売されているミニカードスペーサMPS-04-0を使用した。また基板が動かないように、基板の1か所にケースに合わせた穴をあけてネジを追加した。スペーサを接着剤で止めても良いかも。

完成例

下図は完成例です。液晶がピッタリとおさまっています。液晶基板の周囲にはポリミイドテープ(オレンジ色)を貼って、万が一、火花などが発生したときにケースへ引火しにくくするための対策です。
液晶がケースにピッタリとおさまった。オレンジ色のポリミイドテープを貼ることにより、火花などによる引火の懸念を低減した。
なお、今回、使用したRaspberry Pi Zeroにはワイヤレス通信機能が無いので、ケースへ収容してしまうと、Raspberry Pi Zeroの操作が出来なくなります。一方、ワイヤレス通信機能を搭載したRaspberry Pi Zero Wについては、現時点で国内の電波法に適合した認証が得られておらず、実験をすることが出来ません。
次回は、アンテナ部へ給電するチップコンデンサを取り外し、アンテナの代わりに51Ωのチップ抵抗を実装して発熱対策を行います。
by ボクにもわかるRaspberry Pi

IchigoJam と RN4020 で Simple BLE (Bluetooth) センサを簡単に製作する

BASICでBLEビーコンを発信! IchigoJamとRN4020を使って、BLE (Bleutooth Low Energy)によるワイヤレスIoTセンサを製作してみました。

ハードウェアは、秋月電子通商から4月に発売されたAE-RN4020-XBモジュールをIchigoJamのシリアル端子へ接続するだけです。
ソフトウェアは、IchigoJam BASICで製作しました。通信モジュールRN4020側は購入したままでOKです。IchigoJam上で動作するBASICだけでモジュールを制御します。
また、センサ読み値をBLEビーコン内のデバイス名に含めたので、実験も簡単です。受信側はスマートフォンのビーコン検索ソフトや、Raspberry Piのhcitoolでビーコンをスキャンするだけで実現することが出来ます(gatttoolなどによる属性読み取りが不要)。
下図は、IchigoJam TへRN4020を接続し、BLEビーコンを送信する実験の様子です。
Microchip製RN4020チップを搭載した秋月電子通商のBLEモジュール(写真左上)をIchigoJam T(写真中央)のシリアル端子へ接続する(IchigoJamのTXDをBLEモジュールのRXへ、RXDをTXへ接続)。電源についてはIchigoJamのCN5の5V出力から供給した。

BLE対応BluetoothモジュールRN4020

Microchip社のRN4020は、BLE(Bluetooth Low Energy)に対応したBluetoothモジュールです。旧Roving Networks 社が開発したBluetootuモジュールRN42の技術をベースに、Microchip社がBLE対応品を開発しました。プロトコルスタックが内蔵されているので、シリアルから簡単なコマンドでBLE通信を行うことが出来ます。
Roving Networks社が開発したRN42の技術を基に、Microchip社が開発したBLEモジュールRN4020。簡単なコマンドをシリアルから送ることでBLEの通信が行える。型番の「RN」はRoving Networks社の名残り。

秋月電子通商製AE-RN4020-XBモジュール

秋月電子は、2017年4月にMicrochip社RN4020をプリント基板へ実装したBLE通信モジュールを発売しました。Digi社のZigBeeモジュールXBeeと同じ2mmピッチのピンヘッダを実装することが可能です。また、ブレッドボードなどに接続できる2.54mmピッチの端子も装備しています。

秋月電子通商から発売されたAE-RN4020-XBモジュール。XBeeシリーズとピン互換の2mmピッチのピンヘッダもしくは、ブレッドボードなどへ接続するための2.54mmピッチのピンヘッダのどちらかを装着して使用する。

IchigoJam用BASICプログラム「BLEビーコン送信機」

BLEビーコンを送信するIchigoJam用のプログラムです。シリアル通信の内容をI2C接続の液晶AQM0802へ表示することも出来ます。液晶を使用しない場合は行番号2を消してください。
行番号100番台はRN4020の初期化用です。2回目以降は実行する必要はありません。変数Zが0以外のときは初期化処理を省略します。
行番号240~260が主要部です。行番号240の「Y」はBLEビーコンを停止する命令、行番号250の「SN」はデバイス名の設定、行番号260はビーコンの開始命令です。予め行番号210でで変数Aにアナログ値を入力し、行番号250で変数Aの値をRN4020のデバイス名として設定します。
rem BLEビーコン送信機
rem Copyright (C) 2017 Wataru KUNINO
new
1 cls:uart0:?"Blue 2th":?"Beacon"
2 D=1:'LCD=ON
3 ifDgsb800

100 'INIT
110 ifZgoto200
120 uart1:cls:?"SF,2":gsb500
130 cls:?"SS,00000000":gsb500
140 cls:?"SR,00000000":gsb500
150 cls:?"R,1":wait120:gsb500
160 'cls:?"D":gsb500:wait300
170 B=-1:Z=-1

200 'LOOP
210 A=ana(0)
220 ifA>=B-5andA<=B+5goto200
230 uart0:cls:?"ANA=";A:gsb800
240 uart1:cls:?"Y":gsb500
250 cls:?"SN,IchigoJam_ANA,";A:gsb500
260 cls:?"A,07D0":gsb500

270 wait120:B=A:goto200

500 'RX
510 J=0:wait10:uart0:beep1
520 I=inkey():ifI?chr$(I);:goto520
530 ifJ<30wait1:J=J+1:goto520
540 ifDgsb800:wait30
550 uart1:beep:rtn

800 'LCD
810 poke#700,64,0,2,#C0,57,17,#70,86,#6C,56,12
820 ifi2cw(62,#701,1,#704,5)?"E"
840 ifi2cw(62,#701,1,#709,2)?"E"
910 ifi2cw(62,#701,1,#702,1)+i2cw(62,#700,1,#900,8)+i2cw(62,#701,1,#703,1)+i2cw(62,#700,1,#920,8)?"E"
920 rtn
プログラムを作成するときは、シリアル用の配線を切断しておき、プログラムを実行する直前にシリアルの配線を行い、RUNを実行します。プログラムを中断したときも、シリアルの配線を切断してください。
シリアルがつながったままだと、IchigoJamからシリアルを経由してRN4020へOKやエラーなどのメッセージが送られてしまい、その応答がIchigoJamに戻り、さらにIchigoJam側でSyntax Errorが発生し、そのメッセージがRN4020へ送られ、永久にループしてしまいます。
IF ICH-KIT(後述)では、この問題を避けつつ、開発効率を高めるために、シリアルの切り替えスイッチを装備しました。

スマホやラズパイでBLEビーコンを受信する

BLEビーコンの受信には、Bluetoothを搭載したスマートフォンやRaspberry Pi 3などを使用します。
iPhoneでは、BLE Discoveryや、BLE loggerが使えました。下図はBLE Discovery(Heap & Stack)で受信したときの様子です。Advertising DataのLocal nameの部分に「IchigoJam_ANA
,0」というデバイス名が表示されました。末尾の数字はアナログ入力ANA(0)の値によって変化します。IchigoJam基板上のタクトスイッチを押下した状態にしておくと0になり、離した状態だと800~1000くらいの値が得られます。このANA(0)入力はIchigoJamのBTN端子です。BTN端子にセンサを取り付ければ、センサ値を送信することが出来ます。
BLE Discovery(Heap & Stack)で受信してみた
Raspberry Piで簡単に受信することも出来ます。以下のコマンドを入力すると、約2秒ごとにデータが表示されます。末尾の数値1003や0がIchigoJamのアナログ入力ANA(0)の値です。
$ sudo hcitool lescan –pa –du
00:1E:C0:XX:XX:XX IchigoJam_ANA,1003
00:1E:C0:XX:XX:XX IchigoJam_ANA,0
00:1E:C0:XX:XX:XX IchigoJam_ANA,0
00:1E:C0:XX:XX:XX IchigoJam_ANA,1003
00:1E:C0:XX:XX:XX IchigoJam_ANA,0
00:1E:C0:XX:XX:XX IchigoJam_ANA,0
より詳細な情報を得るにはhcidumpをインストールしてください。ただし、hcidumpは少し使いにくいので、スクリプトble_logger.shも準備しました。4行目に書かれた一つのコマンド「ble_logger.sh」でスキャンを実行することが出来るようになります。
$ sudo apt-get install bluez-hcidump
$ cd RaspberryPi/network/ble
$ ./ble_logger.sh
BLE Logger
start LE scan
start HCI dump
, HCI, device:
2017/06/03 18:36, 0x3e, LE, ADV_IND, 00:1E:C0:XX:XX:XX, 0x06, IchigoJam_ANA,1003, -63
2017/06/03 18:36, 0x3e, LE, ADV_IND, 00:1E:C0:XX:XX:XX, 0x06, IchigoJam_ANA,0, -61
2017/06/03 18:36, 0x3e, LE, ADV_IND, 00:1E:C0:XX:XX:XX, 0x06, IchigoJam_ANA,0, -61
2017/06/03 18:36, 0x3e, LE, ADV_IND, 00:1E:C0:XX:XX:XX, 0x06, IchigoJam_ANA,1003, -64^C
$ ./ble_logger.sh dump
BLE Logger
start LE scan
start HCI dump
, HCI, device:
2017/06/03 18:38, 04,3E,23,02,01,00,00,XX,XX,XX,C0,1E,00,17,02,01,06,13,09,49, 63
2017/06/03 18:38, 04,3E,23,02,01,00,00,XX,XX,XX,C0,1E,00,17,02,01,06,13,09,49, 63
2017/06/03 18:38, 04,3E,20,02,01,00,00,XX,XX,XX,C0,1E,00,14,02,01,06,10,09,49, 63
2017/06/03 18:38, 04,3E,20,02,01,00,00,XX,XX,XX,C0,1E,00,14,02,01,06,10,09,49, 63^C
ble_logger.shでは、受信データの表示部を小プロセスとして実行することにより、1つのスクリプトでhcitoolとhcidumpを動かします。

CQ出版 IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)

こういった実験に適した専用のプリント基板も販売中です。筆者が約2年前に設計し、2016年4月に発売させていただきました。
IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)
BLEビーコンの実験を行うには、IF ICH-KITに含まれるWireless Shield基板へRN4020を実装します。RN4020モジュールやWireless Shied基板用のパーツについてはキットに含まれていません。

CQ出版 IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)に含まれるIchigoJam用のプリント基板「Personal Computer」(左)と、ワイヤレス化用のプリント基板「Wireless Shield」(右)に部品を実装したときの様子。

下図に実験の様子を示します。液晶にRN4020との通信状態が表示され、デバッグにも活用することが出来ます。この基板上のシリアルの切り替えスイッチにより、IchigoJam、パソコンのUSBシリアル、RN4020モジュールのシリアル切り替えが簡単に行えます。

Personal Computer基板には液晶やブザー、5Vと、3.3Vのレギュレータ、EEPROMなどが実装可能。また、基板裏側にはUSBシリアルICの実装も出来る(部品は別売り)。Wireless Shieldと組み合わせたときには各シリアル切り替えスイッチが便利。様々なワイヤレス対応プログラムの開発に役立てることが出来る。

なお、AE-RN4020-XBモジュールのXBee 13番ピンがプルアップされているので、常にBTNが押下された状態となります。
対策方法は、いくつかあります。入力ピンにANA(2)を使用するようにプログラムを修正するか、Wireless Shield基板上のR32を取り外すか、AE-RN4020-XBモジュールのXBee 13番ピンをカットするなどです。

ご注意

本ブログで紹介した方法は、BLEの実験や制作を簡単に行うものであり、製造元はデバイス名を頻繁に変更することを想定していないかもしれません。BASICプログラムでは数値の変化が大きい場合のみデータを書き換えることで、デバイス名の変更回数の低減を図っています(行番号220 ifA>=B-5andA<=B+5goto200)。
by ボクにもわかるIchigoJam用マイコンボード