サーバーを移管しました

さくらのVPS4GBからダウングレードして さくらのVPS 2GBに移行しました。

ESP8266ボードにジャイロを搭載した

ESP8266ボードにジャイロを搭載した

Elecrowに出していた基板のVer.2が納品されたので早速リフローしました。

なんと今度はジャイロ搭載です!

記載の動画は、ジャイロの情報をESP8266経由でシリアルに流して、それをPCのProcessing上で動くアニメーターで受けて思うがままに追従させるデモです。

もちろん、ESP8266はWiFi SoCですから、UDPパケットにして送信したりすればシリアルラインは不要となります。また、今回のオリジナルボードにはリチウムポリマーの端子がついているので、完全ノンワイヤーで動かすことができます。

何に使うの?

今回使ったMPU-6050は、加速度とジャイロ(角速度)の2種類のセンサーと、DMPというモーションプロセッサが内蔵されたチップです。こういうユニットのことを、一般にはInertial Measurement Unit(IMU)と言って、自動制御には欠かせない部品です。センサーですから単体で何ができるかというわけではありませんが・・・そうだな・・・一般には、ドローンに1個は必ず搭載されているもの、であって、自動運転自動車とか多関節の歩行ロボットだと複数個ついていてセンサーデータを統合しながら動いているんですね。まあ「ロボット用」と言って差し支えないと思います。

QFNパッケージ

今回のオリジナルボードの場合、ESP8266のIO4,IO5をI2CバスとしてMPU-6050が接続されています。IO15ははんだジャンパで割り込み入力用に割り当てることができます。IO12,IO13,IO14はSPIバス用に開放されていますので、モータードライバー等をSPIバスに接続すれば、これは「WiFiでコントロール可能なドローンの頭脳」として活用することが可能なわけです。

ま、そこまでできないですが(^^;自動制御よくわかんないし。でも、単純にrawデータを得るだけでも、デジタルガジェットとしてのGUIの改善などに役立てることができるでしょう(iPhoneアプリでよくある、横に向けると画面も横になる、みたいなやつです)。

ちょっと高くなってしまうけど、おおよそボードの仕様が固まりつつあるかなーという感じです。本音を言うと、QFN24ピンのはんだ付けが一番大変でした・・・・

ESP8266にmicropythonをインスコ

言語micropython

せっかく画面付きのマイコンが手に入ったので、その上で遊べるインタプリタ言語があれば色々楽しめるかなと思っていました。最も有名なのはNodeMCU上のLua言語だと思います。LuaはTokyoTyrantの組み込みプロシージャ拡張でも使ったことがあるので馴染みがあります。ESP8266界隈では最も普及しており情報も豊富なのですが、私はひねくれものなので別の言語を探しました。

しばらく調べているとmicropythonというものがあることがわかりました。元々Kickstarterで募集していた「pyboard」というSTMicro SoC搭載のマイコンボード上で動く組込用Pythonのようです。これがESP8266にも移植されているということのようです。

さっそくgitから色々引っ張ってきてコンパイル。若干苦労しましたが書き込み自体は割と簡単でした。ターミナルつないで動かしてみると、ちゃんとプロンプトが出て、その中でLEDを光らせたり、OLEDに文字列を表示できたりするのは、なかなか箱庭感覚で不思議なものです。どうせならPS/2キーボード付けて完全スタンドアロンにしたい衝動にかられます。

saveができない

しかし・・・一通り楽しんで・・・ありゃ?これはREPL(インタプリタ)単体でスクリプトを書けないの???WebREPL(別のPCからWebブラウザで見るためのWebUI)を起動するか、webrepl_cli.pyというスクリプトで外部から接続しないといけなそうなのです。間違いだったらすみません。

もう少し、手軽に使えるものだとばかり思っていました。そりゃ今は確かに仮想端末でUSBシリアルでつないで文字入力してますが、必ずPCが必要というのはちょっと夢がないような(完全に難癖ですが)。でも、UNIXサーバでの開発がそうであるように、まずインタプリタで試して、再現した手順をバッチに保存したい、みたいな用途は絶対あると思うのですよね。

ちょっとソースを読もうと思いましたが、完全に荷が勝ちすぎております。どなたか解決方法あれば教えてくだされ。

 

ESPタイニーサイネージを作った

ESPタイニーサイネージを作った

長かったが、ようやくできました!

ESPタイニーサイネージ

ベース基板は↓のような感じ。ホームリフローでも、がんばればこんなミニ基板が作れるのね。

ベースボード

ベース基板には、WiFi SoCのESP8266EX W-ROOM-02をメインとして、フルカラーLEDのWS2812Bが載っています。電源はマイクロUSB端子以外に、リチウムイオンポリマー電池も使えます。

残念ながら、USBシリアル変換チップは載っていません。USB端子は本当に電源だけの利用です。これは、省スペースと低消費電力化のためです。開発時にしか使いませんから・・・・

スイッチサイエンスの5V/3.3VUSBシリアル変換

開発したい場合は、スイッチサイエンスのFTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)をぶっさすと、Arduinoでプログラミングできるようになります。上記のはお高めですが、Arduino micro互換のピン配列のUSBシリアル(DTRが6番ピンに来ているもの)なら大丈夫です。

なお、eBayやAliexpressで$5くらいで売っている(電子工作では定番な)有機ELディスプレイ(128×64ドット)ボードが、ちょうど乗っかるようにi2c端子が生えています。最初の写真はディスプレイをつけたものです。

開発目的

覚えてらっしゃるでしょうか?その昔、Chumbyというデジタルガジェットがあったことを。

chumby

LinuxとAdobe Flash Lite(だったような)が載っていて、アプリもいろいろ入れ替えて使える、WiFi付きの時計、みたいなガジェットでした。言うまでもなく”スマホ”にやられてしまいましたが・・・(*_*)

そう、スマホ、iOSやAndroidの通知機能は便利ですよね。しかし、「認知」=「事象の存在そのものを把握する」ということに関しては、単一の画面、単一のデバイスのスマートフォンだけに頼っていいのだろうか?という疑問が私にはあるわけです。

むしろ、人間はデバイスを持たず、ありとあらゆるところ、キッチン、玄関、廊下、ベットサイド、そこら中に表示デバイスがあれば、ロックを解除して通知画面をフリックしてアプリを起動して・・・とやらなくても良いんじゃないかと。かなりパッシブな情報提供でも事足りるのではないかと。本来の意味でのユビキタスコンピューティングですね。

例えば、朝もうあと1分で家を出なきゃ遅刻しちゃう、でも今日傘持っていく必要があるか知りたい!テレビのDボタン?いやテレビは消しちゃった、スマホスマホ・・・Yahoo天気を起動、遅い!みたいなことをやらなくても、玄関でLEDが水色に光ってたら傘を持っていく、というシンプルな仕組みにしたいのです。

これ、実は世間様ではすでに実現されていますよね。街頭や山手線内の「デジタルサイネージ」として。だから私は「ホームサイネージ」を作ればいいんじゃないかと。で、出来たのが、このしょぼい自作デバイスというわけです。私は本当はLinuxが得意なので、RaspberryPiで作れば何もしなくても済んだのかもしれませんが、RaspberryPiはパッシブ表示デバイスとして扱うには、ちょっとでかくてお高くてリッチで、鶏を割くに焉んぞ牛刀を用いん感が無きにもあらず。画面もついていませんし。

てなわけで、この界隈では「タイニー」と付ければしょぼくても許される気風がある(ねえよ)と勝手に思っているので、名前は「ESPタイニーサイネージ」です。

ElecrowでV-CUTした基板が届いた

ElecrowでV-CUTした基板が届いた

裏面

  • 4/26 受付
  • 4/27 PCBプロセシング
  • 4/28 プロダクション(製造開始)
  • 5/12 発送(EMS)
  • 5/16 到着

製造・・・時間かかったナア・・・やはり、面付けは向こうのエンジニアにとっても面倒のようだ。付けられたV-CUT(溝)は、シュリンクパッケージの上からはイマイチわからないくらい薄いものだった。本当に切れてるの??

V-CUT断面

おー?!確かに切れてる

しかし・・・・基板の真ん中を通るラインは軽く力をかけただけでも折れそうなのだが、端っこの6mmのテクノロジーエッジの部分は文字通りテコでも割れない(^^;

応力がかかる部分には相応の面積がないと力が伝わらないようだ、かといってラジオペンチなどで部分的に加圧すると、ガラスエポキシ基板に捻じれの力が加わって良くなさそう。

うーん、やはり素人には面付けはオーバーテクノロジだったか・・・テクノロジーエッジは10mm以上とりましょう。ぱんだとの約束だ!

両面PCBステンシル

ついでなので、両面用ステンジルも公開。

両面ステンシル

単純に両面分並べてあるだけだけれども・・・こんなの自作するのは100%不可能だねご家庭カッティングマシンで作る方法があることはわかるけど、金属ステンシル1700円ちょっとで作ってくれるなら作ってもらったほうがいいよ絶対。

地味に良かったこと

面付けすると、テクノロジーエッジという「余白」を作ることになるが、ふと思い立って、そのエッジに直径3mmのホールを四隅にあけておいたら、なんとPCBステンシルにも同じ穴をあけてくれており、位置合わせがすごぶるし易かった。普通の基板のときは、そんなことしてくれたことはないので、多分業界では当たり前のことなんだろうと思う。

ESP8266開発ボードの設計者に物申す

ESP8266EX

これだけ普及しているESP8266EX(W-ROOM-02)について、素人がつまらないこと2点だけ言いたいので書きます。

RSTのプルアップ抵抗について

そこらの掲示板を読むと、10kオームでは動かない、3kオームでないといけないとか、色々書いてありますよね。きちんとプルアップ抵抗つけないとリセットできないとかブートしないとか。

でも、ESP8266EX Hardware Design Guideを見るとですね・・・

esp8266_rst

・・・・・・・

・・・

プルアップ抵抗5.1k入ってるよね?

いらないよね?外付けのプルアップ抵抗。もしかしたら3kは意味あるかもしれないけど、5.1kオーム以上のものはすべて無効だよね?

チップ単体で測定すると、だいたい4.8kオームくらいなので辻褄はあっている感じですがどうでしょうか?

CHIP_EN信号について

これも巷の掲示板読むと「仕様が途中で変更されて3kじゃなく1kオームじゃないと動かない!」とか書いてあります。あと、電源が1A以上の余裕のあるものじゃないと動かないとか、ひどいのになると1000μFのデカップリングコンデンサがあれば大丈夫とか書いてありますが・・・

件のガイドにはこう書いてあるんですよ。しかもデカデカとNOTICEに。

ESP8266_EN

要するに安定するまでEN信号は遅延させよう、ということなのです。模式的な回路にするとこんな感じ。

ESP8266_EN2

さらにENは元々プルアップされているわけだから、実際は抵抗も必要なく、コンデンサ1つ足すだけなのですね。ご丁寧に容量例まで書いてあるのだから従うべきでは?

ところが、この世界ではデファクトに近いスイッチサイエンスのW-ROOM-02開発ボードでさえ省略されちゃってるのよね。不思議ですね~(※決して煽っているわけではなく)

まあ、強引な理由を考えると、ESP8266EXの低消費電力通信機能ESP NOWを使おうとしたとき、遅延するだけ消費電力が延びることを憂慮して・・・とか考えたのですが、ぶっちゃけ仕様書読んでないだけでしょう。他人の作った回路図パチってるだけだといずれは手酷いやけどをすることになると思いますよ。

「H/W設計するなら仕様書くらい読みましょうよ!」言いたいことは以上です。

 

620円で8chロジアナが買えた話

620円で8chロジアナが買えた話

仮にも基板を開発しようというのに、測定機器が20年前のFluke社のテスターのみというのは流石に無理がありました。どうしようもなくて、会社のデジタルオシロを借りたこともありますが、職場で趣味のことをやるのは休み時間であっても肩身の狭いものです。

そこで、またAliexpressネタで恐縮ですが・・・1ヶ月くらい前にUSBロジックアナライザを注文していました。

中華製ロジアナ

$5.74(620円)で!

安すぎぃ!気が狂っている。まあ、どうみても高周波は測れそうにない外観ですし、プローブも付いていないです。でもデジタル回路設計では「信号が正しく出力されているか」ということがわかるだけでも大変助かります。テスターじゃ1Hz以上は絶対にわからないからね!

ソフトのインストールは簡単でした。Debianの場合リポジトリにpulseviewというGUIソフトが含まれているため、

# apt-get install pulseview

で必要なものは全て入りました。pulseviewを起動し、メニューFile→Connect to Device→Driver:fx2lafwと選択して、出てきたデバイス名「Saleae Logic with 8 channels」を選択するとすぐ使える状態になります。

デバイス認識

ここまで5分かかるかかからないか。

WS2812B信号

種明かし「海賊版」だから安い

設定画面のデバイス名を見て、勘の良い人はピンと来たと思いますが、これは海賊版です。Saleae社が昔売っていたロジックアナライザのハードウェアをコピーしたものです。

どういうことか?二昔前にUSB周辺機器を作る際には定番となっていた、Cypress社のCY7C63001A(EZ-USBシリーズ)というチップがありました。昔は、周辺機器に内蔵するマイコンは非常にプアで、USB2.0の400Mbpsという速度は神々の扱うスループットでした。そのためプログラマブルでマルチコア(複数のデジタル信号を並列処理できる)なEZ-USBチップが作られたという経緯があります。

Saleae社は、この高速USBのためのチップを、デジタル信号のキャプチャ装置に流用するという「発明」をした訳です。これは極めてソフト的な発明です。ハード自体はCypress社のリファレンスそのままでした。今回の海賊版も、Saleae社の基板をコピーした訳ではないようです。このため、オープンソースのpulseview(sigrokとlibusb)で使うのであれば違法性は全くありません。

しかし・・・そこは流石中華クォリティというべきか。今回買ったUSBロジアナにはSaleae社のベンダーID, プロダクトIDが、ご丁寧に書き込まれているのですよ。鬼かよ。なので、Saleae社純正のWindowsソフトでもきっちり認識し・・・・

saleae logic

実際に信号も取り込めました・・・

動いちゃうじゃん(i2c)

噂では、Saleae社は、この海賊行為を非常に怒っていて、ハードウェアチェックをして最新のソフトでは起動しないようになっているはずなのですが。1日前にダウンロードした試用版では何事もなく認識しました。

いや、もちろんWindowsで使う気は毛頭ないですけどね!

そりゃね、ぼくもまともなロジックアナライザ、デジタルオシロがほしいですよ!!寄付はいつでも受け付けております!!

ESP8266で有機ELディスプレイ

ESP8266で有機ELディスプレイ

SSD1306 OLED

本来、ESP8266をセンサーハードウェアと考えると、ディスプレイなど必要ないのですが、試作やデバック時には動作状態を表示できるデバイスがあると心強いです。シリアルコンソールだと別途PCが必要ですし、Webサーバとしてスマホからアクセス・・・でもいいですが、最初の1歩目をどうするか(WiFiのSSIDの設定とか!)という問題が残ります。

そこでAliexpressでi2c接続の0.96インチ有機ELディスプレイを買いました。中華クォリティよろしく、写真と全く異なる物理形状ピンアサインのものが届いたけど、一応問題なく動作したので文句は言わないことにします。

esp8266-oled-ssd1306ドライバ

Arduino用のドライバは、squix78/esp8266-oled-ssd1306を使いました。非常に高機能のようですが、単純に使うこともできます。

初期化

SSD1306 display(oled_addr, I2C_SDA_PIN, I2C_SCL_PIN);


 display.init();
 display.flipScreenVertically();
 display.displayOn();

画面の削除と更新

display.clear();
display.display();

文字列描画

display.setFont(ArialMT_Plain_10);
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.drawString(99, 54, string);

ビットマップ表示

display.drawXbm(72, -8, clouds_width, clouds_height, 
(const char*)clouds_bits);

これだけでも十分過ぎるくらい便利です。

使用感など

このライブラリ、標準フォントもとても綺麗で128×64しかないディスプレイでもかなりの情報を表示することができました。マジお勧めです。

あとわずか$5の有機ELモジュールも、反射液晶などとは見え方が全然違って、画面自体は小さくても、かなり遠くからでも視認できます。いつまで持つか(安い有機ELはシーリングが甘く寿命が短い)は未知数ですが、工作用としては十分以上です。

なお、ESP8266との接続はSDAをIO5, SCLをIO4に割り当てることでスムーズに接続できました。たぶんESP8266 SDKのWireクラスのデフォルト値でもあるでしょうから、他のデバイスとの共存も容易にできることでしょう。

とりあえず、今は天気予報時計を作っています。

 

 

EAGLE CADで面付けをする

EAGLE CADで面付けをする

そろそろ旬を過ぎるであろうESP8266(WiFi SoC)を使ったボードを急いで設計しています。今までの反省を元に、必要な機能だけをコンパクトにまとめることを目標に作業を進めています。

ESP IoT Board

ボードサイズは43mm x 28mmに抑えました。28mmは、電子工作の世界では一般的なフリスクケース(内寸 60mm x 28.5mm x 8.5mm)を流用することを考えて決定しました。

でも、この小さな基板1枚1枚に、クリームはんだを塗って、チップ部品を乗せ、リフロー炉で焼く・・・という作業を繰り返す想像をすると、かなり憂鬱になります。できれば作業はある程度まとめてやりたいですね。

そこで面付けという作業を行います。面付けとは、同一設計データを、1枚の基板上に、タイル状に並べることです。合体してたら困るじゃん!と思うのですが、V-CUTという溝を掘ってもらうようにすることで、後で切り離せるようにします。

くっつけて、ある程度大きい基板にしておくと、一度に何枚分かの基板をリフローできるので作業効率が激しくアップします。

今まではSingle PCB with millingという発注の仕方でした。millingは一般にフライス盤のことですが、どうも基板の世界ではドリルミリングカッターを指すようです。曲線などの複雑なカットができる半面、少々割高でした。一般に、試作ならこれでもいいんですけどね。面付けは基板の自由度が減る半面、少しだけコスト削減にもなります。

面付けの条件

Eagle-7.xでは、メニューのToolsにもろに「Panelize」というツールがあるので、これを使いましょう。EAGLEでは、単純に回路データをコピペすると、部品につけられた連番名(抵抗だとR1,R2…,みたいなもの)がインクリメントされてしまいます。先ほどのツールは、コピー元のtNames, bNamesレイヤーに書かれた連番名を、_tNames(125番), _bNames(126番)などに写像してくれるだけのツールです。

もう少し・・・融通が利かせられればいいだけなのにねえ・・・

手順としては以下のようになります。

  1. 元のボードデータから基板外形含めた全てをコピーする
  2. 新しいボードデータファイルを開いてペーストする
  3. 「Panelize」を実行する
  4. 改めて新しいボードデータをコピペして増やす
  5. 元データから来たDimensionレイヤーの線をすべて消す
  6. ドリル穴などが重複した箇所は個別に消す
  7. _bsilk(122番)にlongdot線でV-CUTラインを描く
  8. 新しい外形をDimensionレイヤーに描く
  9. 新しいボードデータをセーブする
  10. CAM Processerを起動して、silk bottomのbNamesのチェックを外し_bsilk, _bNamesをチェック、silk topのtNamesのチェックを外し_tsilk, _tNamesをチェックしてProcessing

ああ、面倒くさ。

vcutラインの書き方

Elecrowの場合、面付けの制約条件は以下のようなもののようです。

  1. ボードの大きさが 80mm x 80mm以上
  2. 前期サイズを満たすようにテクノロジーエッジを追加
  3. V-CUTラインが外形から6mm以上離れている
  4. V-CUTラインはシルク面に描く
  5. 設計データは全く同一でなければならない(異形データ混合は×)
  6. ボードの向きは同一方向でなければならない(互い違いなどは×)

1,2,3の条件は簡単で、6mm幅の余白を四方に追加すれば満たします。しかし、5,6の条件はEAGLE Lightが80mm x 100mmまでしか設計できないんで割と厳しいですね。自由に貼れるものだとばかり思っていました。せめてLightのサイズが正方形だったら良かったのに(縦横を交換することもできない、あくまで縦が80mm)・・・・

結局4枚しか配置できませんでした。果たしてきちんと出来上がってくるでしょうか・・・

PCBステンシルと面付け

余談ですが、ここまで踏み込んで書いている人は(少なくともWebでは)いなさそうなので書いておきます。Elecrowの場合、割と安くステンシルを作ってくれますが、今回設計したボードのように、表裏双方に表面実装部品がある場合、以下の2種類から選べます。

  • 基板の倍面積のステンシルに、表面、裏面を並べる
  • 表面、裏面、2枚のステンシルを作成

前者の場合は、Elecrowの場合150mm x 150mmのステンシルと200mm x 200mmのステンシルは値段が変わりませんから、100mm x 100mmまでの基板であれば収まりますのでお得です。しかし、自分で部品実装をしてみればわかりますが、ステンシルの取り回しは作業効率に大きく影響しますから、あまりお勧めできません。

後者の場合は、大変素直ですが、お金は倍かかります。標準料金より増えた分のお金は、Premium PCB Serviceというページで$1単位で追加で払います。

あと、面付けすると、あたりまえですが面付けした分のすべての穴があいたステンシルが来るようです。1個1個ずらしてスキージーでなめなくてもいいんだ!

来たらまたご報告します。

さくらインターネットもう駄目かも

さくらインターネットもう駄目かも

cpu-year

自宅サーバは、さくらのVPS 4GBで2年以上運用しているわけですが・・・・昨年11月くらいから徐々にstealが増え始めました。stealは、仮想マシンがホストOSに「CPUパワーくれよん」と言ったとき、ホスト「あげられないなー」と言われた割合みたいなもんですね。

cpu-month

それでも耐えてたんですが、さらにここ2週間くらいでiowaitも激増。このくらいになると端末叩いていてもディスクの遅さが体感できるようになり、SSDプランを借りていてもHDDとあんま変わらない感じで萎える。

まあ、同じホストにすごい面倒な客が引っ越してきちゃったかなー。

年間で払っているので簡単に退去できるわけではないんだけど、そろそろ代替プロバイダ探さないと駄目かもしれませんね。

さようなら、さくらインターネット・・・・君のことは5秒は忘れないよ。