モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

部屋の温度をツイートする Arduino (外出先から制御)

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2017/02/12
最終更新最終更新
2024/12/25
記事区分記事区分
一般公開

目次

    Arduinoが趣味のエンジニアです。電子工作やプログラミングを楽しんでいます!

    作品の簡単な説明

    Arduino をインターネットに接続する方法の一つは WiFi モジュール ESP-WROOM-02 を利用することです。こちらのページで紹介されている IFTTT を利用することで、温度センサで測定した値を Twitter に投稿できます。更に Qoosky API を利用することで、外出先からでも好きなタイミングで処理を開始できます。

    必要なパーツ

    以下のパーツが必要になります。電源はすべて PC から USB 経由で供給します。

    • 高精度 IC 温度センサ LM61CIZ x1
    • ESP-WROOM-02ピッチ変換済みモジュール (シンプル版) x1
    • ピンヘッダ (はんだづけが必要です) x1
    • 抵抗 10kΩ x3
    • Arduino UNO R3 x1
    • ブレッドボード x1
    • ジャンプワイヤ (適量)
    • 短めのジャンプワイヤ (適量)

    回路図

    ESP-WROOM-02 は 3.3V で動作するため、Arduino の 3.3V ピンを電源とします。Arduino の D2 および D3 ピンで制御することにします。同様に、LM61CIZ の動作電圧範囲には 3.3V が含まれるため Arduino の 3.3V ピンを電源としています。出力電圧は A0 ピンで A/D 変換して利用します。

    制御プログラム

    以下のライブラリをインストールして利用します。それぞれ IFTTT および Qoosky を利用するために必要になります。

    setup 関数内で、自宅のルータの SSID およびパスワードで WiFi 接続を確立した後、認証トークンをもとに Qoosky とのコネクションを張ります。loop 関数内では、Qoosky コントローラでボタン 8 が押され次第、温度を測定して IFTTT との認証およびツイートを行います。

    ツイート時には、httpClient と ESP-WROOM-02 を共用しているため Qoosky との通信は一旦切断されますが、90 秒以内に再接続されます。IFTTT との連携を考えずに Qoosky コントローラだけの利用を考える場合はこのような問題は発生しません。

    #include <HttpClient_ESP8266_AT.h>
    #include <Qoosky_ESP8266_AT.h>
    
    const byte rxPin = 2;
    const byte txPin = 3;
    
    SoftwareSerial softwareSerial(rxPin, txPin);
    HttpClient_ESP8266_AT httpClient(softwareSerial);
    Qoosky_ESP8266_AT qoosky(softwareSerial);
    
    void setup() {
      Serial.begin(9600); // PC との通信
      softwareSerial.begin(115200); // ESP-WROOM-02 との通信
    
      while(true) {
        if(httpClient.statusAT()) { Serial.println(F("AT status OK")); break; }
        else Serial.println(F("AT status NOT OK"));
        delay(1000);
      }
      while(true) { // 書き換えてください↓
        if(httpClient.connectAP(F("YOUR_SSID"), F("PASSWORD"))) { Serial.println(F("Successfully connected to an AP")); break; }
        else Serial.println(F("Failed to connected to an AP. retrying..."));
        delay(1000);
      }
      while(true) {
        if(httpClient.statusWiFi()) { Serial.println(F("WiFi status OK")); break; }
        else Serial.println(F("WiFi status NOT OK"));
        delay(1000);
      }
      while(true) { // 書き換えてください↓
        if(qoosky.connectQoosky(F("XXXX-XXXX-XXXX-XXXX"))) { Serial.println(F("Successfully connected to Qoosky.")); break; }
        else Serial.println(F("Failed to connect to Qoosky, retrying..."));
        delay(1000);
      }
    }
    
    void loop() {
      int key = qoosky.popPushedKey();
      if(key) {
        Serial.println("Received: " + String(key) + " (tweet if key is '8')");
        if(key == 8) { // コントローラの 8 番ボタンが押されたら tweet します。
    
          // 温度 ////////////////////
    
          // LM61CIZ の出力電圧を A/D 変換します。
          int lm61ciz_ad = analogRead(A0);
    
          // Arduino の A/D 変換の分解能は 10 bit です。電圧値 [mV] で表現した場合の値を計算します。
          // https://docs.arduino.cc/language-reference/en/functions/math/map/
          int lm61ciz_v = map(lm61ciz_ad, 0, 1023, 0, 5000);
    
          // LM61CIZ のデータシートによると -30 度 から +100 度の範囲が線形に
          // +300mV から +1600mV の電圧として出力されることが分かります。
          // 温度は以下の計算で得られます。
          int lm61ciz_t = map(lm61ciz_v, 300, 1600, -30, 100);
    
          while(true) {
            // httpClient と併用しているため Qoosky との通信は一旦切断されます。90 秒以内に再接続されます。
            httpClient.post(F("maker.ifttt.com"), // 書き換えてください↓
                            F("/trigger/xxxxxxxx/with/key/XXXXXXXXXXXXXXXXXXXXX"),
                            "{\"value1\":\"" + String(lm61ciz_t) + "\"}",
                            F("application/json"));
            if(httpClient.responseStatusCode() >= 0) {
              Serial.println(F("tweet SUCCESS"));
              break;
            }
            else Serial.println(F("tweet FAILURE, retrying..."));
          }
        }
      }
      else Serial.println(F("No pushed key."));
      delay(100);
    }
    
    Likeボタン(off)0
    詳細設定を開く/閉じる

    記事内で用いられたハードウェア

    アカウント プロフィール画像

    Arduinoが趣味のエンジニアです。電子工作やプログラミングを楽しんでいます!

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    >>さらに詳しくステッカーを贈る
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      ログインする

      関連記事

      • 内蔵LEDを点灯させるまで (Arduino)
        サムネイル画像-2f49b4ad94
        Arduinoとは Arduino は初心者でも入門しやすいマイコンボードです。アルデュイーノと読みます。マイコンとは家電などに内蔵されている小さなコンピュータで、マイコンが必要とする周辺機器一式と一緒に一つのボードにまとめたものがマイコンボードです。数あるマイコンの中で特にArduinoにはAVRマイコンが使用されています。2005年にイタリアで開始されたオープンソースハードウェアのプロジェクト...
        ねこねこ12/27/2018に更新
        いいねアイコン画像0
      • 虚仮威しの防犯装置 (Arduino)
        サムネイル画像-ed824a48bf
        人が接近すると防犯用の音を鳴らします。インターネットに接続してメール送信機能を追加すれば、虚仮威しどころか立派な防犯装置になります。センサの性能は視野角が約 120 度と広範囲で、距離もおおよそ 2m まで検知可能です。赤外線を発する人体や動物などが動くと反応します。自動ドアや照明の自動点灯にも応用されています。
      • Arduino で作る温度と気圧の計測基板
        サムネイル画像-aca6d0091b
        専用の IC を利用すると、簡単に温度や気圧を測定できます。インターネットに接続してグラフ化したりボットを作ったりと応用先は様々ですが、ここでは LCD に結果を表示する測定基板を作成します。 必要なパーツ 以下のパーツが必要になります。画像ではコンデンサを直列に接続したり抵抗を並列に接続したりしていますが、これは手元に適切な値のパーツがなかったためです。 高精度
      • 電力の無駄遣い (定電圧電源)
        サムネイル画像-eebe29d9ae
        マイコンを含む様々な IC を動作させるためには定電圧電源が必要です。USB ケーブルなどで供給する場合を除き、定電圧を出力するための回路が必要になります。ここでは、乾電池 9V 形から得られる電圧を 5V に変換し、更に 3.3V に変換し、最後に 5V に昇圧するという電力の無駄遣いともとれる基板を作ります。動作させるものはマイコンではなく燦然と輝く LED です。汎用基板として様々な場面で利...
      • Arduino で作る 7 セグメント LED タイマー
        サムネイル画像-d000ba25fa
        Arduino の入門として、4 桁の 7 セグメント LED でカウントアップタイマーを作ってみます。PIN の電流制限を考慮してトランジスタを使用する必要があったり、桁数が多いためダイナミック点灯制御を用いなければならなかったりと、単なる LED 点灯制御と比較して考えなければならない事項は多めです。