Добрый день. Заказал с Китая шилд https://ru.aliexpress.com/item/SIM9...32649551828.html?spm=a2g0s.9042311.0.0.WHGEdE При попытке подключить к ПК через ардуино отказывается отвечать на команды. Используется режим softwareserial. Пару раз удалось заставить его ответить, но при отсутствии каких-либо изменений он переставал это делать. Так и не удалось понять в чём же всё-таки проблема. При включении выдаёт в терминал несколько букв "я" на скорости 9600. Скетч в ардуино залит такой: Код (C++): #include <SoftwareSerial.h> #include <GPRS_Shield_Arduino.h> SoftwareSerial mySerial(7, 8); void setup() { mySerial.begin(9600); // the GPRS baud rate Serial.begin(9600); // the GPRS baud rate } void loop() { if (Serial.available()) mySerial.write(Serial.read()); if (mySerial.available()) Serial.write(mySerial.read()); } Спойлер Прошу помощи.
Всем привет! Дабы не плодить аналогичные темы, продолжу тут. Мой SIM900 в принципе не реагиреут на АТ-команды. Зайду издалека: как его правильно подключать к UART? В сети видел пару вариантов, поэтому все не заработали. Наиболее логичным мне показался этот Я использовал плату usb-uart вместо Ардуино, а саму плату SIM900 запитал от внешнего источника напряжением 3,3В. И никакой реакции на АТ команды. Что я сделал не так? Нужно ли подключать батарейку внизу платы?
Разобрался. Надо было кнопку на плате нажимать. Но, тем не менее, плата не реагирует на многие АТ-команды из этой таблицы. Это нормально?
Тоже пытаюсь запустить такой же шилд на Mini Pro. После долгих тыканий получается что-то непонятное. При подключении шилда СИМ900 без ардуины, напрямую к СОМ порту компа шилд адекватно работает только на той скорости, которая проставлена в свойствах порта в диспетчере устройств. Ну это нормально. Шилд отвечает на все команды. А вот при подключении через ардуину все как то странно. Раньше было тупо эхо, которое никакой командой не отключается. То есть я ему "АТ" и он мне в обратку "АТ". Если перепутать местами Rx и TX то вообще никакой реакции. А теперь в скетче я прописываю 9600 а мониторе порта мне приходится прописать 115200, чтобы что-то увидеть (не квадратики). "arduino start 1" вижу а вот на команды никакой реакции нет. С каждым разом все интереснее и интереснее. В инете везде написано как подключить шилд к ардуино уно. Как кто подключал к минику я нигде не нашел. Может в этом случае есть какой-то подводный камень? Скетч стандартный. Вот такой: Код (C++): #include <SoftwareSerial.h> SoftwareSerial mySerial(9, 10); void setup() { Serial.begin(9600); mySerial.begin(9600); Serial.println("arduino start 2"); } void loop() { if (Serial.available()) mySerial.write(Serial.read()); if(mySerial.available()) Serial.write(mySerial.read()); }
Скорость всех портов должна быть одинаковой на всех устройствах. в модем можно прописать одну скорость отключив тем самым автоопределение. классическая ошибка при подключении через ардуино забывают про землю (GND) и еще в скетче софт сериал на 9 и 10 на фото 7 и 8
что это, леонардо? у него есть ограничение при работе с SoftwareSerial да и на 115200 SoftwareSerial не работает.
Про землю естественно не забыл. А расхождений по пинам у меня нет. Просто тему начинал другой человек. Еще интересный момент. Если взять пример из библиотеки GSM_GPRS Код (C++): #include "SIM900.h" #include <SoftwareSerial.h> //#include "inetGSM.h" //#include "sms.h" //#include "call.h" //To change pins for Software Serial, use the two lines in GSM.cpp. //GSM Shield for Arduino //www.open-electronics.org //this code is based on the example of Arduino Labs. //Simple sketch to communicate with SIM900 through AT commands. //InetGSM inet; //CallGSM call; //SMSGSM sms; int numdata; char inSerial[40]; int i=0; void setup() { //Serial connection. Serial.begin(9600); Serial.println("GSM Shield testing."); //Start configuration of shield with baudrate. //For http uses is raccomanded to use 4800 or slower. if (gsm.begin(9600)) Serial.println("\nstatus=READY"); else Serial.println("\nstatus=IDLE"); }; void loop() { //Read for new byte on serial hardware, //and write them on NewSoftSerial. serialhwread(); //Read for new byte on NewSoftSerial. serialswread(); }; void serialhwread(){ i=0; if (Serial.available() > 0){ while (Serial.available() > 0) { inSerial[i]=(Serial.read()); delay(10); i++; } inSerial[i]='\0'; if(!strcmp(inSerial,"/END")){ Serial.println("_"); inSerial[0]=0x1a; inSerial[1]='\0'; gsm.SimpleWriteln(inSerial); } //Send a saved AT command using serial port. if(!strcmp(inSerial,"TEST")){ Serial.println("SIGNAL QUALITY"); gsm.SimpleWriteln("AT+CSQ"); } else{ Serial.println(inSerial); gsm.SimpleWriteln(inSerial); } inSerial[0]='\0'; } } void serialswread(){ gsm.SimpleRead(); } этот с скетч с включением той же SoftwareSerial работает !
Коллеги! Логическими состояниями на каких пинах SIM900 нужно управлять, чтобы на время сна модуль работал только на прием?