Archive for the ‘ESP8266’ Category

ESP8266でタイマー割り込み

ESP8266で使用出来るタイマー割り込みはいくつかあるようですがOS経由のタイマー割り込みを試してみました。
最小のコードは以下の通りです。
注意点はタイマー関数中(このコードではtimerCallback())でシリアルを使用してはいけません。
グローバル変数に痕跡を残し、loop()側でハンドリングする方法を取る必要があります。
WiFiで通信中でもちゃんとタイマー割り込みはかかってくれます。

extern "C" {
#include "user_interface.h"
}

os_timer_t myTimerFunc;

void timerCallback(void *pArg) {
// タイマーで実行
}

void setup() {
os_timer_setfn(&myTimerFunc, timerCallback, NULL);
os_timer_arm(&myTimerFunc, 1000, true); // 1000msec毎実行
}

void loop() {
yield();
}

No Comments »

ESP8266+Arduinoでメール送信

ESP8266+Arduinoでメール送信をするコードを書いたときの覚書です。
メール送信は通常SMTPサーバーに送信を依頼しますが、過去のスパムメール対策の結果SMTP認証(SMTP Authentication/SMTP-AUTH)が必須になりつつあります。
基本的な認証方式として、LOGIN,PLAIN,CRAM-MD5,DIGEST-MD5があるようです。
SMTPサーバーがどの様な認証に対応しているかは、SMTPサーバーに接続すると
250-AUTH PLAIN LOGIN
の様な形で認証対応できる方式を応答してきます。
他の独自認証方式が実装される場合もあるようです。
LOGIN認証はアカウント名、パスワードをBASE64でエンコードして送信します。


C:AUTH LOGIN
S:334 VXNlcm5hbWU6
C:dXNlcm5hbWU=
S:334 UGFzc3dvcmQ6
C:cGFzc3dvcmQ=
S:235 2.0.0 OK Authenticated

PLAIN認証は¥0+アカウント名¥0パスワードをBASE64でエンコードして送信します。


C:AUTH PLAIN
S:334
C:dXNlcm5hbWVwYXNzd29yZA==
S:235 2.0.0 OK Authenticated

PLAIN認証とLOGIN認証は、アカウント名とパスワードを単純にBASE64エンコードした文字列を認証に使用しているため、盗聴されるとアカウント名とパスワードが見られてしまいます。
SMTPサーバー環境に依存しますが、SMTP over TLS/SSL接続で使用することが望ましいです。

エラー処理もせず、英数字だけのメールを送るならば意外と簡単な手順でSMTPサーバー経由でメールを送れます。

No Comments »

MH-Z19 CO2センサ入手

Winsen Electronics Technology製のMH-Z19 CO2センサを入手しました。
MH-Z19
このセンサはNDIR(Non Dispersive InfraRed)方式(非分散型赤外線吸収法)でCO2の濃度を測定します。
精度は±50ppmと相対値は測れそうですが絶対値は測れなさそうな感じです。
電源電圧は3.6V~5.5VDC、インターフェース電圧は3.3Vで、0から0.5%のCO2濃度が測定できます。
マイコンとのインターフェースはUARTとPWMです。2電源電圧があるボードでないと使用出来ません。
通常、外気のCO2濃度は400ppm程度なのでセンサを外気にさらしてこのくらいの値になれば正常動作していると判断出来そうです。
センサに電源を入れるとセンサケースの金属地ではない部分からオレンジ色の光が数秒に一度漏れてきます。このタイミングでCO2濃度を測定をしているのでしょう。

今回はESP8266に接続し記録し続けてみました。
このセンサ固有なのかわかりませんが時々2000ppm超えの値を返してきます。
正しい比較用の測定装置がないので正しいかすらわかりません。

他のセンサも入手して比較してみた方が良い様です。

No Comments »

ESP8266の類似製品?

EspressifのESP8266に類似する製品が、台湾の会社AcSiP TechnologyからAI6060Hとして出ているようです。
データシートが見当たらないので詳細がわかりませんがESP8266とかなり類似した仕様の様です。
メーカーのホームページではUSD$3.00と表記されています。
今後、類似製品の出現が楽しみです。

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 »

EspressifのMACアドレス

2016年2月20日現在、IEEEに登録されているEspressifのMACアドレス一覧です。
MA-L typeで6ブロック取得しています。

54-5A-A6 (hex) Espressif Inc.
545AA6 (base 16) Espressif Inc.
Room 204, Building 2, 690 Bibo Road, Pudong New Area
Shanghai Shanghai 201203
CN

90-97-D5 (hex) Espressif Inc.
9097D5 (base 16) Espressif Inc.
Room 204, Building 2, 690 Bibo Road, Pudong New Area
Shanghai Shanghai 201203
CN

18-FE-34 (hex) Espressif Inc.
18FE34 (base 16) Espressif Inc.
2966 Jin Ke Road
Shanghai 201203
CN

60-01-94 (hex) Espressif Inc.
600194 (base 16) Espressif Inc.
Room 204, Building 2, 690 Bibo Road, Pudong New Area
Shanghai Shanghai 201203
CN

5C-CF-7F (hex) Espressif Inc.
5CCF7F (base 16) Espressif Inc.
Room 204, Building 2, 690 Bibo Road, Pudong New Area
Shanghai Shanghai 201203
CN

AC-D0-74 (hex) Espressif Inc.
ACD074 (base 16) Espressif Inc.
A207-1, 456 Bibo Road, Zhangjiang High-tech Park,Shanghai 201203, China
Shanghai Shanghai 201203
CN

No Comments »

WP Login