Проблема с отправкой SMS с GSM SIM900
У меня есть проект лазерной системы безопасности с GSM SIM900 и несколькими датчиками. Я использую Arduino Mega 2560, и все работает нормально, за исключением того, что GSM не отправляет SMS на телефон, и я не знаю почему!
это мой код:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <SoftwareSerial.h>
SoftwareSerial sim900(0,1);
String TextForSMS;
int dataldr =0;
int sensorldr = A0;
int ldrState = LOW;
int ldrthres = 900;
int pir = A1;
int pirState = LOW;
int val = 0;
int gas = A8;
int sensorgasThres = 400;
#define Password_Length 8
#define PINNUMBER ""
int signalPin = 2;
int led1 = 12;
int led2 = 11;
int led3 = 10;
int led4 = 9;
int led5 = 8;
int led6 = 7;
int laser =6;
char Data[Password_Length];
char Master[Password_Length] = "123A456";
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {30,31,32, 33};
byte colPins[COLS] = {34, 35, 36, 37};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x3F, 20, 4);
void setup(){
lcd.init();
lcd.backlight();
pinMode(signalPin, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(laser, OUTPUT);
pinMode(gas, INPUT);
pinMode(pir, INPUT);
pinMode(sensorldr,INPUT);
randomSeed(analogRead(0));
Serial.begin(9600);
sim900.begin (9600);
Serial.println(" loggin time completed");
delay(5000);
}
void loop(){
digitalWrite(laser, HIGH);
digitalWrite(led1, HIGH);
lcd.setCursor(0,0);
lcd.print("Enter Password:");
char customKey = customKeypad.getKey();
if (customKey){
Data[data_count] = customKey;
lcd.setCursor(data_count,1);
lcd.print(Data[data_count]);
data_count++;
}
if(data_count == Password_Length-1){
lcd.clear();
if(!strcmp(Data, Master)){
lcd.print("Correct");
digitalWrite(led3, HIGH);
tone(signalPin, 150,200);
delay(5000);
digitalWrite(signalPin, LOW);
digitalWrite(led3, LOW);
digitalWrite(laser, LOW);
ldrState = LOW;
delay(5000);
digitalWrite(laser, HIGH);
ldrState = HIGH;
}
else{
lcd.print("Incorrect");
digitalWrite(led4, HIGH);
digitalWrite(signalPin, HIGH);
delay(2000);
digitalWrite(led4, LOW);
digitalWrite(signalPin, LOW);
TextForSMS="\nIntruder password wrong";
sendSMS(TextForSMS);
lcd.setCursor(10,2);
lcd.print("sms2sent"); }
lcd.clear();
clearData();
}
int dataldr =analogRead(sensorldr);
lcd.setCursor(0,3);
lcd.print("Laser:");
lcd.setCursor(7,3);
lcd.print(dataldr);
if(dataldr<ldrthres){
digitalWrite(signalPin, HIGH);
digitalWrite(led2, HIGH);
TextForSMS="\nIntruder detected";
sendSMS(TextForSMS);
lcd.setCursor(10,2);
lcd.print("sms1sent");
}
else
{
digitalWrite(led2, LOW);
noTone(signalPin);
}
delay(100);
int analogSensor = analogRead(gas);
lcd.setCursor(0,2);
lcd.print("Gas:");
lcd.setCursor(4,2);
lcd.print(analogSensor);
// Checks if it has reached the threshold value
if (analogSensor > sensorgasThres)
{
digitalWrite(led5, HIGH);
digitalWrite(signalPin, HIGH);
TextForSMS="\nIntruder GAS";
sendSMS(TextForSMS);
lcd.setCursor(10,2);
lcd.print("sms3sent");
}
else
{
digitalWrite(led5, LOW);
noTone(signalPin);
}
delay(100);
val = digitalRead(pir);
if (val == HIGH) {
digitalWrite(led6, HIGH);
if (pirState == LOW) {
Serial.println("Motion detected!");
pirState = HIGH;
}
} else {
digitalWrite(led6, HIGH);
delay (5000);
if (pirState == LOW){
Serial.println("Motion ended!");
pirState = LOW;
}
}
}
void clearData(){
while(data_count !=0){
Data[data_count--] = 0;
}
return;
}
void sendSMS (String message){
sim900.print("AT+CMGF=1");
delay(1000);
sim900.println("AT+CMGS=\"+380633965886\"\r ");
delay(1000);
sim900.println(message);
delay(1000);
sim900.println((char)26);
delay(1000);
sim900.println();
delay(1000);
}
Также на Github:
https://github.com/shiyaroo/gsm-sim900/blob/master/laser_security_system__gsm .ino
@Shiyar, 👍1
Обсуждение1 ответ
Это не хороший подход — включать функцию задержки между AT-командами.
Вам необходимо проанализировать ответы SIM900 и проверить, отвечает ли модуль ОК.
Если вы не получаете ответы от модуля, это может быть связано с другими проблемами:
- неправильная скорость передачи данных
- проблема с подключением или электропитанием
- Проблема с SIM-картой (нет денег, SIM-карта заблокирована PIN-кодом и т. д.)
здесь вы можете найти полезное руководство: https://randomnerdtutorials.com/sim900-gsm-gprs-shield-arduino/
шаги 1,2,3 проверены, и проблем нет, но я не понял, что вы здесь имеете в виду (это не лучший подход для установки функции задержки между AT-командами), @Shiyar
Когда вы отправляете AT-команду, подобную этой *sim900.print("AT+CMGF=1");*, вам не следует помещать функцию задержки, подобную этой *delay(1000);*, но вы должны читать символы, поступающие из Serial и проверьте, отвечает ли модуль ОК или какие-то ошибки., @leoc7
Попробуйте провести быстрый тест: создайте эскиз, который отправляет только команду «AT», и проверьте, отвечает ли SIM900 ОК., @leoc7
- Моделирование Arduino Mega 2560 с GSM модулем с использованием Proteus
- Модуль SIM808: команда определения местоположения GSM (AT+CIPGSMLOC=1,1) дает неверное значение после выполнения команды отправки сообщения (AT+CMGS=+91xxxxxxxx)
- Arduino GSM Shield GSM_READY никогда не готов
- Arduino Mega + SIM808 GSM + модуль GPS + программа включается без нажатия кнопки?
- Как извлечь широту и долготу из GPS
- SIM800L — AT-команды ничего не делают на последовательном мониторе Arduino
- Можно ли изменить официальную библиотеку шилдов arduino GSM для работы с аппаратным serial на mega?
- Как подключить модуль GSM SIM800L?
сократите свой код, чтобы отправлять только фиксированное текстовое сообщение..... удалите весь код, который не связан с отправкой текстового сообщения... пожалуйста, опубликуйте результат, @jsotola
все это связано друг с другом, но я попытаюсь показать вам основной код отправки смс, @Shiyar
Можете ли вы увидеть последнюю часть кода void sendSMS (строковое сообщение), если мне нужно что-то изменить?, @Shiyar
ты не понимаешь мой комментарий, @jsotola