プロジェクト概要:
ボタンを押すと定型文をツイートするプロジェクト
ツイートにはStewGateUのWebAPIを使用
ネタ元はESP8266WIFI/WiFiClientサンプルコードとマイクロテクニカESP-WROOM02簡単マニュアル
動作のイメージ/Web APIを用いたtweetを行う |
準備すること:
・ArduinoIDE上でESP8266の開発環境構築(ググろう!)
・3V3とGNDに十分な電流が供給可能な3.3V電源を接続
・GPIO5にタクトスイッチ+プルダウン抵抗を接続
(押すとHが入力されるように3.3VとGNDに接続すること)
・TX/RXにはデバッグ用にシリアル―USB変換機を接続する
(接続しなくても動作自体は行われる)
・ツイートに用いるTwitterアカウントの準備(新規アカウント推奨)
・StewGateUにてTwitterアカウント登録およびトークン取得
・ESP-WROOM-02を接続してもよい無線LANルータのSSIDとパスワードをメモ
・ソースをコピペして以下の情報を修正する
・SSID
・SSIDに対するパスワード
・StewGateUで取得したトークン
・ビルドしてダウンロードモードのESP-WROOM-02に書き込み
(→過去メモ参照)
実行方法:
・ESP-WROOM-02をブートモードで起動
・デバッグ出力より無線LANルータとの接続を確認
(『WiFi connected』の表示を確認)
・タクトスイッチを押すと定型文(『XXXX:HelloWorld!』)がツイートされる
うまくいかない場合は以下をチェック:
・無線LANルータの規格
→ESP-WROOM-02が対応できるのは802.11b/g/n
・チップへの給電が十分か
→通信時は80mA以上消費する
・ダウンロードモードからの設定変更は忘れていないか
→GPIO0ピンをL→Hに戻し忘れることが多い
ブートモードにしないと当然ながら起動しない
・メッセージ長の設定は正しいか
→Content-length:の設定値以上の情報は無視される
・ツイート内容が重複していないか
→同じ内容のツイートをした場合はTwitterにキックされる
注意点:
・ソースの大半はESP8266WIFI/WiFiClientサンプルコードからの流用
・無線LANルータの設定(ステルスID/接続先限定など)によっては動かない
・マイクロテクニカESP-WROOM02簡単マニュアルのパスは尼のマイクロテクニカショップでESP-WROOM-02を買ったら付いてきた
各機能の使い方が日本語で簡潔にまとめられておりおススメ
(ただし、デフォルトファームをATコマンドで操作する前提での解説)
#include <esp8266wifi.h> #define KEY_PIN 5 //無線LANルータのIDおよびパスワード const char* ssid = "XXXXXXXX"; const char* password = "YYYYYYYY"; const char* host = "stewgate-u.appspot.com"; //http://stewgate-u.appspot.com/より取得したトークン const char* token = "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"; void setup() { Serial.begin(115200); delay(10); 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()); pinMode(KEY_PIN, INPUT); } bool postMsg(String msg) { Serial.print("connecting to "); Serial.println(host); WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return false; } client.println("POST /api/post/ HTTP/1.0"); client.print("Host: "); client.println(host); //メッセージ以外の長さ(トークン含む)にメッセージ長を加算 int msgLength = 40; msgLength += msg.length(); client.print("Content-length:"); client.println(msgLength); client.println(""); client.print("_t="); client.print(token); client.print("&msg="); client.println(msg); delay(10); while(client.available()){ String line = client.readStringUntil('\r'); Serial.print(line); } Serial.println(); Serial.println("closing connection"); return true; } int value = 0; void loop() { delay(100); ++value; if(digitalRead(KEY_PIN) == HIGH) { String text; //同じ内容のツイートはキックされるためユニークな値を付加 text += String(value, DEC); text += ":HelloWorld!"; postMsg(text); } }
0 件のコメント:
コメントを投稿