В данном проекте мы узнаем, как сделать простую систему домашней автоматизации с помощью модуля SIM800L и Arduino. В проекте также используется двухканальный модуль реле для коммутации двух нагрузок, таких как лампа и вентилятор. Вы можете реализовать такую систему для вашего дома без небольших усилий.

Схема подключения компонентов довольно проста и представлена на следующем изображении.

Код программы для Arduino следующий:
#include<SoftwareSerial.h>
SoftwareSerial mySerial(10,11); // (Rx,Tx > Tx,Rx)
char incomingByte;
String inputString;
int relay1 = 2; // Выход для управления реле
int relay2 = 3; // Выход для управления реле
void setup()
{
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
digitalWrite(relay1, LOW); // Начальное состояние реле
digitalWrite(relay2, LOW); // Начальное состояние реле
Serial.begin(9600);
mySerial.begin(9600);
while(!mySerial.available()){
mySerial.println("AT");
delay(1000);
Serial.println("Connecting...");
}
Serial.println("Connected!");
mySerial.println("AT+CMGF=1"); // Установите SMS в текстовый режим
delay(1000);
mySerial.println("AT+CNMI=1,2,0,0,0"); // Процедура для обработки вновь прибывших сообщений (имя команды в тексте: новые указания сообщения в TE)
delay(1000);
mySerial.println("AT+CMGL=\"REC UNREAD\""); // Прочитать непрочитанные сообщения
}
void loop()
{
if(mySerial.available()){
delay(100);
while(mySerial.available()){
incomingByte = mySerial.read();
inputString += incomingByte;
}
delay(10);
Serial.println(inputString);
inputString.toUpperCase(); // Прописные буквы полученного сообщения
// ВКЛ и ВЫКЛ реле
if (inputString.indexOf("LIGHT ON") > -1){
digitalWrite(relay1, HIGH);
}
if (inputString.indexOf("LIGHT OFF") > -1){
digitalWrite(relay1, LOW);
}
if (inputString.indexOf("FAN ON") > -1){
digitalWrite(relay2, HIGH);
}
if (inputString.indexOf("FAN OFF") > -1){
digitalWrite(relay2, LOW);
}
if (inputString.indexOf("ALL ON") > -1){
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
}
if (inputString.indexOf("ALL OFF") > -1){
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
}
delay(50);
// Удалить сообщения и сэкономить память
if (inputString.indexOf("OK") == -1){
mySerial.println("AT+CMGDA=\"DEL ALL\"");
delay(1000);}
inputString = "";
}
}
© digitrode.ru