EnsekiTT Blog

EnsekiTTが書くブログです。

ESP-WROOM-32を使ってWiFi経由でツイートした話。

つまりなにしたの?

ESP-WROOM-32で遊んでたけど、OAuth実装するのはちょっとめんどくさいからStewGate Uを使ってツイートできるようにした。
f:id:ensekitt:20170911003513j:plain

大まかな手順

  • WiFiにつなぐ(SSIDとパスワード)
  • Twitterにつなぐ(StewGate Uをつかった)
  • ツイートを用意する
  • ツイートする
  • 成功したか確認する

WiFiにつなぐ

こないだやったやつ
ensekitt.hatenablog.com

Twitterにつなぐ

一昨日やったやつ
ensekitt.hatenablog.com

ツイートを用意する

  • curlでツイートしたパケットをWireSharkでキャプチャしてみた

f:id:ensekitt:20170911003504j:plain
似たようなリクエストを投げればESPからでも行けるはず

今回ツイートするのはこちら
「EnsekiTT寝ろ %d #ESP-WROOM-32 #bot

というわけでPOSTの部分を書いてみる

      int count = 0;
      const char *head = "POST " WEB_URL " HTTP/1.1\r\n";
      const char *host = "Host: "WEB_SERVER"\r\n";
      const char *user_agent = "User-Agent: esp-idf/1.0 esp32\r\n";
      const char *accept = "Accept: */*\r\n";
      const char *content_type = "Content-Type: application/x-www-form-urlencoded\r\n";
      char content_length[100];
      char data[500];

      sprintf(data, "_t=%s&msg=%s %d #ESP-WROOM-32 #bot", DEFAULT_TOKEN, "EnsekiTT寝ろ");
      sprintf(content_length, "Content-Length: %d\r\n\r\n", strlen(data));

      write(s, head, strlen(head));
      write(s, host, strlen(host));
      write(s, user_agent, strlen(user_agent));
      write(s, accept, strlen(accept));
      write(s, content_type, strlen(content_type));
      write(s, content_length, strlen(content_length));
      write(s, data, strlen(data));
      //送った物を確認
      printf("%s", head);
      printf("%s", host);
      printf("%s", user_agent);
      printf("%s", accept);
      printf("%s", content_type);
      printf("%s", content_length);
      printf("%s\n", data);

成功したか確認する

  • レスポンスを読んで、うまくいったらカウントアップ(カウントアップしておくと同じツイートで弾かれない)


できました。

コードはこちら

github.com

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。