2016年3月27日日曜日

Electron届いた



あがー。操作ミスで記事が消えてしまった。

もう一度書くほどの内容ではないので要約:
  • Electronは2G/3G回線そのまま使えるマイコンモジュール、$69でとても安い
  • パッケージも製品もとてもきれいな仕上がり
  • アクティベートは簡単だけど、モジュールが起動するまでちょっと時間がかかる
  • プログラムのアップロードはairでもできるけど通信料かかるのでUSB経由がお勧め。だけどWeb IDEはair専用なので、CLIでビルドする必要がある。
  • CLIでコンパイルするにはファイルを列挙してクラウド上にアップロード&ビルドする必要がある(後述)
  • ビルドしたバイナリをアップロードするには particle flash --usb Blink.bin
  • ただArduinoのソースそのままビルド通すのはかなり大変。
    • #include <Wire.h>などは削除して #include "application.h"に変更
    • Wire.begin(sda, scl)形式のコンストラクタは使えないのでWire.begin()へ
  • 最終的には_yield() / yield()が見つからないって言われてgive up。

CLIでのコンパイル例:
particle compile electron SSD1306Demo.ino  SSD1306.cpp SSD1306.h SSD1306Fonts.h SSD1306Ui.h images.h --saveTo firm.bin


こんな感じです。苦労して最終的に成功したのであれば頑張ってもう一度記事を書くけど、最終的に動かなかったのだからボツ。

大人気で売れたわりにインターネットに上がっている作例が少ないのは、Arduinoのソース / ライブラリがそのまま使えないことに原因があるんじゃないかと思います。

製品の仕上がりもいいしドキュメント類は使いやすいとはいえないけど充実させようと頑張っているのが伝わってくる。良いプラットフォームに育って欲しいとは思うんだけど、どうも私とは相性が悪いです。

苦労した挙句動かなかったのでどうも使う気力がわかないんですが…せっかくお金払ったことですし…とりあえずGPIOなどはArduinoと同様に使えるので、手持ちのアナログ温度センサー、PIR、空気質センサー、ダストカウンター、GPSなどをつないでみようかな。

「実家のおかんの生存確認センサー」ぐらいには使えますね。

輸送中にぐちゃぐちゃにw

バッテリも附属

うーむ、ムダになってしまった

Sublime TextからESP-WROOM-02を扱う


ESP-WROOM-02のプログラムをビルド&アップロードする一番手っ取り早い方法はArduino IDEにESP-WROOM-02ボードを登録することで、皆さんもお使いかと思います。簡単に使えるので私も愛用していますが…ちょっと長いプログラムを書くのには向いていないかな?という気がしています(※個人の感想です)。

とりあえずArduino IDEを「外部のエディタを使う」設定にして(preferenceで)、Sublime Textでコード書いてました。Sublimeでテキストを保存するとちゃんとArduino IDEにも反映されるので、これで十分快適ですが、やっぱりショートカット一発でビルドしたいのが人情です。

Sublime textにStino packageを入れてみたのですが、ESPには対応していない様子。

その後、別のことを調べていたら、PlatformIOを入れて、Sublime TextにDeviotプラグインを入れれば、可能でした。

ただ、「どうしてもPlatformIOを使いたい」「どうしてもSublime Textから使いたい」ということでないのなら、Arduino IDEから全面移行するメリットは小さいかもしれません。

PlatformIOのインストールもあれこれdependencies地獄をさまようことになって大変です。それにディレクトリの構造がArduino標準とは違うので、Sketchディレクトリを開いて.inoファイルをエディットしてそのままビルド、とはいきません。まずPlatformIO形式のプロジェクトを作り、その中のソースをエディットし、必要なライブラリをインポートしてからビルド…という手順が必要です。

あとSublimeの場合、DeviotとArduinoがぶつかってしまうのか cmd+/ でコメントを切り替えることができなくなってしまいます。言語をC++に切り替えれば使えるようになりますが。

そんなこんなで、気楽に使うのであれば、Sublime TextにはDeviotは入れずにエディタとして使い、ビルドはこれまで通りArduino IDEにまかせておくのが良いかもしれません。

2016年3月23日水曜日

ESP-WROOM-02 + BME280、省エネ編

ベランダに置いてたけど、結構汚れるもんだ。

■Deep Sleep■

以前作ったESP-WROOM-02 + BME280の瓶入り気象?センサーを少し改良して、省エネルギー仕様にし、エネループ単3黒3本で駆動してみたところ、17日間動作しました。

ESP-WROOM-02はいつものTareObjects製Board1のプロトタイプ、deep sleepが働くようにIO16とRESETをつないであります。

プログラムは以下の通りです。



約1分ごとのデータ収集ですが、気象データならもっと低頻度で十分かもしれないですね。外に置きっぱなしなので、電池交換頻度は1ヶ月に一度として40日ぐらいは動いて欲しいです。となると3分に1回か…。

■追記6/11日

間隔を5分にしました。104行目を60から300に変えるだけです。あ、黒エネループで17日だったのか…白エネループ入れたので約2ヶ月ってところかしら。

2016年3月21日月曜日

ElecrowのPremier PCB Service

PCBAで出来てきた基板のシルク印刷やカットが今ひとつ汚かったので、もうちょっと何とかならんかね?と言ったら、「これはあくまでも安くて早いプロトタイプなので、きれいな仕上がりを求めるならPremierにしてくれ」との返事。

いつもはこんなにひどくないのよ。過去最悪。

そんなに超高品質の仕上がりを求めいているわけではないのですが…まぁそういうことならしょうがない、ってことで、注文。

28x50mm、両面、1.00mm、銅箔35μ、白レジスト黒文字を100枚…という条件で$130でした。

通常のPCB Serviceだと10枚10ドルです。もちろん枚数違いますけども、そんなに高くなるというわけではないですね。

ご参考まで。

2016年3月16日水曜日

ミニブレッドボード満載

今気付いたけど温度と湿度が逆だな。直しました。

ミニブレッドボードはかわいい。場所を取らないし安い。出来る子なんです。というわけで、てんこ盛りにしてみました。

BME280、秋月さんがずっと品切れ状態なので、部品沼に沈んでいたものを使います。同ブレイクアウト基板はBME280の機能すべてを使える形のものが秋月さん、Sparkfun、スイッチサイエンスさんから出てますが、このメーカー不詳の基板はI2Cでの利用だけに特化しているので、場所を取らず配線がラクです。

空気質センサーは電源にUSBシリアルからの電源を直接つなぎ、センサーからのアナログ出力を半固定抵抗で分圧してTOUTに入力しています。

OLEDは例によって0.96インチSSD3306搭載のアレですが、今回は白を使ってみました。なお、ロットによってGNDとVCCの位置が逆だったりしますので、くれぐれもご注意ください。

肝心のESP-WROOM-02は自前のボードです。近日発売なので、その節はよろしくお願いします。 本日発売されました(2016年4月11日、追記)。

<追記 2016-03-18> 空気質センサーは90mAも消費するだけあって、動作させたままだと結構暖かくなります。放射温度計で測ったところ、一番暖かい場所で51度でした(室温24度)。使用する時にはこのことをお忘れなく。

■設計■

123Dとか使えば良いんですが、必要なモジュールがないと面倒だし、今回は回路ってほどのものではないので表計算を使いました(笑)。

あ、背景塗り忘れがある。けど面倒なので直さない

雑ですが、色は「硬いジャンパーワイヤ」の色です。」と「は曲がり角。まず最初に部品同士がぶつからないか実際に挿してみてレイアウトを決めます。それから、最初にGND、次に電源、それから信号線を置いていきます。置いたら長さを数えて、それに合った色を塗っておきます。

なお、配線図でBME280のVccとGndをESP-WROOM-02のIO13, IO12につないでいます。BME280はごくわずかな電流しか消費しないので、ESP-WROOM-02のGPIO出力から電源を取ってしまおうという寸法です。ピンによってはプルアップ済だったりリセット時に異常な電圧が出てくるのですが、IO4/IO5/IO12/IO13であれば問題ありません。ただ、ESPにかぎらずマイコンのGPIOはリセット時にハイインピーダンス状態になるので、起動したらなるべく早くHIGHとLOWを出力するようにします。間違ってもHIGHとLOWを間違えないようにしてください。

ちなみに私のジャンパーワイヤー入れはこんなぐあいに長さと色を表?にして張ってあります。長さより穴数の方が良かったなーと毎回思うので次のバージョンでは併記したいと思います。まぁたまにオレンジ色みたいな赤とか、青か緑か区別できない色のワイヤが混ざってたりして悩むのは改善されませんが。


なお、このパッケージに入って売っているジャンパーワイヤーは短いのがすぐになくなって、長いのだけが残ることで有名ですが、サンハヤトで短いやつだけ売ってます。直角になってなかったり平行でなかったりして閉口しますが、私はたくさん買ってストックしてあります。


■ソフトウェア■

今回先に貼っておきます。今まで使っていたBME280用ライブラリがこのモジュールでは動作しなかったので、例によって彷徨った結果、Sparkfunさんのライブラリが動作しました。I2cモードを選択し、I2Cアドレスは0x76ですのでご注意を。

余談ですが、以前から使っていたライブラリが動かなかった時には「あ、またebay.comにやられたか?」と思いました。Ebayはたまに部品番号はあっていてもタイトルが間違っていることがあります。以前9960を探している時に「RGB Gesture Sensor」って書いていてある9930というチップがヒットしました。やけに安かったのでたくさん買ってみたら単に明るさと近接センサーだけで安物買いのなんとやら。なので今回、もしや高価なBME280(温度湿度気圧)ではなくBME180(温度湿度)なのか?と思ったりしましたが、無事でした。

なお、9930はお風呂時計用デジタル時計で「部屋が明るくなったらLEDの表示をonにするための機能」として健気に働いております。

ebayのご利用は慎重に、くれぐれもat your own riskとpaypalで。

まぁ今回は、ライブラリ変えたら動きました。空気質センサーは半固定抵抗で分圧した値をTOUTに入力したので、アナログ値を読み取ってそのまま表示しています。

表示はOLED、以前と同じくこのライブラリを使っています。

各ライブラリの作者のみなさんに感謝致します。



■配線と動作確認■

設計通りにすべてのジャンパーワイヤーを刺していきます。直角に曲げるときにはラジオペンチやピンセットを使います。

刺し終わったものがこちら。


この状態でもう一度実物とあわせながら配線が間違っていないか確認します。


テスターがあれば、最低限GND-Vcc、Vcc-Vin、Vin-GNDがショートしていないかを確認しておきます。次に、ESP-WROOM-02だけを挿して、USBシリアルとの間の5vとGndだけを接続してみます。この状態で、もう一度テスターでGnd-Vin(5v)、Gnd-3v3の電圧を確認します。USBシリアルからの出力電圧やUSBからの電源電圧はわりといい加減ですが、どちらも誤差5%以内なら問題ないです。


さて、電源に問題がなければ、一度USBシリアルからUSBを抜いて、5v-Vin間の配線を外します。この状態で残りの部品を挿して行きます。

今までもわりと慎重に進めてきましたが、ここで間違うと元も子もないので、配線表と確認しながら実施します。なお、私は過去、そもそもの配線表が間違っていた、という過ちにより何度かチップを殺してしまったことがあります。くれぐれも各段階での確認は怠りなく。


そして、最後に電源を接続してUSBシリアルをUSBと接続、今回上記BME280ライブラリが動かなかった件を除けば、一発で動作しました。まぁ、今まで使ったものを組み合わせただけですからねぇ。

なお、まだGPIOピンが3本(電源に流用したものを含めれば5本)余ってますから、ダストカウンターを接続することもできますし、I2Cにはアドレスがぶつからなければ、まだ5-6個は搭載できます。TxとRxも空いているのでGPSも使えます。

…そんなのを何に使うんだ?という疑問をもってはいけません。

以上、ミニブレッドボードてんこ盛りでした。

■追記■

ダストセンサーPPD42も追加してみました。

…いかん、ミニブレッドボードからはみ出してしまった。



2016年2月29日月曜日

ESP8266のオートプログラム仕様

最近発売されるESPブレイクアウトボードには、「GPIO0をGNDに落とした状態でRESETを押す」なんて面倒なことをしなくても、Arduino IDEでcmd+Uを押すだけで勝手にコンパイル→アップロードが済むようになってます。Auto Program機能ってやつですね。フリップ&フロップやダイオードを使ったものなど何種類かあるようです。

DTRからの出力を時間差を作ってRESETとGPIO_0につなぐだけなので、組み込むのは造作もないことなのですが、私の設計している基板には搭載していません。

それは、ESP8266/ESP-WROOM-02にはリセット時に内部クロックがGPIO_0(ゼロ)から漏れてくる、というバグがあるからです。ただ漏れるだけなら大したことはないのですが、個体によっては -1 〜 5v まで変動するという計測結果もあり、これは回路によってはFTDIやUSB端子までも壊しかねない電圧です。

私の基板は、開発用ではなく「使い倒す基板」がコンセプトです。そのためにオーバークォリティ気味のレギュレータとOS-CONを搭載し、大きな面積を食うネジ穴を3つも開け、何より開発の時にしか使わないものに電流を食われることを排除しています。

ArduinoみたいにIDEでcmd+Uをタイプするだけでアップロードできるのは確かに便利ですが、ESP以外の基板を破損するようなリスクは極力小さくしたい、と思ってます。なので、GPIO_0にはスイッチとプルアップ抵抗しかつないでいません。

なお、あんまり作例ではみかけないのですが…GPIO_0に取り付けたスイッチは、プログラムをアップロードするときだけでなく普通にスイッチ入力として使えます。スイッチが1つ付いているだけですごく便利なんですよね。ただ、チャタリングを避けつつ長押しとちょい押しを判断するプログラムって以外と面倒くさいので、今度、作ります。

閑話。



写真がないと寂しいので、今日の昼飯(仕出し弁当430円)の写真を貼っておきますw 430円の割には野菜分が多いので愛してます。

なお、今日から「特茶」飲み始めました。

知人がこれで数キロ落とすことに成功したというので、箱買しました。その安易な姿勢が(ry

メイカーへの道(笑)


10枚だけ頼んだのに(付箋にも「数量 10」って書いてあるし)、明らかに30枚ぐらい入っている件w どうしたelecrowさん?!

というわけで試作バージョン5の基板が届きました。

バージョン4からの変更点は一箇所だけだったし当初の予定から大幅に遅れているので「さすがにもう治すところないだろw」と量産(まぁ20個だけどね)発注しようと思ったけど、思いとどまって基板のみ発注しました。

…まぁそういう場合、大抵問題はないんですよね、私の場合。「大丈夫だろう」でGOするとコケるけど、「一応、念のため」で確認すると問題のない人生。嗚呼。

それにしても、Viaが小さいです。こんな穴どうやって開けてるんでしょう。白のレジストは比較的厚めになるので、どこにViaがあるのかわからないです。一時期、私のEagleで自動設計するとViaが0.6mmぐらいあってレイアウトに苦労したんですが、あれはDesign Ruleの指定を間違えていたのだろうか。

今回スイッチ用に大きめのスルーホールをあけたんですが、この内面がエラいこと綺麗です。いいメッキだわ。これで春節明けから10日丁度、2000円かからないんだから、もうブレッドボードからユニバーサル基板を飛び越してプリント基板を作るのも当たり前って感じ。

レジスト白か赤かで悩んでました。色味としては赤が一番きれいのですが、老眼的には白が一番見やすいので。

あと部品のValueを入れるかどうかも悩みどころ。Valueが入るとどうしても基板表面がごちゃごちゃして美しくないのですが、メンテや説明の時に情報量が多い方がラクなので入れてみました。

そんなこんなで、これで量産発注するぞー!

…繰り返しますが、20個だけですけどね。

余談ですが、先日、映画スティーブ・ジョブズを見てきました。「カスタマーは自分が何を欲しているか知らない」というのはジョブズさんの有名な言葉ですが、「メイカー」っぽいことをしているとその言葉を実感することがしばしばあります。それに人は目の前にあるものを改善したくなる生き物なので、カスタマーの声ばかり聞いているといつまで経っても製品としてリリースできなくなってしまいます。

時にはカスタマーの声にあえて耳を塞ぐこともリリースするためには必要ですね。

これからも「自分が欲しいものを作る」ことを大事にしていきたいと思います。

何事も慢心は禁物(リフロー編

あれほどの作業効率を誇っていたサンハヤトの特殊ハンダクリームも劣化が始まったのか、基板への付着性が今ひとつ。注射針から押し出したクリームも以前のような光沢がなくザラついた感じです。

適量のせるのが難しく、乗らないか乗りすぎるか、というデジタルな状況。ハンダが多すぎるなぁ…とは思いつつ、一部だけ拭き取るのは難しいので「まぁいいか」と進めた結果がコレです。



いやー酷いですねーw レジストを白にしたのでフラックス汚れが目立つというのもありますが、汚いです。

この後、ハンダゴテと吸取り網で激しくナナメになった部品を取り除いてから手ハンダ付けしました。

今日はもう一枚大きな基板をリフローする予定だったのですが、新しいハンダクリームが届いてからにしようと思います。

で。

その後、ElecrowへのEMS伝票とインヴォイスを書いたのです。中国にものを送るとなると住所がまず長いというのもありますし、英語表記だとHang Feng Road, Gushu…みたいな感じでなるのでとにかく長くなってしまうので。今回は、前回書ききれなかった反省を踏まえて字を小さくきっちりと見事に書き上げました。

…EMS伝票(書類用)でした。

もう一枚書く気力がないので、郵便局に印刷伝票の手配を依頼しました…。

2016年2月24日水曜日

ESP-WROOM-02 + 空気質センサー


空気室なら知ってるけど、空気質ってあんまり聞かない / 使わない言葉ですね。意味わかるけど。


ずっと前にaitendoで衝動買いしてそのまま忘れていました(空気質センサモジュール [MQ135-4P])。それにしても空気質。指標はいろいろありますが、いったい何を測定してくれるのでしょうか。とりあえず、この手のものとしては秋月で売っているTGS2450が電子工作界ではおなじみだと思います。

秋月のサイトから

ただしTGS2450は結構気難しいというかヒーターの電圧や加圧時間を間違えるとすぐに焼損することで有名です。私も使ったことがあります(懐かしい記事はこちら)。

でも、こっちの空気質センサーは、モジュールになっていて電源5vをかければ0-4vで空気の質がわかる、というシロモノです。

ということで、使ってみました。

<追記 2016-03-18> 90mAも消費するだけあって、動作させたままだと結構暖かくなります。放射温度計で測ったところ、一番暖かい場所で51度でした(室温24度)。お使いになる時はこのことを覚えておいてください。

■構成■

毎度おなじみESP-WROOM-02のTOUTをアナログ入力として使います。TOUTは1v入力なので、空気質センサーの出力は分圧してから使います。

接続はこれだけです。空気質センサのDoutは使いません。なお、空気質センサーは100mA近い電流を消費するので、小さなUSBシリアルだと電流容量不足になります。

ESP-WROOM-02USBシリアル半固定抵抗空気質センサ
5vVcc
Vcc3.3v
GndGnd1Gnd
TxRx
RxTx
Tout2
3Aout

■調整方法など■

分圧には10kΩの半固定抵抗を使いました。

ぶっつけ本番でいきなりToutにつなぐとESP-WROOM-02をぶち壊す可能性が高いので、最初はブレッドボードの上で半固定抵抗の1を5v、3をGndに接続し、2とGndの間の電圧をテスターなどで測定しながら抵抗のツマミをまわし、約1.2vになるように調整します。

空気質センサーの出力が4vなのだから5vで調整するとしたらフルスケール1.25vなのですが、少し余裕を見ます。なお、半固定抵抗の1と3は対称なので、調整後に組み込む際に間違えないようにします。私の場合はツマミのついている側を1に決めています。

先日のSCL/SDA同様、こういう決め事を作っておくと事故を防ぐことができます。

…と、数多くの事故にまみれてきた私が言うのだから説得力があります。

…いや、無いのか。

■ソフトウェア■

毎度おなじみの秒単位簡易リングバッファで1分間の平均値を取ってThingSpeak.comへ送っています。


■計測結果■

計測結果ですが、ほぼ無臭のフロンガスのエアダスターに対しては1mぐらい離れたところで使っても反応があります。無水アルコールにもわりと敏感ですね。私が「ハーッ」て息を吐きかけると、てきめん、数字が上がるので心が傷つきます。

[19]で息を吹きかけました。

ThingSpeak.comでの計測値はこんな感じ。


さて。加齢臭にはどうなのか。知りたいような知りたくないような。明日、換気状態で出勤して値はどう変わるのか。追ってご報告申し上げたいと思います。

…私が寝ている間に62まで下がりました。04:15ごろ起床。