SIM808 Не обнаруживает SMS, если они отправлены в автономном режиме
Я запускаю UNV SIM808 Shield с Arduino Uno, используя DFRobot_SIM808. Щит не имеет никаких проблем с обнаружением входящих SMS - сообщений при включенном питании. Я только что узнал, что если щит выключен во время отправки SMS-сообщения, он не обнаружит его, когда снова выйдет в сеть.
#include <DFRobot_sim808.h>
#include <SoftwareSerial.h>
#define MESSAGE_LENGTH 160
char message[MESSAGE_LENGTH];
int messageIndex = 0;
char phone[16];
char datetime[24];
#define PIN_TX 3
#define PIN_RX 2
SoftwareSerial mySerial(PIN_TX,PIN_RX);
DFRobot_SIM808 sim808(&mySerial);//Connect RX,TX,PWR,
void setup() {
mySerial.begin(9600);
Serial.begin(9600);
//******** Инициализация модуля sim808 *************
while(!sim808.init()) { Serial.println("Starting Sim808..."); sim808.powerUpDown(9); }
delay(3000);
Serial.println("Init Success, please send SMS message to me!");
}
void loop() {
//*********** Обнаружение непрочитанных SMS сообщений ************************
messageIndex = sim808.isSMSunread();
Serial.print("messageIndex: ");
Serial.println(messageIndex);
//*********** По крайней мере, есть одно НЕПРОЧИТАННОЕ SMS ***********
if (messageIndex > 0) {
sim808.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
//***********Чтобы не переполнять память SIM-карты, лучше ее удалить**********
sim808.deleteSMS(messageIndex);
Serial.print("From number: ");
Serial.println(phone);
Serial.print("Datetime: ");
Serial.println(datetime);
Serial.print("Recieved Message: ");
Serial.println(message);
}
}
Я делюсь данными последовательного монитора после выключения щита. Я отправил это сообщение (2:24) в 2:24 по местному времени. Через 10 минут я включил экран и ждал, пока сообщение будет обнаружено, но безрезультатно в течение 15 минут. Я отправил еще одно сообщение (2:49) по местному времени, когда щит включен, и он был обнаружен сразу же вместе с предыдущим сообщением.
Он работает каждые 3 секунды, но я очистил данные
02:34:56.342 -> Starting Sim808...
02:35:06.958 -> Init Success, please send SMS message to me!
02:35:09.602 -> messageIndex: -1
02:40:00.686 -> messageIndex: 0
02:45:02.311 -> messageIndex: 0
02:49:26.940 -> messageIndex: 0
02:49:29.560 -> messageIndex: 0
02:49:32.216 -> messageIndex: 0
02:49:33.565 -> messageIndex: 7
02:49:36.269 -> From number: +***********
02:49:36.322 -> Datetime: 21/04/21,02:24:20+12
02:49:36.369 -> Recieved Message: 2:24
02:49:37.624 -> messageIndex: 8
02:49:40.373 -> From number: +***********
02:49:40.373 -> Datetime: 21/04/21,02:49:28+12
02:49:40.426 -> Recieved Message: 2:49
02:49:43.029 -> messageIndex: 0
02:49:45.691 -> messageIndex: 0
02:49:48.314 -> messageIndex: 0
Вот код для функции sim808.isSMSunread ();. Возможно, есть что-то, что может быть изменено в коде, может смягчить эту проблему:
char DFRobot_SIM808::isSMSunread(){
char gprsBuffer[48]; //48 достаточно, чтобы увидеть +CMGL:
char *s;
sim808_check_with_cmd("AT+CMGF=1\r\n","OK\r\n",CMD); delay(1000);
sim808_send_cmd(F("AT+CMGL=\"REC UNREAD\",1\r\n"));
sim808_clean_buffer(gprsBuffer,31);
sim808_read_buffer(gprsBuffer,30,DEFAULT_TIMEOUT);
if(NULL != ( s = strstr(gprsBuffer,"OK"))) {
delay(50);
return 0;
} else {
sim808_wait_for_resp("OK\r\n", CMD);
sim808_send_cmd("AT+CMGL=\"REC UNREAD\",1\r\n");
sim808_clean_buffer(gprsBuffer,48);
sim808_read_buffer(gprsBuffer,47,DEFAULT_TIMEOUT);
if(NULL != ( s = strstr(gprsBuffer,"+CMGL:"))) {
s = strstr(gprsBuffer,":");
if (s != NULL) {
sim808_wait_for_resp("OK\r\n", CMD);
return atoi(s+1);
}
} else {
return -1;
}
}
return -1;
}
То, что я ищу, - это заставить щит обнаруживать любые непрочитанные сообщения, если он был отправлен в выключенном состоянии?
@ASH, 👍2
Обсуждение0
- Как очистить значения SoftwareSerial?
- Как сделать GET HTTP-запрос от Arduino на Firebase?
- Преобразование массива символов в строку Flash
- Получение «Открыть сбой питания GPS» на модуле SIM808
- При компиляции этого кода он говорит: 'sendATcommand' was not declared in this scope
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
вам придется построить машину времени, @jsotola
похоже, что ваш провайдер не хранит SMS-сообщения и передает их, когда ваше устройство подключается к Интернету ... проверьте это с помощью своего мобильного телефона ... выключите телефон и отправьте SMS на свой телефон.... затем включите телефон, @jsotola
@jsotola Как только я вставил sim-карту в свой телефон, я немедленно получил SMS., @ASH
затем вам нужно узнать, как телефон извлекает сохраненные сообщения ... это не имеет ничего общего с arduino, @jsotola
есть ли у sim808 команды at, как на этой странице https://www.developershome.com/sms/readSmsByAtCommands.asp ?, @user30878
@user30878 Я не совсем уверен, понял ли я вас, но да, модуль отвечает на команды AT, и вот как это работает., @ASH
Проверьте страницу, на которую я ссылаюсь., @user30878
@user30878, как я понимаю, у них возникли проблемы с получением сообщений, которые стояли в очереди в сети после того, как они только что включились, а не с чтением сообщений в целом., @timemage
@timemage команда "CMGR", как говорят, получает SMS из области хранения. Я не знаю, что такое хранилище, но в комментариях выше сказано, что это может быть решением., @user30878
на этот вопрос стоит взглянуть https://stackoverflow.com/questions/29867646/minicom-atcmgr-n-not-showing-the-sms-content URL-адрес, указанный в ответе, содержит сведения о хранении https://www.smssolutions.net/tutorials/gsm/receivesmsat/, @user30878
@user30878 Я перепробовал все возможные типы хранилищ, но в итоге столкнулся с той же проблемой. В+CPMS="SM", а затем ME, MT, SM_P, ME_P и MT, @ASH