вот я и попробовал кидать напрямую АТ команды в железный порт без всяких библиотек - и не пошло.
а с софтовой библиотекой через команды библиотеки работало.
Наверное, что-то делал не так...
void setup()
{
Serial3.begin(19200);
delay(500);
}
void loop()
{
1. вариант:
if (Serial3.available())
Serial.write(Serial3.read());
if (Serial.available())
Serial3.write(Serial.read());
2 вариант:
// Устанавливает текстовый режим для SMS-сообщений
Serial3.print("AT+CMGF=1\r");
delay(100); // даём время на усваивание команды
// Устанавливаем адресата: телефонный номер в международном формате
Serial3.println("AT + CMGS = \"+791000000\"");
delay(100);
// Пишем текст сообщения
Serial3.println("ALARM!");
delay(100);
// Отправляем Ctrl+Z, обозначая, что сообщение готово
Serial3.println((char)26);
}
вот я и попробовал кидать напрямую АТ команды в железный порт без всяких библиотек - и не пошло.
а с софтовой библиотекой через команды библиотеки работало.
Наверное, что-то делал не так...
void setup()
{
Serial3.begin(19200);
delay(500);
}
void loop()
{
1. вариант:
if (Serial3.available())
Serial.write(Serial3.read());
if (Serial.available())
Serial3.write(Serial.read());
2 вариант:
// Устанавливает текстовый режим для SMS-сообщений
Serial3.print("AT+CMGF=1\r");
delay(100); // даём время на усваивание команды
// Устанавливаем адресата: телефонный номер в международном формате
Serial3.println("AT + CMGS = \"+791000000\"");
delay(100);
// Пишем текст сообщения
Serial3.println("ALARM!");
delay(100);
// Отправляем Ctrl+Z, обозначая, что сообщение готово
Serial3.println((char)26);
}
поменяйте местами RX и TX местами в arduino и питание должно быть только внешнее, не от arduino.
Скорость выставьте Serial3 и Serial одинаковую,например 9600
Судя по комментам, у многих ситуация аналогичная. Такое ощущение, что это связано со спецификой производства каждой конкретной меги. Ибо производятся они китайцами, и могут иметь различную топологию, и даже разную элементную базу. Других причин я не вижу.
вот я и попробовал кидать напрямую АТ команды в железный порт без всяких библиотек - и не пошло.
а с софтовой библиотекой через команды библиотеки работало.
Наверное, что-то делал не так...
void setup() { Serial3.begin(19200); delay(500); } void loop() { 1. вариант: if (Serial3.available()) Serial.write(Serial3.read()); if (Serial.available()) Serial3.write(Serial.read()); 2 вариант: // Устанавливает текстовый режим для SMS-сообщений Serial3.print("AT+CMGF=1\r"); delay(100); // даём время на усваивание команды // Устанавливаем адресата: телефонный номер в международном формате Serial3.println("AT + CMGS = \"+791000000\""); delay(100); // Пишем текст сообщения Serial3.println("ALARM!"); delay(100); // Отправляем Ctrl+Z, обозначая, что сообщение готово Serial3.println((char)26); }вот я и попробовал кидать напрямую АТ команды в железный порт без всяких библиотек - и не пошло.
а с софтовой библиотекой через команды библиотеки работало.
Наверное, что-то делал не так...
void setup() { Serial3.begin(19200); delay(500); } void loop() { 1. вариант: if (Serial3.available()) Serial.write(Serial3.read()); if (Serial.available()) Serial3.write(Serial.read()); 2 вариант: // Устанавливает текстовый режим для SMS-сообщений Serial3.print("AT+CMGF=1\r"); delay(100); // даём время на усваивание команды // Устанавливаем адресата: телефонный номер в международном формате Serial3.println("AT + CMGS = \"+791000000\""); delay(100); // Пишем текст сообщения Serial3.println("ALARM!"); delay(100); // Отправляем Ctrl+Z, обозначая, что сообщение готово Serial3.println((char)26); }поменяйте местами RX и TX местами в arduino и питание должно быть только внешнее, не от arduino.
Скорость выставьте Serial3 и Serial одинаковую,например 9600
void setup() { Serial.begin(9600); Serial3.begin(9600); delay(500); }TX и RX менял уже.
питание в своих экспериментах с библиотеками подавал от Ардуины, проблем не видел (хотя понимаю, что это не доказательство).
вот насчет одинаковой скрости портов - интересно.
Попробую вечером!
Мега с модулем SIM800 у меня на хардовых портах не пошел. Только на 10-11 пинах с софтовой библиотекой.
а у меня наоборот не получилось. Использую 14 и 15 - Serial3 с АТ командами.
Судя по комментам, у многих ситуация аналогичная. Такое ощущение, что это связано со спецификой производства каждой конкретной меги. Ибо производятся они китайцами, и могут иметь различную топологию, и даже разную элементную базу. Других причин я не вижу.
у меня Мега типа приличная, на подвальная - Keyestudio, определяется как родная )
А нет никакого куска кода, которым можно было бы попробовать работу?
м.б., я в коде где-то накосячил? из меня программер тот еще )
А в чем проблема, если на софтовом порту работает? Или надо дозарезу на хардовом?
на софтовом - через либу.
А на железном не хочет ни через либу, ни напрямую.
Ну таки в чем проблема? Ну через либу.. либа то какая? SoftSerial?
На софтовом порту можно спокойно пользовать AT команды.
на софтовом - через либу.
А на железном не хочет ни через либу, ни напрямую.
хотите уйти от либы или памяти сэкономить?
основная цель (вбитая мной в голову) - уйти от софтовых портов.
Отказаться от либы - часть цели ).
И хотя писать/читать СМС проще либой, но какие-то вещи - типа запроса времени, баланса и проч. делаются через команды.
Коллеги, спешу подеоиться радостью!
совет obuhanoe "Скорость выставьте Serial3 и Serial одинаковую,например 9600" помог!
поставил везде 19200, и AT откликнулся! без всяких библиотек, на 14-15 ногах!
буду тестить дальше, но очевидно, что прогресс есть!
Спасибо obuhanoe!
Дополнено:
проверил АТ-командами отправку/прием СМС, исходящий звонок, лькальное-сетевое время и прочее - все работает!
причем на скоростях порта до 115к
А какая версия прошивки в вашем модуле (Sim800l) сейчас стоит ?
AT+GCAP
+GCAP: +CGSM
В плате Sim800L EVB V2.2 ?
в плате - не знаю .
на плате - EVB + v2.0 )
подскажите пожалуйсто что не так с кодом?
Хотелось бы отправлять в ответ смс с температурой и влажностью, но до них не доходит, в сериал показывает старые смс, новые нет.
#include <LCD_1602_RUS.h> LCD_1602_RUS lcd(0x27, 20, 4); #include <string.h> #include "SIM900.h" #include <SoftwareSerial.h> #include "sms.h" SMSGSM sms; int numdata; char smsbuffer[160]; char n[20]; #include <dht11.h> dht11 DHT; #define DHT11_PIN 12 int chk; long previousMillis = 0; long interval_1 = 5000; char mes1[]="t\r"; char mes2[]="off\r"; char mes3[]="on\r"; void setup() { Serial.begin(9600); gsm.begin(2400); delay(3000); Serial.print("AT+CMGDA=«DEL ALL»\r"); lcd.init(); lcd.backlight(); lcd.clear(); lcd.home(); lcd.print(L" °C"); lcd.setCursor(0, 2); lcd.print(L" %"); } void loop() { unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval_1) { previousMillis = currentMillis; chk = DHT.read(DHT11_PIN); lcd.home(); lcd.print(L" "); lcd.home(); lcd.print(DHT.temperature); lcd.setCursor(0, 2); lcd.print(L" "); lcd.setCursor(0, 2); lcd.print(DHT.humidity); gsm.readSMS(smsbuffer, 160, "+792*******", 20); Serial.println(n); Serial.println(smsbuffer); if(strcmp(smsbuffer, mes1) == 0) { Serial.println("GSM Shield testing."); delay(1000); Serial.println("\nstatus=READY"); delay(1000); sms.SendSMS("+922*********", (DHT.temperature, DHT.humidity)); Serial.println("\nSMS sent OK"); Serial.print("AT+CMGDA=«DEL ALL»\r"); }}}