Loading...
ESP32とDHT11を使って温度と湿度を測定し、AWS Lambda経由でX(Twitter)に投稿する
Electronics

ESP32とDHT11を使って温度と湿度を測定し、AWS Lambda経由でX(Twitter)に投稿する

Freenove ESP32-WROOMボードとDHT11温湿度センサーを使用して、環境の温度と湿度を測定し、そのデータをAWS Lambdaを介してX(Twitter)に自動投稿してみました。

2024-04-058分で読める

このプロジェクトを通じて、IoTデバイスからクラウドへのデータ送信やサーバーレスアーキテクチャの活用、さらにはソーシャルメディアとの連携方法について学べました。

必要な材料

  • Freenove ESP32-WROOMボード
  • DHT11温湿度センサー
  • ジャンパーワイヤー

チャレンジ!

ステップ 1: ハードウェアのセットアップ

  • DHT11センサーのVCCピンをESP32の3V3ピンに接続し、DHT11のデータピンをESP32の任意のデジタルピン(例: GPIO 4)に接続しました。
  • DHT11のGNDピンをESP32のGNDピンに接続しました。

Image

ステップ 2: ESP32のプログラミング

ESP32に以下の機能を実装します。

  • WiFiを介してインターネットに接続
  • DHT11センサーから温度と湿度を1時間ごとに読み取る
#include <WiFi.h>
#include <HTTPClient.h>
#include "DHT.h"

#define DHTPIN 4
#define DHTTYPE DHT11

const char* ssid = "wifiの名前";
const char* password = "wifiのパスワード";
const char* awsEndpoint = "次のステップのAPI Gatewayで作成したURL";

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi...");
  }

  Serial.println("Connected to WiFi");
  dht.begin();
}

void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
  } else {
    if(WiFi.status() == WL_CONNECTED) {
      HTTPClient http;
      http.begin(awsEndpoint);
      http.addHeader("Content-Type", "application/json");
      
      String payload = "{\"temperature\": " + String(temperature) + ", \"humidity\": " + String(humidity) + "}";
      
      Serial.println(payload);

      int httpResponseCode = http.POST(payload);

      if (httpResponseCode > 0) {
        String response = http.getString();
        Serial.println(httpResponseCode);
        Serial.println(response);
      } else {
        Serial.print("Error on sending POST: ");
        Serial.println(httpResponseCode);
      }
      http.end();
    } else {
      Serial.println("WiFi Disconnected");
    }
  }
  delay(3600000); // Wait for 1 hour (3600000 milliseconds)
}

ステップ 3: AWS Lambda関数の設定

AWS Lambda関数を作成し、受け取った温度と湿度のデータをX(Twitter)に投稿する処理を実装します。以下のプログラムをzip圧縮し、Lambdaにアップロードしました。

$ zip -r project.zip *
// Node.js index.mjs
import { TwitterApi } from 'twitter-api-v2';
import dotenv from 'dotenv';

dotenv.config();

const twitterClient = new TwitterApi({
  appKey: process.env.TWITTER_API_KEY,
  appSecret: process.env.TWITTER_API_SECRET,
  accessToken: process.env.TWITTER_ACCESS_TOKEN,
  accessSecret: process.env.TWITTER_ACCESS_SECRET,
});

export async function handler(event) {
  if (!event.body) {
    console.log('fail')
    return
  }

  const body = JSON.parse(event.body)
  const temperature = body.temperature;
  const humidity = body.humidity;
  const generatedText = `現在、気温${temperature}度, 湿度${humidity}%だよ!`;

  try {
    await twitterClient.v2.tweet(generatedText);
    return {
      statusCode: 200,
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
          message: "Data received successfully",
          temperature,
          humidity
      })
    };
  } catch (error) {
    console.error('Error:', error);
    return { statusCode: 500, body: 'Error posting tweet' };
  }
};

ステップ 4: AWS API Gatewayの設定

AWS API Gatewayを設定して、ESP32からのHTTPリクエストを受け取り、Lambda関数に転送します。Lambdaにアップロード後、環境変数としてTWITTER_API_KEYなどを設定しました。

Image

API GatewayのURLを取得し、ESP32のプログラムのawsEndpoint変数にURLを設定します。

ステップ 5: X(Twitter)に投稿する

curlで以下のようにテストできます。

$ curl -X POST https://APIGatewayで作成したURL -H "Content-Type: application/json" -d '{"temperature": "22.9", "humidity": "61"}'

無事に投稿できました!

Image

結論

このプロジェクトを通じて、ESP32とDHT11センサーを使用して温度と湿度のデータを取得し、AWS LambdaとAPI Gatewayを活用してデータをクラウドに送信、最終的にソーシャルメディアにそのデータを共有する方法を学べました。

ここまでお読みくださりありがとうございました!

PR
この記事が役に立ったら:

developer note 記事

Sunoで演歌を作ってみた話 〜AIが奏でる昭和の哀愁〜
Suno / music / 生成AI

最近AI音楽生成サービス「Suno」を使って遊んでいるのですが、思い付きで演歌を作れるか実験しました。

2025-09-21

Sunoで演歌を作ってみた話 〜AIが奏でる昭和の哀愁〜

写真を90年代風に加工できるツールが登場!
写真加工 / JavaScript / 生成AI

AIで生成した画像を90年代風にしてみた

2025-08-15

写真を90年代風に加工できるツールが登場!

WindowsにLatentSyncで大苦戦!AIリップシンクをローカルPCで動かそうとしてエラーの地獄を見た全記録
AI / LatentSync / wsl

「ローカルPCで手軽にAIリップシンクを楽しみたい!」そんな甘い夢を見て、巷で話題の「LatentSync」をインストールしようとしたのが全ての始まりでした。まさか、これが数々のエラーという名の強敵と戦い、黒い画面(ターミナル)という名のダンジョンを彷徨う、壮大な冒険になるとは…この記事は、その血と汗と涙の全記録です。

2025-08-15

WindowsにLatentSyncで大苦戦!AIリップシンクをローカルPCで動かそうとしてエラーの地獄を見た全記録

2025年、AIが「ヤバい」ことになっている件について
AI / 最新技術 / トレンド

もはやSFではない。音楽作成、新薬開発、未知の物理法則の発見まで、最新AIの驚くべき成果を完全解説。

2025-08-15

2025年、AIが「ヤバい」ことになっている件について

構造化XMLタグ完全ガイド - AIプロンプトを劇的に改善する技術
プロンプト / XML

AI時代の新常識「何を言うか」より「どう伝えるか」が決定的な差を生む。構造化XMLタグは、あなたのプロンプトを次のレベルに押し上げる強力な武器です。

2025-08-13

構造化XMLタグ完全ガイド - AIプロンプトを劇的に改善する技術

GPT-5プロンプトガイド: 次世代AIモデルを最大限活用する方法
OpenAI / GPT-5

OpenAIが発表したGPT-5は、エージェント的タスク実行、コーディング、推論能力、そして操作性において大幅な向上を実現したフラグシップモデルです。本記事では、GPT-5の潜在能力を最大限引き出すためのプロンプト技術について、実用的な観点から解説します。

2025-08-13

GPT-5プロンプトガイド: 次世代AIモデルを最大限活用する方法

SunoでフューチャーファンクをDIY!完全解説ガイド
生成AI / Suno / 楽曲

こんにちは!今回は、AI音楽生成ツール「Suno」を使って、ノスタルジックな80年代風フューチャーファンクトラックを作成した体験記をお届けします。プロンプトエンジニアリングのコツから、フューチャーファンクの魅力まで、詳しく解説していきます。

2025-08-12

SunoでフューチャーファンクをDIY!完全解説ガイド

【やってみた】Claude Desktop × Browser MCPでXポスト自動化!AI操作の可能性に驚きと感動!
AI / 自動化 / Claude / mcp

こんにちは!今回は、ずっと気になっていた「AIにX(旧Twitter)への投稿を自動化させる」というチャレンジをしてみました。

2025-08-12

【やってみた】Claude Desktop × Browser MCPでXポスト自動化!AI操作の可能性に驚きと感動!

OpenAI GPT OSS:新しいオープンソースモデルファミリー - 詳細要約
GPT-5 / AI / 創造 / 生産性 / 未来

OpenAIが初のオープンソースモデルファミリー「GPT OSS」をリリースしました。これは推論、エージェント型タスク、多様な開発用途に設計された待望のオープンウェイトモデルです。

2025-08-10

OpenAI GPT OSS:新しいオープンソースモデルファミリー - 詳細要約

GPT-5超速報:爆速創造時代の始まり
GPT-5 / AI / 創造 / 生産性 / 未来

ヤバいAI、GPT-5がキタ!あなたの「ひらめき💡」を「カタチ✨」にする最強の相棒が爆誕。仕事も遊びも爆速になる未来は、もうここにある。速さはAIがくれる。その先にある「信頼」と「物語」を創るのは、いつだって人間だ。

2025-08-09

GPT-5超速報:爆速創造時代の始まり

Gemini Code Assist、2025年夏アップデートで「エージェントモード」とIDE機能強化を発表!開発がさらに加速
Google / Gemini / Code Assist / エージェントモード / IDE

GoogleのAIコーディングアシスタントであるGemini Code Assistは、個人の開発者から企業まで、すべての方のコーディングをさらに高速化する画期的なアップデートを2025年7月に発表しました。今回の目玉は、AIがコードベース全体を理解し、複雑なタスクを実行する「エージェントモード」の登場、そして開発環境(IDE)の使いやすさを向上させる様々な機能強化です。

2025-08-08

Gemini Code Assist、2025年夏アップデートで「エージェントモード」とIDE機能強化を発表!開発がさらに加速

Browser MCP徹底解説:AI(Claude)がX(旧Twitter)に自動投稿する仕組みと手順
Claude / Browser MCP / X

Browser MCPを活用してAIがWebブラウザを操作し、X(旧Twitter)へ自動的に投稿を行うための詳細な設定方法と具体的な利用例を徹底的に解説します。

2025-08-01

Browser MCP徹底解説:AI(Claude)がX(旧Twitter)に自動投稿する仕組みと手順

Gemini APIで画像を解析し、Next.jsアプリに組み込む方法【2024年版】
Next.js / Gemini API / Vercel AI SDK

Google Gemini APIとVercel AI SDKを使って、画像から情報を抽出するアプリを構築しよう。

2025-07-27

Gemini APIで画像を解析し、Next.jsアプリに組み込む方法【2024年版】

機械学習を用いてドラゴンクエスト12の発売日を予測
Python

ちょっとしたプログラミングの遊びをしてみたくて、機械学習を使ってドラゴンクエスト12の発売日を予測してみることにしました。

2024-05-14

機械学習を用いてドラゴンクエスト12の発売日を予測

ESP32とDHT11を使って温度と湿度を測定し、AWS Lambda経由でX(Twitter)に投稿する
Electronics

Freenove ESP32-WROOMボードとDHT11温湿度センサーを使用して、環境の温度と湿度を測定し、そのデータをAWS Lambdaを介してX(Twitter)に自動投稿してみました。

2024-04-05

ESP32とDHT11を使って温度と湿度を測定し、AWS Lambda経由でX(Twitter)に投稿する

年に一度で忘れがちのiOS Distribution Certificate証明書の更新メモ
iOS

毎年、現在ご利用のiOS Distribution証明書の有効期限まであと30日になりました。以降、この証明書は無効となります。新しい証明書を生成するには、サインインして「Certificates, Identifiers &amp; Profiles」(証明書、ID、プロファイル)にアクセスしてください。とAppleからご案内が来るのですが、年に1度しか対応しないのですぐ忘れてしまうためメモいたしました

2024-01-05

年に一度で忘れがちのiOS Distribution Certificate証明書の更新メモ

Xcode15で作成したアプリにAdMobを設定したい時のメモ
iOS

Xcode15でAdMobを導入した時のことを備忘録としてメモいたしました。

2023-10-04

Xcode15で作成したアプリにAdMobを設定したい時のメモ

機械学習を用いて衆議院の解散日を予測
Python

ニュースで衆議院の解散はいつ?みたいなことを取り上げていたので、機械学習を使って衆議院の解散の日を予測してみることにしました。

2023-09-18

機械学習を用いて衆議院の解散日を予測