SIM800L v2.0 - с какими библиотеками дружит? Не могу запустить на Меге.

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

вот я и попробовал кидать напрямую АТ команды в железный порт без всяких библиотек - и не пошло.

а с софтовой библиотекой через команды библиотеки работало.

Наверное, что-то делал не так...

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);

}

 

obuhanoe
Offline
Зарегистрирован: 18.05.2016

ProstoAlex пишет:

вот я и попробовал кидать напрямую АТ команды в железный порт без всяких библиотек - и не пошло.

а с софтовой библиотекой через команды библиотеки работало.

Наверное, что-то делал не так...

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);
}

 

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

TX и RX менял уже.

питание в своих экспериментах с библиотеками подавал от Ардуины, проблем не видел (хотя понимаю, что это не доказательство).

вот насчет одинаковой скрости портов - интересно.

Попробую вечером!

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Мега с модулем SIM800 у меня на хардовых портах не пошел. Только на 10-11 пинах с софтовой библиотекой.

obuhanoe
Offline
Зарегистрирован: 18.05.2016

dr.lmg пишет:
Мега с модулем SIM800 у меня на хардовых портах не пошел. Только на 10-11 пинах с софтовой библиотекой.

а у меня наоборот не получилось. Использую 14 и 15 - Serial3 с АТ командами.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Судя по комментам, у многих ситуация аналогичная. Такое ощущение, что это связано со спецификой производства каждой конкретной меги. Ибо производятся они китайцами, и могут иметь различную топологию, и даже разную элементную базу. Других причин я не вижу.

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

у меня Мега типа приличная, на подвальная - Keyestudio, определяется как родная )

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

А нет никакого куска кода, которым можно было бы попробовать работу?

м.б., я в коде где-то накосячил? из меня программер тот еще )

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

А в чем проблема, если на софтовом порту работает? Или надо дозарезу на хардовом?

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

на софтовом - через либу.

А на железном не хочет ни через либу, ни напрямую.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Ну таки в чем проблема? Ну через либу.. либа то какая? SoftSerial?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

На софтовом порту можно спокойно пользовать AT команды.

obuhanoe
Offline
Зарегистрирован: 18.05.2016

ProstoAlex пишет:

на софтовом - через либу.

А на железном не хочет ни через либу, ни напрямую.

хотите уйти от либы или памяти сэкономить?

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

основная цель (вбитая мной в голову) - уйти от софтовых портов.

Отказаться от либы - часть цели ).

И хотя писать/читать СМС проще либой, но  какие-то вещи - типа запроса времени, баланса и проч. делаются через команды.

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

Коллеги, спешу подеоиться радостью!

совет obuhanoe "Скорость выставьте Serial3 и Serial одинаковую,например 9600" помог!

поставил везде 19200,  и AT откликнулся! без всяких библиотек, на 14-15 ногах!

буду тестить дальше, но очевидно, что прогресс есть!

Спасибо obuhanoe!

Дополнено:

проверил АТ-командами отправку/прием СМС, исходящий звонок, лькальное-сетевое время и прочее - все работает!

причем на скоростях порта до 115к

Canar
Offline
Зарегистрирован: 24.04.2017

А какая версия прошивки в вашем модуле (Sim800l) сейчас стоит ?

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

AT+GCAP

+GCAP: +CGSM

AT+GMM
SIMCOM_SIM800L
AT+GMR
Revision:1308B08SIM800L16
 
Canar
Offline
Зарегистрирован: 24.04.2017

В плате Sim800L EVB V2.2 ?

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

в плате - не знаю .

на плате - EVB  + v2.0 )

 

Stivin89
Offline
Зарегистрирован: 17.04.2018

подскажите пожалуйсто что не так с кодом?

Хотелось бы отправлять в ответ смс с температурой и влажностью, но до них не доходит, в сериал показывает старые смс, новые нет.

#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"); }}}