Надергал отовсюду код и попытался создать устройство для бани чтобы смотреть какая в ней влажность и температура, но решил при этом чтобы устройство ещё автоматически поливала грядки с огурцами и писала мне смс по запросу о влажности почвы под огурцами.
Итог автополивалка и дисплей работают, но смс мне в ответ так и не приходят.
Что я делаю не так?
#include "TM1637.h"
#include "DHT.h"
//#include "SIM900.h"
#include <Wire.h>
#include <SoftwareSerial.h>
#define Rele 10 // Пин на реле
#define CLK 12
#define DIO 13
#define pinPower A0 // Пин датчика напряжения
#define DHTPin A1 // Пин датчика DHT22
#define pinSensor A5 // Пин датчика влажности почвы HM-390
#define pinSensor_MIN 250
#define pinSensor_MAX 600
#define INTERVAL 10000 * 3
#define DHTTYPE DHT22
unsigned int humidity = 0;
unsigned long waitTime = 0;
char incomingByte;
String inputString;
float t; // Температура
float h; // Влажность воздуха
float p; // Влажность почвы
SoftwareSerial mySerial(7, 8); // пины RX:TX
TM1637 tm1637(CLK, DIO); // Дисплей HW-069
DHT dht(DHTPin, DHTTYPE);
void setup() {
pinMode(Rele, OUTPUT);
digitalWrite(Rele, HIGH);
pinMode(9, OUTPUT); // Атозапуск SIM900 при первом всключении
digitalWrite(9, LOW);
delay(1000);
digitalWrite(9, HIGH);
delay(2000);
digitalWrite(9, LOW);
delay(3000);
Serial.begin(9600);
mySerial.begin(9600);
while (!mySerial.available()) { // Зацикливаем и ждем инициализацию SIM900
mySerial.println("AT"); // Отправка команды AT
delay(1000); // Пауза
Serial.println("Connecting..."); // Печатаем текст
}
Serial.println("Connected!"); // Печатаем текст
mySerial.println("AT+CMGF=1"); // Отправка команды AT+CMGF=1
delay(1000); // Пауза
mySerial.println("AT+CNMI=1,2,0,0,0"); // Отправка команды AT+CNMI=1,2,0,0,0
delay(1000); // Пауза
mySerial.println("AT+CMGL=\"REC UNREAD\"");
delay(1000);
tm1637.init();
dht.begin(); // запускаем датчик DHT22
tm1637.set(BRIGHTEST);
}
void loop() {
int Temperature = dht.readTemperature();
int Humidity = dht.readHumidity();
int valueSensor = analogRead(pinSensor);
if (mySerial.available()) { // Проверяем, если есть доступные данные
delay(100); // Пауза
while (mySerial.available()) { // Проверяем, есть ли еще данные.
incomingByte = mySerial.read(); // Считываем байт и записываем в переменную incomingByte
inputString += incomingByte; // Записываем считанный байт в массив inputString
}
delay(10); // Пауза
Serial.println(inputString); // Отправка в "Мониторинг порта" считанные данные
inputString.toUpperCase(); // Меняем все буквы на заглавные
if (inputString.indexOf("DATA") > -1) {
p = (pinSensor);
DHT dht(DHTPin, DHTTYPE);
t = dht.readTemperature();
h = dht.readHumidity();
sms(String("Temperature: " + String(t) + " *C " + " Humidity: " + String(h) + " Pochva: " + String(p)), String("+792xxxxxxxxxx"));
}
delay(50);
if (inputString.indexOf("OK") == -1) {
mySerial.println("AT+CMGDA=\"DEL ALL\"");
delay(1000);
}
inputString = "";
}
Serial.println(valueSensor);
if (isnan(Humidity) || isnan(Temperature)) {
Serial.println(F("Oshibka"));
return;
}
int digitoneT = Temperature / 10;
int digittwoT = Temperature % 10;
int digitoneH = Humidity / 10;
int digittwoH = Humidity % 10;
tm1637.display(1, digitoneT);
tm1637.display(2, digittwoT);
tm1637.display(3, 12);
delay(5000);
tm1637.display(1, digitoneH);
tm1637.display(2, digittwoH);
tm1637.display(3, 15);
delay(5000);
Serial.print(F("Vlaga: "));
Serial.print(Humidity);
Serial.print(F(" %\t"));
Serial.print(F("Temperatur: "));
Serial.print(Temperature);
Serial.println(F(" °C "));
int humidityNow = analogRead(pinSensor);
if (humidityNow != humidity) {
humidity = humidityNow;
}
if ((waitTime == 0 || millis() - waitTime > INTERVAL) && humidity < pinSensor_MIN) {
digitalWrite(Rele, LOW);
delay(8000 * 2);
digitalWrite(Rele, HIGH);
waitTime = millis();
}
}
void sms(String text, String phone) // Процедура Отправка SMS
{
Serial.println("SMS send started");
mySerial.println("AT+CMGS=\"" + phone + "\"");
delay(500);
mySerial.print(text);
delay(500);
mySerial.print((char)26);
delay(500);
Serial.println("SMS send complete");
delay(2000);
}