====== update 2015-09-13 ========
技適な話、
国内使用でのファーム書換(カスタムファーム)で
追加申請する場合は別ですが、技適の適応外となりそうですので
(ネット記事を参考)
日本国内での使用は参考を控えて下さい
初期ファームでの使用は問題ないと思います。
又海外でのデバイス開発、使用に関しては問題ないと思いますので
記事としては当面残したいと思います
*) 初期ファーム活用した、マイコン連携の記事も公開しています。
http://knaka0209.blogspot.jp/2015/08/esp-wroom-02-03.html
=================================
実践編で、前回(esp8266(esp-wroom-02)+mbed LPC1114FN28 でIoT。 センサ値送信)
のセンサ値と似ていますが、
の続編で、実行系の処理、Lチカ (LEDの制御)で
IoTぽく、クラウドから送信値を解析し、LEDのON/OFFの時間を設定します。
*) わかりにくいかもですが、ARDUINO SDK使いますが、
回路上にARDUINOボード、マイコンなど全くありません。
でもesp8266開発ができます。スゴイ!!
[概要]
1) ARDUINO SDK のesp8266ライブラリを使用
2) 応答用のweb-APIを準備しておく
# 部品
[esp8266(esp-wroom-02) WIFIの接続テスト] と似ています。低価格
実行時は、[USB-シリアル変換]などは実装しなくても、稼動できます。
*) FW(ファーム)書込み後は、結線不要です。
# 準備など
ARDUINO SDK で、esp8266をビルド、書込み記事は探せば出てきました。下記を参考
[技適済み格安高性能Wi-FiモジュールESP8266をArduinoIDEを使ってIoT開発する為の環境準備を10分でやる方法]
ライブラリなど、セットアップしておきます。
Wifi Client などのサンプルを参考に、実装します。
# 組立 -結線
[esp8266(esp-wroom-02) WIFIの接続テスト] を参考に、
http://knaka0209.blogspot.jp/2015/08/esp-wroom-02-01.html
WIFI、電源回路など配線しておきます。
LEDの回路は、(右側のミニ-ブレボ)に、
16ピンから、
抵抗 100 オーム
LED
GND ,に接続
# WEB-API
# code
カンタンですが、クラウド側から、
送信プロトコルの準備しておきます。
乱数で、LED点灯時間を毎回生成します。 2-10 秒
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
//------------------------------------ | |
// @calling | |
// @purpose : Zero Str, max=10 char | |
// @date | |
// @argment | |
// @return | |
//------------------------------------ | |
function getZeroStr( $src, $num ){ | |
if($num > 10){ | |
return ""; | |
} | |
$buff="0000000000"; | |
$buff = $buff . $src; | |
$i_len = strlen($buff); | |
$ret = substr($buff, $i_len - $num, $num); | |
return $ret; | |
} | |
//------------------------------------ | |
// @calling | |
// @purpose : | |
// @date | |
// @argment | |
// @return | |
//------------------------------------ | |
$ret_base= "000000000000000000000000"; | |
$sHEAD ="web-response1="; | |
$nRan =mt_rand(2, 10 ); | |
$respose="1" . getZeroStr($nRan ,3); | |
$res2 = substr($respose, 0, 4); | |
echo $sHEAD .$res2; | |
?> |
1 : 開始指示
2-4 : LED点灯時間(3桁、デジタル=HIGH にする時間)
*) データ部分の前に、ヘッダ文字をつけておきます。(解析位置の検出用)
# ARDUINO code (esp8266へ書き込むコード)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <ESP8266WiFi.h> | |
const char* ssid = "your-ssid"; | |
const char* password = "your-pass"; | |
const char* host = "your-dns"; | |
int mNextTime =30000; | |
const byte mLED_pin =16; | |
//Struct | |
struct stParam{ | |
String stat; | |
String kai_num_1; | |
}; | |
struct stParam get_Struct(String sRes4){ | |
struct stParam param; | |
param.stat = sRes4.substring(0,1); | |
param.kai_num_1= sRes4.substring(1,4); | |
return param; | |
} | |
void setup() { | |
Serial.begin(115200); | |
delay(10); | |
pinMode(mLED_pin, OUTPUT); | |
// We start by connecting to a WiFi network | |
Serial.println(); | |
Serial.println(); | |
Serial.print("Connecting to "); | |
Serial.println(ssid); | |
WiFi.begin(ssid, password); | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(500); | |
Serial.print("."); | |
} | |
Serial.println(""); | |
Serial.println("WiFi connected"); | |
Serial.println("IP address: "); | |
Serial.println(WiFi.localIP()); | |
} | |
int value = 0; | |
void loop() { | |
delay( mNextTime ); | |
++value; | |
Serial.print("connecting to "); | |
Serial.println(host); | |
// Use WiFiClient class to create TCP connections | |
WiFiClient client; | |
const int httpPort = 80; | |
if (!client.connect(host, httpPort)) { | |
Serial.println("connection failed"); | |
return; | |
} | |
String url="/api-1234.php"; | |
Serial.print("Requesting URL: "); | |
Serial.println(url); | |
client.print(String("GET ") + url + " HTTP/1.0\r\n" + | |
"Host: " + host + "\r\n" + | |
"Connection: close\r\n\r\n"); | |
delay( 3000 ); | |
int iSt=0; | |
struct stParam param; | |
while(client.available()){ | |
String line = client.readStringUntil('\r'); | |
//Serial.print("line=" + line); | |
iSt = line.indexOf("web-response1="); | |
//Serial.println("iSt="+ String(iSt)); | |
if(iSt >= 0){ | |
iSt = iSt+ 14; | |
String sDat = line.substring(iSt ); | |
Serial.println("sDat=" + sDat); | |
param =get_Struct(sDat); | |
} | |
} | |
Serial.println(); | |
Serial.println("closing connection"); | |
if(param.stat=="1"){ | |
Serial.println("#Stat=1"); | |
Serial.println("#param.kai_num_1= " + param.kai_num_1); | |
int kNum =param.kai_num_1.toInt(); | |
if(kNum > 0){ | |
digitalWrite( mLED_pin, HIGH); | |
for(int i=0;i< kNum; i++){ | |
Serial.println("# [PIN16=HIGH], CT= "+ String( i )); | |
delay( 1000 ); | |
} | |
digitalWrite(mLED_pin, LOW); | |
} | |
} | |
} | |
[説明など]
WIFI接続 SSID, パスワード、
接続するホスト名
を設定、
APIのファイル名は決めて下さい。
const char* ssid = "your-ssid";
const char* password = "your-pass";
const char* host = "your-dns";
[リクエスト]
この場合、センサ値などは送信しません
実行後は、wait後、受信値の解析処理後、
16番ピンに対して、
デジタル出力=H 後
LOWにするタイミングを監視、LOW送信。
String url="/api-1234.php";
client.print(String("GET ") + url + " HTTP/1.0\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
====2015-09-07 =======
スリープ設定で、LIGHT_SLEEP を使った場合、
通信失敗の確立 (10 -15%程度)が増加した為、
通常( スリープなし )に変更しました
# esp8266 に書き込む方法
IO0 (ゼロ)を
GND に結線します[UART DownLoad Mode]
この状態で書込みます。( [マイコンボード書込]ボタンおす )
*) 通常は3V3へ結線、[FLASH Boot Mode]
ARDUINO SDK から、FW書き込んだ場合は、初回の1回だけ
自動で再起動され、実行されます。
*) 2回目以降、電源ON/OFF して実行させる場合は、上記の [3V3]のジャンパ変更下さい。
IO0 (ゼロ)を
GND に結線します[UART DownLoad Mode]
この状態で書込みます。( [マイコンボード書込]ボタンおす )
*) 通常は3V3へ結線、[FLASH Boot Mode]
ARDUINO SDK から、FW書き込んだ場合は、初回の1回だけ
自動で再起動され、実行されます。
*) 2回目以降、電源ON/OFF して実行させる場合は、上記の [3V3]のジャンパ変更下さい。
# まとめ
リレー回路など、実行制御系に応用できると思います。
それでは、また
# 参考の記事
回路など
#関連の記事
ESP-WROOM-02の接続テスト
http://knaka0209.blogspot.jp/2015/08/esp-wroom-02-01.html
マイコン連携(esp-wroom-02+mbed LPC1114FN28 で、IoT )
http://knaka0209.blogspot.jp/2015/08/esp-wroom-02-02.html
0 件のコメント:
コメントを投稿