ESP32와 LINE Bot에서 자러 가기 전에 이불을 두십시오.

5358 단어 Arduinolinebot

소개



겨울이 되면 밤에 잠을 자면 이불이 식어버리는 일이 있죠. 우리의 경우도 침실이 별실에서, 물론 전관 난방이라든지도 아니기 때문에, 막상 자려고 하면 히에이가 되어 버립니다.

대책으로서 아이리스 오야마의 칼라리에라는 이불 건조기(이하, 칼라리에)를 도입하고 있습니다. 저렴하면서도 안정적으로 이불을 갖게 해주는 뛰어난 것입니다만 하나의 단점이 있습니다. 전원을 켜는 타이머가 없습니다. 그 때문에 일부러 자기 30분 정도 전에 침실로 이동하는 작업이 발생하여 모처럼이기 때문에 기능이 유효 활용되지 못한 상황이 계속되고 있었습니다.

그래서 이것을 개선하기 위한 IoT를 자작해 보았습니다!

구성



이번에 글꼴로 화제의 LINE Things를 사용하자! 라고 의욕하고 있었습니다만 근본적인 과제가 발견되었기 때문에 단념했습니다. 침실과 침대의 배치의 문제로, Bluetooth의 전파가 닿지 않는 것입니다・・・구누누.

이번에는, 다소의 전력 소비에는 눈을 감고 ESP32-DevKitC(이하, ESP32)의 WiFi 경유로, MQTT+AWS IoT+Lambda+LINE Bot라고 하는 구성으로 합니다.

ESP32측



모터로 물리 버튼 제어



물리적으로 전원스위치를 눌러야 하고, 방법을 여러가지 검토했지만, 최종적으로 제어가 간단한 DC모터를 사용하는 방법을 채용하기로 했습니다.

(참고)
Arduino로 모터를 제어하십시오!

버튼을 누르는 곳의 모터 제어에는 타미야의 기어 박스 키트를 사용합니다. 캠의 가공등을 포함해, 매우 참고가 되는 기사가 있었으므로, 거의 그대로 작성하고 있습니다.

(참고)
오직 A 버튼을 누르는 녀석, 만들었습니다 : 웹 정보 실험실

가장 힘들었던 것이, 캠의 가공과 기기에의 설치입니다. 기기에 설치는 양면 테이프로 합니다.

프로그램 개요(Arduino IDE)



이번 MQTT 구현에는 pubsubclient을 이용하고 있습니다. 실장하고 있는 내용으로서는, ESP32 기동 → WiFi 접속 → MQTT Pub/Sub → LINE Bot로부터의 MQTT Publish를 받아 모터 동작이라고 하는 흐름입니다.

rotate_motor에서는 12번 핀에 5V를 0.9초 흘린다. 0.9는 기어박스의 기어비 344.2:1의 상태로, 캠이 1주하도록 조정한 값입니다.

esp32.ino
#include <WiFi.h>
#include <PubSubClient.h>

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
const char* mqtt_server = "YOUR_MQTT_BROKER_IP_ADDRESS";

const int motor_signal_pin = 12;
const int sensor_signal_pin = 13;

WiFiClient espClient;
PubSubClient client(espClient);

long lastMsg = 0;
char msg[50];
int value = 0;

void rotate_motor() {
  digitalWrite(motor_signal_pin, HIGH);
  delay(900);
  digitalWrite(motor_signal_pin,LOW);
}

void setup_wifi() {
  delay(10);

  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

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

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* message, unsigned int length) {
  Serial.print("Message arrived on topic: ");
  Serial.print(topic);
  Serial.print(". Message: ");
  String messageTemp;

  for (int i = 0; i < length; i++) {
    Serial.print((char)message[i]);
    messageTemp += (char)message[i];
  }
  Serial.println();

  // If a message is received on the topic esp32/output, you check if the message is "on"
  // Changes the output state according to the message
  if (String(topic) == "esp32/output") {
    Serial.print("Changing output to ");
    if(messageTemp == "on"){
      Serial.println("on");
      rotate_motor();
    }
  }
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect("ESP8266Client")) {
      Serial.println("connected");
      // Subscribe
      client.subscribe("esp32/output");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
  pinMode(motor_signal_pin, OUTPUT);
  pinMode(sensor_signal_pin, INPUT);
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
}

기기 사진(고정 전)





LINE Bot



LINE Bot과 AWS IoT에 대해서는 다양한 기사에서 이미 정보가 정리되어 있으므로 생략합니다.
API Gateway + Lambda에 배포된 LINE의 Bot이 MQTT의 Pub/Sub를 처리하고 있습니다.
(코드 정리 후 나중에 Up합니다)

도전 1



지금까지의 구축이라고 하면, 실제로 기기가 움직이고 있는지 어떤지 잘 모르기 때문에 개선이 필요합니다. 지금 생각하고 있는 안에서는, 동작 개시하면 점등하는 본체의 LED가 빛나고 있는지를 판정하는지, 전류가 흐르고 있는 것을 확인하는지, 등의 안이 있습니다.

도전 2



기어 박스를 고정하는 방법과 캠의 위치를 ​​조정하지 않으면 버튼을 누르는 것이 정확하지 않습니다. 양면 테이프라면 어긋나거나 하기 때문에, 드릴로 고정일까・・・이 점도 브러쉬 업이 필요합니다.

과제 대응



이러한 과제에 대해서는 연말을 향해 조정해 나갈 예정입니다.

실제 도입 효과



이번, IoTLT 어드벤트 캘린더 2019 Neo 의 기사 공개를 향해 돌관으로 작성했기 때문에, 대부분 미완성한 상태입니다.

다음 번 IoTLT 히로시마 를 향해 재구축해 가고 싶습니다!

좋은 웹페이지 즐겨찾기