Arduino Uno+sim800l отправка СМС
- Войдите на сайт для отправки комментариев
Чт, 13/10/2022 - 09:19
Здравствуйте!
Приобрел себе GSM-модуль и не как не могу от него добиться работы. Что я только не перепробовал разные схемы подключения и т.д., всего чего я добился это ошибки. Подскажите схемы подключения его к ардуине или где я сделал ошибку.

Так же есть GSM-модуль SIM900A который пишет что коннект произошел, но логи выводит в виде пустых квадратов и сильно греется. Прочитал где-то что оба модуля стабильно работают от 5v c ардуины.

- некорректно вставлен код (не по правилам форума)
- лог выложить в виде текста
- показать реальную схему подключения
https://arduino.ru/forum/apparatnye-voprosy/vse-o-sim800l-i-vse-chto-s-n...
GSM-модуль SIM800L: самый полный мануал (на примерах с Arduino Uno) - часть 1. Введение - Codius.ru
[quote=overdast]
Прочитал где-то что оба модуля стабильно работают от 5v c ардуины.
/quote]
рекомендую обратиться к тем адептам, кто это писал. По даташиту 4 вольта 2 Ампера питание должно быть.
#include <SoftwareSerial.h> #include <Wire.h> #include <DHT.h> SoftwareSerial mySerial(5, 6); #define DHTPin A0 #define DHTTYPE DHT11 #define pinSensor A5 char incomingByte; String inputString; float t; float h; void setup() { 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"); delay(1000); mySerial.println("AT+CNMI=1,2,0,0,0"); 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("DATA") > -1) { DHT dht(DHTPin, DHTTYPE); t = dht.readTemperature(); h = dht.readHumidity(); sms(String("Temperature: " + String(t) + " *C " + " Humidity: " + String(h)), String("+7927xxxxxxx")); } delay(100); if (inputString.indexOf("OK") == -1) { mySerial.println("AT+CMGDA=\"DEL ALL\""); delay(1000); } inputString = ""; } } void sms(String text, String phone) { 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); } 10:33:13.405 -> Connecting... 10:33:13.405 -> Connected! 10:33:15.555 -> AT 10:33:15.555 -> OK 10:33:15.588 -> AT+CMGF=1 10:33:15.588 -> ERROR 10:33:15.629 -> AT+CNMI=1,2,0,0,0Индикатор мигает выходит с питанием в 5v все нормально?
Индикатор мигает выходит с питанием в 5v все нормально?
совсем не показатель
https://arduino.ru/forum/apparatnye-voprosy/vse-o-sim800l-i-vse-chto-s-n...
Я так понимаю придется таки приобретать DC-DC преобразователь на понижение для SIM800L? Внешний вид платы модема в ваших ссылках отличается от моей это не делает их разными?
Тогда что не так с модемом SIM900A индикация не горит, греется как не в себя по датащиту он спокойно должен держать 5V учитывая что у меня версия модуля v5.1.
Я так понимаю придется таки приобретать DC-DC преобразователь на понижение для SIM800L?
да, но можно напрямую от аккумулятора питать, главное резисторный делитель на RX модема поставить, чтоб модуль не спалить.
Внешний вид платы модема в ваших ссылках отличается от моей это не делает их разными?
не знаю, смотрите схемы / сравнивайте/ разбирайтесь.
Тогда что не так с модемом SIM900A индикация не горит, греется как не в себя по датащиту он спокойно должен держать 5V учитывая что у меня версия модуля v5.1.
не знаю, с этими модемами не работал, читайте даташит.
обратите внимание у вас даже начальная инициализация
AT+CMGF
не работает, или модем еще не загрузился и еще к оператору связи не зарегестрировалось, или другая проблема.
в общем случае, если подразумевается достаточно стабильное устройство, на случай замены модема, рекомендую провести полуную инициализацию модема, я использую для тестов такой код:
#define GSM_RX 3 // пин RX на модуле подключаем к указаному пину на Ардуино TX #define GSM_TX 2 // пин TX на модуле подключаем к указаному пину на Ардуино RX #include <SoftwareSerial.h> SoftwareSerial SIM800(GSM_TX, GSM_RX); // установка контактовGSM_TX->RX и GSM_RX->TX для программного порта void sendCMDandWait(char * inStr, unsigned char waitSec) { SIM800.print((char*)inStr); unsigned long startTimer = millis(); while ((millis() - startTimer) < (waitSec * 1000UL)) { while (SIM800.available()) // Ожидаем прихода данных (ответа) от модема... Serial.write(SIM800.read()); // ...и выводим их в Serial } } void setup() { Serial.begin(9600); // Скорость обмена данными с компьютером Serial.println("Start!"); SIM800.begin(9600); // Скорость обмена данными с модемом SIM800.println("AT"); // Автонастройка скорости SIM800.println("AT"); // Автонастройка скорости sendCMDandWait((char *)"AT\r", 3); // Автонастройка скорости // init sendCMDandWait((char *)"ATZ\r", 5); // проверка связи с модемом AT / сброс настроек на default - ATZ //sendCMDandWait((char *)"AT+CPIN=0000\r", 2); // вводим PIN код SIM карты sendCMDandWait((char *)"ATE1\r", 1); // отключение(ATE0) ЭХО, т е модем в обратку не дублирует sendCMDandWait((char *)"ATV1\r", 1); // развернуты подробный ответ от модема sendCMDandWait((char *)"AT+CMEE=2\r", 1); // вывод подробных описаний ошибок sendCMDandWait((char *)"AT+CIPSHUT\r", 5); // закрыть все интернет сессии sendCMDandWait((char *)"AT+CLIP=0\r", 2); // отключение АОН sendCMDandWait((char *)"ATS0=0\r", 2); // модем не берет трубку при входящем звонке sendCMDandWait((char *)"AT+CMGF=1\r", 2); // обычный режим вывода СМСе sendCMDandWait((char *)"AT+CSCLK=0\r", 2); // отключение работы энергосберегающего режима через пин DTR sendCMDandWait((char *)"AT+CIPMUX=0\r", 2); // моносокет - единомоментно работаем с одним подключением sendCMDandWait((char *)"AT+CIPHEAD=0\r", 2); // не добавлять заголовок при приеме данных sendCMDandWait((char *)"AT+CIPRXGET=0\r", 2); // автоматический вывод принятых данных sendCMDandWait((char *)"AT+CIPSRIP=0\r", 2); // не показывать данные отправителя при приеме данных sendCMDandWait((char *)"AT+CSPN?\r", 2); // получить имя оператора из SIM карты sendCMDandWait((char *)"AT+CREG?\r", 2); // проверяем зарегестрировался ли модем в сети sendCMDandWait((char *)"AT+COPS?\r", 2); // получить режим подключения к оператору и имя оператора sendCMDandWait((char *)"AT+CSQ\r", 2); // запрос качества связи sendCMDandWait((char *)"AT+CIPMODE=0\r", 2); // командный режим передачи данных sendCMDandWait((char *)"AT+CMGDA=\"DEL ALL\"\r", 2); // удаление всех SMS на SIM карте Serial.println("Ready!"); } void loop() { while (SIM800.available()) // Ожидаем прихода данных (ответа) от модема... Serial.write(SIM800.read()); // ...и выводим их в Serial while (Serial.available()) // Ожидаем команды по Serial... SIM800.write(Serial.read()); // ...и отправляем полученную команду модему }Понятно симку не видит. И так и сяк её сувал статус не меняется, при этом разные симки пробовал аналогично. Какие есть ещё варианты?
С билайном работает через раз если бумажку подложить чтобы лучше прижим был. Эти модемы какое-то лютое "г". Вывод один надо было брать шилдовую версию с sim900 там и питальник есть нормальный есть.
всяко бывает...вероятно брать модемы надо по нормальным отзывам/продавцам, ни разу не было чтоб SIMку не видел модем.
Мегафон тоже заработал с такими же ошибками как у билайна, видимо проблема в слоте сим-карты...
Так нормальные там были отзывы.
Осталось разобраться с SIM900A.
такими же ошибками
по каждой вашей ошибке читать описание команды и почему так происходит.