プロジェクト概要:
ボタンを押すと定型文をツイートするプロジェクト
ツイートには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 件のコメント:
コメントを投稿