0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32でMS Teamsに通知するBOTを作る

Last updated at Posted at 2024-09-05

やりたいこと

・赤外線センサを用いて一定以下の距離になったらms teamsに通知を投稿したい

使うもの、実行環境

  • ubuntu22.04
  • Ardino IDE
  • ESP32 WROOM
  • GP2Y0E03(赤外線センサ)

準備

ESP32側

このプログラムを書き込む

isDoorLocked.ino
#include <Wire.h>
//アドレス指定
#define GP2Y0E03_ADDR 0x40
#define DISTANCE_ADDR 0x5E

void setup()
{
	Serial.begin(9600); //シリアル通信を9600bpsで初期化
	Wire.begin();       //I2Cを初期化

	delay(500); //500msec待機(0.5秒待機)
}

void loop()
{
	//変数宣言
	unsigned int dac[2];
	unsigned int i, distance;

	Wire.beginTransmission(GP2Y0E03_ADDR); //I2Cスレーブ「Arduino Uno」のデータ送信開始
	Wire.write(DISTANCE_ADDR);             //距離の測定
	Wire.endTransmission();                //I2Cスレーブ「Arduino Uno」のデータ送信終了

	Wire.requestFrom(GP2Y0E03_ADDR, 2); //I2Cデバイス「GP2Y0E03」に2Byteのデータ要求
	for (i = 0; i < 2; i++)
	{
		dac[i] = Wire.read(); //dacにI2Cデバイス「GP2Y0E03」のデータ読み込み
	}
	Wire.endTransmission(); //I2Cスレーブ「Arduino Uno」のデータ送信終了

	distance = ((dac[0] * 16 + dac[1]) / 16) / (2 * 2); //距離(cm)を計算

	if (distance <= 15)//任意の値。単位はcm
	{
		Serial.println("Locked");
	}
	else
	{
		Serial.println("NotLocked");
	}

	delay(1000); // 1000msec待機(1秒待機)
}

PC側

teams上のチームにwebhookを設定し、URLを発行する

ESPからのシリアルを読んでHTTP POSTする

notify.py
import serial
import requests
import json

# WebフックURLを設定
WEBHOOK_URL = "https://hogehogefugafuga"

# ESP32とのシリアルポートを開く
ser = serial.Serial("/dev/ttyUSB0", 9600)  # '/dev/ttyUSB0'は適切なポートに置き換える

while True:
    # ESP32からのデータを読み取る
    if ser.in_waiting > 0:
        data = ser.readline().decode().strip()
        print("Received:", data)

        # 受信したデータが指定された命令ならば、WebフックにPOSTリクエストを送信
        if data == "the key was Locked!!":
            payload = {"text": "the key was locked!!"}
            headers = {"Content-Type": "application/json"}
            response = requests.post(
                WEBHOOK_URL, headers=headers, data=json.dumps(payload)
            )
            print("Response status code:", response.status_code)
            print("Response body:", response.text)

実行してみる

ESP側は書き込んで適当に距離を近づけたり遠ざけたりしていれば良い。
pythonの実行は
sudo python3 serial_data_processor.py
import serialやimport requestsできないというようなライブラリが出た場合、ライブラリが入っていないということなのでpipコマンドでインストールする

pip install pyserial
pip install requests

pipも入っていない場合は先に

sudo apt install python3-pip

を実行してからインストールする。

うまく行けばチームに投稿される
スクリーンショット 2024-10-23 215628.png

参考リンク集

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?