AWSでクラウド側の受け口を作ってみるかぁ
はじめに
2024年の年末、ふと 「仕事とはまったく違う分野のシステム開発に挑戦してみたい」 という気持ちが湧いてきました。
普段は業務向けのソフトウェア開発に携わっていますが、
ここ最近、「手を動かしてリアルなデバイスとつなぐような開発」にどこか惹かれていたんです。
ちょうど年末年始(2024年12月末〜2025年1月上旬)でまとまった時間が取れそうだったこともあり、
これを機に 「センサー × モバイルアプリ × クラウド連携」 という、
いわゆる IoTっぽいことをゼロからやってみよう! と動き出しました。
Bluetoothを使ったスマホアプリの開発経験はあったので、
「じゃあデータ送信はAndroidアプリでやればいいかも」と思いつき、
さらにArduinoを使えばセンサー類のプロトタイピングも手軽にできる。
気づけば、
「Arduino → Android → AWS (API Gateway → Lambda → DynamoDB)」という構成が頭の中で浮かんでいました。
このプロジェクトでは、そんな“ちょっとした思いつき”から始まった
個人による実験的なIoTシステムの構築記録を、段階的にまとめていきます。
まずは第一歩として、クラウド側の受け口を作ってデータを送信できるかどうかを確認してみるところからスタートです!
この記事は「Arduino × AWSサーバーレスで作るIoT温度モニタリングシステム」シリーズの一部です。シリーズの全体リンクは記事の末尾にまとめてあります!
全体構成(今回の範囲)
Mac (cURL) → API Gateway → Lambda(Python)→ DynamoDB
まだArduinoやセンサーは使っていないけど、
AWS上でクラウド側の受け口(API)とデータベースの登録までは完成!
Lambda関数(Python)
Lambda関数は以下のような形にしました。
import json
import boto3
import os
from datetime import datetime
from decimal import Decimal
# DynamoDBクライアントを初期化(環境変数からテーブル名を取得)
TABLE_NAME = os.environ.get('DYNAMODB_TABLE_NAME', '********') # ★ 環境変数に設定すること
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(TABLE_NAME)
def lambda_handler(event, context):
try:
# リクエストボディをパース
data = json.loads(event['body'])
# 必須項目: temperature, timestamp
if 'temperature' not in data or 'timestamp' not in data:
return {
'statusCode': 400,
'body': json.dumps({'error': 'Missing required fields'})
}
temperature = Decimal(str(data['temperature']))
timestamp = data['timestamp']
# オプション項目: humidity(省略可)
humidity = Decimal(str(data['humidity'])) if 'humidity' in data else None
# 登録データの構築
item = {
'id': str(datetime.now().timestamp()), # 一意のID
'temperature': temperature,
'timestamp': timestamp
}
if humidity is not None:
item['humidity'] = humidity
# データをDynamoDBに保存
table.put_item(Item=item)
return {
'statusCode': 200,
'body': json.dumps({'message': 'Data saved successfully!'})
}
except Exception:
# エラー詳細は公開しない
return {
'statusCode': 500,
'body': json.dumps({'error': 'Internal server error'})
}
POSTの内容
curl
で以下のようなJSONをAPI Gatewayに送信しています:
{
"temperature": 20.3,
"timestamp": "2024-12-28T23:27:00Z"
}
結果スクショ 📸
✅ DynamoDBにデータ登録できた!
データがしっかり登録されている様子:
✅ curlでのPOST送信も成功!
Macのターミナルから送信したときの様子:
ここまでの感想と次の一手
やってみた感想としては、AWSのサーバーレス構成は想像以上にスムーズ!
今後は、以下のように発展させていく予定です:
- Arduinoで温度データを取得(DHT11 or DHT22)
- HC-06モジュールでBluetooth送信
- Androidアプリで受信し、そのままAWS APIにPOST!
おわりに
今回はまだ「クラウド側だけ」だけど、
ちゃんとデータが保存されると一気にモチベ爆上がり⤴️
次回は、Arduinoとセンサーのリアルな動きを交えて、もっとIoTっぽくしていきます!
シリーズ記事一覧
- 【第1回】AWSでクラウド側の受け口を作ってみる (このページ)
- 【第2回】光センサーでArduinoからMacにシリアル通信
- 【第3回】DHT22で温湿度を取得してシリアル送信
- 【第4回】Bluetooth通信でセンサーデータをAndroidに送信
- 【第5回】自作アプリでBluetooth接続&温湿度データ受信
- 【第6回】クラウド連携でDynamoDBへのPOST&完結編
※今後の更新もお楽しみに!
つづく…(第2回へ)🔧📡🌐