Подключаю Arduino к модулю GPRS Shield на Sim900. ардуино 10,11,GND соответственно модуль 1,2,GND Заливаю такой скетч: Код (C++): #include <SoftwareSerial.h> SoftwareSerial S1(10, 11); char bufferPC_Serial[64];// буфер PC Serial char bufferGPRS_Serial[64];// буфер GPRS Serial void setup() { Serial.begin(9600);// открываем последовательный порт для мониторинга действий в программе S1.begin(115200);// открываем последовательный порт для связи с GPRS-устройством со скоростью 9600 бод while (!Serial) {}// ждём, пока не откроется монитор последовательного порта для того, чтобы отследить все события в программе gprsTest();// пока не установится связь с GPRS-устройством, будем крутиться в теле функции } void loop() {} void gprsTest() { while (true) {// бесконечный цикл delay(1000);// ждём 1 секунду S1.println("AT");// посылаем в GPRS Shield АТ-команду "AT" if (S1.available() > 0) { Serial.println("EcTb oTBeT oT moDyJl9"); } else { Serial.println("HeT oTBeTa oT moDyJl9"); } } } Ответа от модуля нет никакого. Подскажите, что вообще может быть? Ни одна библиотека и ни один пример не работают. На модуль можно позвонить, он доступен. Может быть что то можно прозвонить? Спасибо.
Попробуйте понизить скорость на SoftwareSerial до 9600. У вас в комментариях стоит 9600, а в инициализации порта 115200.
Спасибо огромное за ответ. Оказалось что джамперы были не так подсоединены. Я их поставил на D7, D8 и подключал 0,1 порты модуля к 7,8 порту ардуины. логика такова: Ну джамперы же стоят на 7,8. Значит надо к 7 и 8 подключать. В общем адская невнимательность. Еще вопрос по модулю. Скорость обмена 115200. Все команды проходят на ура, но иногда в ответе возникает крякозябра или обрыв. Почему такое может быть? Пример: Запрос: Код (C++): AT+SAPBR=4,1 Ответ: Код (C++): +SAPBR: CONTYPE: GPRS APN: internet PHONENUM: USER: gda Код (C++): #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); void setup() { Serial.begin(115200); mySerial.begin(115200); } char a; void loop() { delay(10); if (mySerial.available()) { Serial.write(mySerial.read()); } delay(10); if (Serial.available()) { a=Serial.read(); if(a=='~') { mySerial.write((char)26); } else { mySerial.write(a); } } }
Разобрался сам. В файле по адресу Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src SoftwareSerial.h поменять #define _SS_MAX_RX_BUFF 64 например на #define _SS_MAX_RX_BUFF 640 но быть осторожным с количеством памяти под переменные. Костыль, до нормального решения не допер.