スイッチサイエンスさんのesp8266開発ボード「ESPr Developer」とgroveカメラを繋ぐ方法です。
開発ボードだと面倒ごとが大分緩和されます。
実際のところ
- カメラで画像を取る
- POSTはしない。ブラウザで確認するだけ。
必要資材
ESPr Developer(ESP-WROOM-02開発ボード)
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- この商品を含むブログを見る
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- この商品を含むブログを見る
- 低損失三端子レギュレータ3.3Vのセット
- ACジャック DIP化基板
- 5V以上のACアダプタ
- 発光LED
- 10kΩ
- 各種ジャンパ線
スクリプト
基本的にbinzume様のスクリプトをベースにさせてもらいました。
github.com
ただメインの方は、今回の用途に併せてPOSTまわりを中心に削らせて貰ってます。
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include "HttpClient.h" #include "ov528.h" const char* ssid = "YOURSSID"; const char* password = "YOURPASS"; ESP8266WebServer server(80); const int led = 5; void handleRoot() { digitalWrite(led, 1); server.send(200, "text/plain", "hello from esp8266!"); digitalWrite(led, 0); } void handleNotFound() { digitalWrite(led, 1); String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET) ? "GET" : "POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i = 0; i < server.args(); i++) { message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } server.send(404, "text/plain", message); digitalWrite(led, 0); } void handleInit() { digitalWrite(led, 1); camera_sync(); camera_init(); server.send(200, "text/plain", "init ok!"); digitalWrite(led, 0); } void handleSnapshot() { digitalWrite(led, 1); camera_snapshot(); server.send(200, "text/plain", "ok!"); digitalWrite(led, 0); } void handleGetJpeg() { digitalWrite(led, 1); WiFiClient client = server.client(); // client.setNoDelay(true); camera_get_data(NULL, [](void* ctx, uint32_t sz){ server.setContentLength(sz); server.send(200, "image/jpeg", ""); }, [](void* ctx, uint8_t *buf, uint16_t len){ WiFiClient client = server.client(); if (client.connected()) { client.write(static_cast<const uint8_t*>(buf), len); } }); client.flush(); digitalWrite(led, 0); } void blinkLed() { //受信待機が寂しいのでLチカ digitalWrite(led,LOW); delay(500); digitalWrite(led,HIGH); delay(500); } void setup(void) { pinMode(led, OUTPUT); digitalWrite(led, 0); Serial.begin(115200); WiFi.begin(ssid, password); //接続待機 while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } //ここまで来たら繋がったので、WiFiの状態とIPアドレスを表示 Serial.println(""); Serial.println("WiFi connected"); WiFi.printDiag(Serial); Serial.println(WiFi.localIP()); //アドレスの設定 server.on("/", handleRoot); //デフォ画面 server.on("/init", handleInit); //カメラ初期化 server.on("/snap", handleSnapshot); //スナップショット。画像データをメモリに入れる server.on("/get", handleGetJpeg); //メモリに入ったデータを読み出す server.onNotFound(handleNotFound); //不正なURLは消す server.begin(); Serial.println("Started!"); //状況開始! } void loop(void) { server.handleClient(); blinkLed(); }
動作の様子
http://192.168.xxx.xxx/getにアクセスすると
これから
IFTTTと連携させて、LINEなりメールなりで画像が確認できるように。
時間毎の実行も、IFTTTをトリガにしたいですね。