電子工作入門日記 ESP-WROOM-02に書き込めない!

とりあえず、ArduinoでのBME280の試験はブログに書くほどのこともなく完了し、本丸であるESP-WROOM-02とBME280との連携を確認しています。
それで、まずはESP-WROOM-02とお友達になりたいので、適当なスケッチを描いて書き込んで遊んでみようと思いました。
ここで、大ハマり。かきこめる時と書き込めない時がある。
書き込めない時は以下のログが出ました。

Arduino:1.8.3 (Mac OS X), ボード:"Generic ESP8266 Module, 160 MHz, 80MHz, QIO, 115200, 4M (3M SPIFFS), nodemcu, Disabled, All"

Archiving built core (caching) in: /var/folders/pj/_b76f5vs3zx9rq5lfg068xkm0000gn/T/arduino_cache_164851/core/core_esp8266_esp8266_generic_CpuFrequency_160,FlashFreq_80,FlashMode_qio,UploadSpeed_115200,FlashSize_4M3M,ResetMethod_nodemcu,Debug_Disabled,DebugLevel_all______8886ee52af8abeec90f379cbde8a6821.a
最大1044464バイトのフラッシュメモリのうち、スケッチが230621バイト(22%)を使っています。
最大81920バイトのRAMのうち、グローバル変数が32212バイト(39%)を使っていて、ローカル変数で49708バイト使うことができます。
warning: espcomm_send_command: wrong direction/command: 0x00 0x08, expected 0x01 0x08
warning: espcomm_send_command: wrong direction/command: 0x00 0x08, expected 0x01 0x08
warning: espcomm_send_command: wrong direction/command: 0x00 0x08, expected 0x01 0x08
warning: espcomm_send_command: wrong direction/command: 0x00 0x08, expected 0x01 0x08
warning: espcomm_send_command: wrong direction/command: 0x00 0x08, expected 0x01 0x08
warning: espcomm_send_command: wrong direction/command: 0x00 0x08, expected 0x01 0x08
warning: espcomm_send_command: wrong direction/command: 0x00 0x08, expected 0x01 0x08
warning: espcomm_send_command: wrong direction/command: 0x00 0x08, expected 0x01 0x08
warning: espcomm_send_command: wrong direction/command: 0x00 0x08, expected 0x01 0x08
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
error: espcomm_upload_mem failed

これで、数日悩み諦めかけた時、ふと気がつきました。
今の構成はUSB Serial変換モジュールとして「FT232RL」を使い、それを経由してESP-WROOM-02と通信しています。電源は後々のことを考えて電池ボックスからDCDCコンバータを経由して3.3Vを供給しています。
電源は電池ボックスからとってるからFT232RLはRX,TXだけ繋がってればいいよね。通信内容も見えてるし、と思っていました。
でも、違ったんですね。FT232RLもGRDを取らないとダメだったみたい。
GRDをとるようにしたら、すんなり書き込めました。
初心者の変な思い込みが問題となるいい例だと思いました。

電子工作入門日記 序章

電子工作始めます。

きっかけ

数年前に導入した屋外、屋内の環境センサーがとうとう壊れてしまいました。
新しいのを買おうと考えましたがいいのがない。
そういえば、最近ArduinoとかRaspberry Piとか流行ってるよね。IoTだよね!ということで、自分で作ることに決めました。

初心者丸出し

そもそもRaspberry PiとArduinoの違いがよくわかっていなかった。
わかったことはRaspberry PiはPCであるということ。一方ArduinoはマイコンでありOSは動いていないということです。
次に、回路について。なんとなくプラスとマイナスがあって、ぐるっと回ってなければいけないということは知っていた。
触ってみて、デジタルなモジュールはピンに電圧がかかっているか、グランドなのかということが重要だってことです。考えてみればデジタルな世界は0か1かってことです。

構想

さて、今回の目的は屋外、屋内に環境センサーをつけてデータをとってリビングで表示させることです。
いろいろ調べて、それぞれどのようなモジュールが必要かを検討しました。
検討した結果がこちら。

環境センサー
-BME280

通信モジュール
-ESP-WROOM-02

当初は、屋外用としてArduinoにBME280とZigBeeという短距離無線通信モジュールをつける、屋内ではRaspberry PiにBME280,ZigBeeと液晶モジュールをつけて、Raspberry Pi親機構想を考えたのですが、いくつか問題点があって変えました。
問題点は以下。

  • ZigBeeモジュールが高い!
  • 液晶モジュールが高い!
  • ESP-WROOM-02は安くてwifiが使えて、BME280のデータも扱える

まあ、予算的な話ですわ。
結局最終的な構成は以下のとおり。

屋外用、屋内用
-ESP-WROOM-02
-BME280
-電池ボックス

屋内、屋外両方とも上記構成にして、一旦データをネットに上げて、それをリビングの適当なブラウザで見ることにしました。

さてさて、上記構想が実現されるかどうかは、これからのお楽しみ。

つ づ く(おんな城主直虎風に)

snmpttのベストプラクティスを探る

snmpttが不満

zabbixでSNMP Trapを受信する際に使うsnmpttですが、以前から使い勝手がいまいちだと思っていました。
どこがいまいちかというと、Trapの内容がナマなところ。
もちろんsnmpttconvertmibを使って、trapのOIDによってメッセージを変えることもできましたが、それよりもmibファイルをロードして勝手に読みやすくなってほしい欲求がずっとありました。
あと、SNMP TrapはTrapのOIDのほかに、Trapの引数でもOIDが付いてくることが多々あり、snmpttconvertmibではそこがカバーされないところもいまいちでした。
そこで、ちょっと時間を作ってsnmptt.confのオプションを探りベストプラクティスを考えてみました。

zabbixでsnmpttの使い方をググるとよく出てくるのが以下の設定です。

EVENT general .* “General event” Normal 
FORMAT ZBXTRAP $aA $ar

上記はzabbix2.2のドキュメントで記載されている設定です。
Event行で全てのトラップを設定で受ける設定をして、その時の出力フォーマットは

ZBXTRAP 送信元IPアドレス 送信元IPアドレス

です。
僕はこれのFORMAT行の末尾に$*をつけて、SNMP Trapの引数をすべて出力するようにして使っていました。
そして、mibファイルが入手できた場合はsnmpttconvertmibを使って、confファイルを作って読み込んでいました。
これでも一応は使えているのですが、冒頭に書いたような不満がありました。

見つけたベストプラクティス!?

それで、snmpttのウェブサイトをみて、snmptt.confの変数を眺めてみたところ、おあつらえ向きの変数を見つけました。
それが、これ。
$O: OIDのシンボル名の表示
$o: OIDの表示
$+*: 全ての引数をNAME:VALUEの形式で表示

これさえあれば、わざわざsnmpttconvertmibをしなくても、ほしい情報が手に入るのではないでしょうか。
最終的にはsnmptt.confは以下のようにしました。

EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $O($o) $+*

こうすることによってmibファイルがロードされているものは、メールにTrapのシンボル名が記載され、Trapの引数のOIDもシンボルで表示されて、その値も表示されます。

サンプルがこちら。

# snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.42.2.175.103.2.0.91 1.3.6.1.4.1.42.2.175.103.2.1.2 s ABCDE 1.3.6.1.4.1.42.2.175.103.2.1.29 s hostname

# tail /var/log/snmptt/snmptt.log
17/05/26 .1.3.6.1.4.1.42.2.175.103.2.0.91 Normal "General event" localhost - sunHwTrapHeartbeat[.1.3.6.1.4.1.42.2.175.103.2.0.91] sunHwTrapComponentName:ABCDE sunHwTrapHostname:hostname

もちろん、特定のOIDはCategoryやServerityを変えたい場合には、EVENT行でOIDを指定すればよいと思います。

この設定いかがでしょうか!?

ネットワークメモ(1) IPsecのモード

最近、よそ様のネットワークを構築することが時々あって、「あれ、なんだったけな?」ということがよくあるので、メモしておきます。

IPsec IKE実行モード

Main mode

接続先のIPアドレスでも認証するため、双方向で固定IPが必要。
IPアドレスの偽装が難しいため、アグレッシブモードに比べてセキュリティが高い。

Aggressive mode

IPアドレスでの認証がないので、接続元は固定IPである必要がない。
その代わりにXAUTH(eXtended AUTHentication)というIKE拡張機能の認証を行う場合がある。

IPsec 通信モード

Transport mode

端末間でのIPSec通信の時に使う。
自分自身発のパケットの暗号化を目的としている。
IPヘッダは暗号化の対象ではない。

Tunnel mode

VPN装置間でのIPSec通信で使う。
IPヘッダごと暗号化して、新しいIPヘッダをつける。

Static Routeが設定できない機器のルーティング方法

ごぶさたです。

ようやく余裕が出てきたので一本投稿。

最近はシステム構築ばかりなので、それ系のネタを。

QNAPってStatic Routeを設定できないんですよね。
いや、やろうと思えばできるのは知ってるんですが、GUIで設定できないしOS領域をマウントしてとかしなければならないし正直面倒くさい。
そこで余っていたYAMAHAのRTX1X00のNAT機能を使って逃げることを思いつきました。

図1

本当は上記図の通り、端末AからQNAPにアクセスするため、QNAPで192.168.2.0/24へのstatic routeが切れればよかったのですが、その機能がQNAPにありません。

そこで以下のようなネットワーク構成にしました。

yamaha_nat2

端末AからQNAPにアクセスする場合には192.168.1.11にアクセスします。
192.168.1.11のルータはNATでQNAPの172.16.1.11にアクセスし、端末AからQNAPにアクセスできるはずです。はずでした。できませんでした。
結論から言うとNAT用ルータは172.16.1.11にアクセスする際にIPマスカレードの動作が必要でした。

NATの設定だけでは送信元IPは変換されず端末Aのまま。これですと戻りのルーティングがQNAPにないため通信できません。NATした後、送信元IPをルータのIPに変更する設定を172.16.1.2側のインタフェースに設定する必要がありました。

ルータのコンフィグは以下の通り。

console character ascii
ip route default gateway 192.168.1.1
ip lan1 address 192.168.1.10/24
ip lan1 nat descriptor 1
ip lan2 address 172.16.1.2/24
ip lan2 nat descriptor 2
nat descriptor type 1 nat
nat descriptor address outer 1 192.168.1.10 192.168.1.11 
nat descriptor static 1 1 192.168.1.10=172.16.1.2
nat descriptor static 1 2 192.168.1.11=172.16.1.11
nat descriptor type 2 masquerade
nat descriptor address outer 2 172.16.1.2

これで無事端末AとQNAPが通信することができました。
めでたしめでたし。

フレッツVPNワイドがスゴい

最近知ったのですが、NTT東日本の「フレッツVPNワイド」というサービスがとても便利そう。

フレッツVPNワイド

よく拠点同士を安全性の高いネットワークで繋ぎたい、とかいう要望がありますよね。そういう要望の際には、これまでは以下のアプローチをしていました。

* 専用線を引く
* フレッツ光引いて固定IPをとってルータ間でVPNを張る

とりわけ、安価にできるのは後者だと思います。YAMAHAのルータの十八番ですよね。

でも、それよりももっと簡単にできるのがこの「フレッツVPNワイド」でした。

このフレッツVPNワイド、すごいのは以下の点。

  • 民生用ルータでもできる
  • インターネットに出ないので安全性が高い
  • 安い(月額1拠点 1,800円)
  • VPNの運用とかいらない

民生用ルータ、いわゆるバッファローでもOKってのがスゴい。そしてこのサービスはフレッツ網内で完結するサービスなので、インターネットに出ないのがスゴい。そして1拠点1,800円てのもスゴい。普通に拠点間でインターネットVPNをやろうとすると、プロバイダ契約して固定IPサービスオプション使ってなんてやっていると1,800円なんてすぐにオーバーしてしまいます。

ここまで書いて、私はNTTの回し者でもないしYAMAHAルータを敵視しているわけではなく、逆にYAMAHA大好きです。

単純にVPNしたいって場合は、これほど良いサービスは無いと思いました。もちろんYAMAHAでこれまでのようにVPNを張るのもインターネット接続を確保しつつVPNも使いたいという場合にはもちろん有効です。

ケースバイケースで適切・運用楽チンなシステムを選びたいですね!

Mac Marvericksのキーチェーン不具合に終止符

全国8,500万人のMacファンの皆様、こんにちは。

ADアカウントのパスワード期限が来たのでパスワードを変更して以来、ずっと起こっていた起動時にcom.apple.iCloudHelper.xpcやらMessage AgentやらCalendar Agentやらのキーチェーンパスワードを聞かれる不具合に終止符をうつことが出来ました。

皆さん、ありがとう!

ということで、このソリューションをシェアしたいと思います。

お約束ですが、この記事を見て操作しておかしくなっちゃっても責任はとれません。自己責任でお願いしまーす。

ことの発端は、ADのパスワードを変更したときに遡ります。

職場の周囲の人たちが口々に「パスワード変更しないと」とつぶやいていたので、そろそろActiveDirectoryのパスワードが切れるのかな?でもMacの場合どうなっちゃうのかな?と思っていました。

そして、あくる日職場に出勤しMacを起動すると、パスワードの変更を促す画面が出て、最近のMacはしっかりADと連携がとれるんだと、感心しながらパスワードを変更しました。

不愉快なキーチェーンパスワードの入力を求められるようになったのは、そのときからでした。
AD用のアカウントでログインすると必ずキーチェーンのパスワード入力を求められるのです。
※ちなみにADアカウントではないログインアカウントではこの事象は発生していません

最初は分けも分からず、新しいパスワードを入力しては、ブルブルッとなって、何のパスワードを入れればいいのよ!と混乱していました。
そこでふと思い立って前のパスワードを入力したところ、認証に成功したようでした。

で、ちょっと調べてみるとキーチェーンのログインパスワードの変更が必要であることが分かったので、「キーチェーンアクセス」を起動して、「編集」から「キーチェーン”ログイン”のパスワードを変更」でパスワードを変更してみました。

特に警告やエラーも出なかったので万事うまく行ったと思ったのですが、あくる日また同じようなキーチェーンのパスワードを入力する窓が起動するのです。

調べても~/Library/Keychains/にあるランダム文字列のディレクトリを消せという情報しか無く、もちろんそれをしても解消せず途方にくれていました。

あるとき「キーチェーンアクセス」の「環境設定」というものがあるということを知り、設定項目を確認してみると、「First Aid」というタブに「ログインキーチェーンパスワードをアカウントと同じにする」という項目があって、チェックが外れているではありませんか。

で、それにチェックをして再起動したところ、ログイン直後にキーチェーン絡みの窓が開いて、「キーチェーンのパスワードをアップデート」的な項目を選んで全て解決でした。

それでは皆さんも良いMacライフを!

Windows7のリソース監視はSNMPよりもWMI

リソース監視と言えばSNMPですが、残念ながらWindowsのSNMPはロクなデータがとれません。

informantというツールをインストールすれば、SNMPでも詳細に情報をとれるようになるようです。が、自社サービスなら喜んでインストールしますが、お客様のシステムというとそうはいきません。

なるべく、既存の環境に手を入れずに情報収集したいですよね。

いや、しっかり説明して、納得してもらえればinformantをインストールでも良いんですよ。でも、万が一それが原因で何かあったら目も当てられないので、なるべく既存環境に手を入れないと考えるのが人情です。

そこで、目をつけたのがWMI(Windows Management Instrumentation)。WMIはWindows独自のSNMPみたいなもののようです。

続きを読む

Macユーザのためのvisio代替品 – Omnigraffle –

皆さんは、いつもMacを便利にお使いだと思います。もちろん僕もです。

でも、Macにはvisioが無いんです。

結構困るんですよね。ネットワーク図なんかを書くとき、やっぱりパワポではどうしてもダメで、しょうがなくvmware fusionでWin7を起動してvisioを使っていましたが、不便。

そんなわけで、これをポチってしまいました。

OmniGraffle 6 – The Omni Group
続きを読む

HighChartsで1つのグラフに複数の要素を入れる方法

HighChartsってすばらしいですね。

我が家にはパーソナルウェザーステーション(Oregon sientific WNR100N)が設置してあって、なんとかそのデータをウェブで公開してどこからでも我が家の気象情報にアクセスしたいと思っていました。
続きを読む