Archive for 4月, 2016

WordPressがバージョンアップ (Version4.5.1へ)

WordPressがWordPress 4.5.1にバージョンアップされました。

No Comments »

Espressif ESP8266 APIにあるrtc_mem

Espressif ESP8266 APIリファレンス内のSystem APIsセクションに
system_rtc_mem_read と system_rtc_mem_write という関数があります。
この2つの関数はESP8266内のrtcメモリを読み、書きするもののようです。
rtcメモリは4Bytes単位で、システム用に64ブロック256Bytes、ユーザー用に128ブロック512Bytesが用意されています。
このメモリは電源を切らない限り初期化されないメモリであり、リセットしても消えません。
システムはリセットの要因を保持するためにもこのメモリを使用しているようです。

使い方にもよるとは思いますが、ESP8266は通信をさせるとそこそこ制御を失うことがあります。制御を失った状態からの復帰にウォッチドッグタイマやソフトウェアリセットを使用することになると思いますが、継続して以前の状態を保持したい場合があると思います。このような状況の時にも使用出来ます。
またシステムの停止回数の累積数積算にももちろん使用出来ます。

0~63までのシステム用領域も読み込むことは可能でした。
何に使用しているかは不明ですが先頭付近はリセット要因の保持に使用している感じです。
192ブロック以降は読み込みに失敗します。

OTAアップデートを使用する場合、OTAアップデートのプログラムがユーザー用領域を使用しているようです。
その範囲は100ブロック目未満くらいまでで、100ブロック目以降の368Bytesが使用可能になるようです。

No Comments »

Espressif ESP8266+ArduinoでOTA(Over the Air) update

Espressif ESP8266とArduinoの組み合わせでOTAアップデートが使用出来ます。
オリジナルのドキュメントは
https://github.com/esp8266/Arduino/tree/master/doc/ota_updates
にありますが、使ってみた情報を書いておきます。

そもそも、Espressif ESP8266をArduino環境でなぜOTAアップデートするかですが、ESP8266のボード形態にもよりますがアップデートの際にPCと接続しにくいボードがほとんどであり直接接続しないアップデート方法はスマートで便利な方法だからなのです。
開発用途に向の NodeMCU development boards はUSB-シリアルインターフェースをボード上に持っていますが例外的な存在でしょう。

1st generation ESP8266 NodeMCU development board

1st generation ESP8266 NodeMCU development board

2nd generation ESP8266 NodeMCU development board

2nd generation ESP8266 NodeMCU development board


日本で使用可能なESP-WROOM-02 WiFi ModuleなどはUSB-シリアルのインターフェースは持ちませんので書き込みの際には書き込みツールを使うことになります。
ESP-WROOM-02 WiFi Module
比較的ピン数の少ないESP8266では書き込みに使用するシリアル用のピンも他の用途と兼用でありシリアル以外の機能を割り当てる場合も多々あると思います。組み上がっている物の配線を外しプログラムを書き込む作業はできれば避けたいものです。
そのような場合でも、WiFi経由でプログラムの書き込み、書き換えができるOTAアップデートでは物理接続をしないので書き換えは大変容易になります。
転送時間もシリアル経由より早いです。
若干の注意点として、OTAアップデートが出来るESP8266ボードと出来ないESP8266ボードがあります。
フラッシュメモリのサイズが1MB以上のものはOTAアップデートが使用出来ます。
ESP-WROOM-02 WiFi Moduleのフラッシュメモリのサイズは4MBでありOTAアップデートが使用出来ます。

OTAアップデートには3種類の方法が用意されています。
1.Arduino IDEでのアップデート
2.Web Browserでのアップデート
3.HTTP Serverでのアップデート

この中で、開発段階、小規模の場合は1.と2.、複数台以上の中規模運用は2.、大規模運用の場合は3.を選ぶことになると思います。

1.Arduino IDEでのアップデート
この方法では同一ネットワーク上にターゲットとArduino IDEが存在しなければなりません。
Arduino IDEは1.6.7以降が必要です。
Python 2.7のインストールが必須です。(バージョン3.5はサポートされていません)
サンプルコードは
ファイル > スケッチの例 > ArduinoOTA > BasicOTA.ino
にあります。
SSID、Password等はご自分の環境に合わせて書き換えてください。
このスケッチをESP8266へシリアル経由で書き込むと最初の準備が完了です。
ここまで設定をしてESP8266を立ち上げるとArduino IDEのツールメニュー以下シリアルポートに今回プログラムを書いたESP8266が出てくるはずです。
この方法のポイントはマルチキャストDNS(mDNS)使うところです。
少なくとも自分の開発には馴染みませんでした。
これ以降の開発はBasicOTA.inoの内容を含める形で進めます。(アップデートに使用するコードを残しておきます)

2.Web Browserでのアップデート
一番お勧めの方法です。
この方法では同一ネットワーク上にターゲットとブラウザが存在しなければなりません。
実質的にESP8266WebServer.hを追加すれば使えます。
サンプルコードは
ファイル > スケッチの例 > ESP8266WebServer > WebUpdate.ino
にあります。
SSID、Password等はご自分の環境に合わせて書き換えてください。
このサンプルでもESP8266mDNS.hをインクルードしていますが、IPアドレスを指定、もしくは特定できれば不要(インクルード不要)です。
生成されるバイナリは自分の開発環境のTempフォルダに出来ます。(Windows環境の場合)
正確な位置はコンパイル時のログに出ています。(Windows環境ではbuild~.tmpというフォルダです)
サンプルの場合、書き込んだESP8266のルート(例 192.168.0.100/)にブラウザでアクセスするとアップロード指定ができるページとなっているはずです。
先ほどのTempフォルダにある、スケッチ名.ino.bin を指定しアップロードすると書き換えが行われます。
その後、自動で再起動がかかり成功すれば新しいプログラムが実行されます。

3.HTTP Serverでのアップデート
この方法では同一ネットワーク上にアップデートサーバが無くてもHTTP通信可能であれば大丈夫です。(未検証)
サンプルコードはオリジナルドキュメント内にあります。
ESP8266側で定期的にアップデートチェックを行いサーバー側が必要に応じてアップデートファイルを返すという仕組みで動作します。
オリジナルドキュメントではサーバー側はWebサーバ+PHPで説明されています。
任意のタイミングでアップデートが行えない仕組みであり、開発時には使用しにくいでしょう。
大規模で使用する場合には便利な方法となるでしょう。
2.と共存する形を仕込んでおくと良いかもしれません。

OTAアップデートすべての方法で注意すべき事もあります。
プログラムが制御を失う状態(無限ループ等)に入るとOTAアップデートは出来なくなります。
ウォッチドッグタイマは有効にして自動復帰は仕込んでおいた方が後々のためになるでしょう。
各々の方法で仕掛けたアップデートプログラムを入れ忘れてOTAアップデートを行ってしまうとやはりその後OTAアップデートが出来なくなってしまいます。

No Comments »

温度湿度センサー(SHT75)故障

1年数ヶ月前にRaspberry Piに接続して常時計測していた温度湿度センサー(SHT75)が故障しました。
SHT7x
室内環境での使用で特に過酷な環境というわけではありませんが動かなくなりました。
故障の仕方は正規手順に対して無応答で、値がおかしくなるという壊れ方ではありませんでした。

No Comments »

WordPressがバージョンアップ (Version4.5へ)

WordPressをWordPress 4.5にバージョンアップしました。

No Comments »

WP Login