Здравствуйте! Есть такая проблема: я заказал GPRS Shield с Амперки. Пришел. Я его подключил к Arduino Mega 2560 и прошил arduino. Прошивать пробовал разными кодами: первый код: Код (C++): // библиотека для работы с GPRS устройством #include <GPRS_Shield_Arduino.h> #include <SoftwareSerial.h> // создаём объект класса GPRS и передаём в него объект Serial1 GPRS gprs(Serial1); // можно указать дополнительные параметры — пины PK и ST // по умолчанию: PK = 2, ST = 3 // GPRS gprs(Serial1, 2, 3); void setup() { // открываем последовательный порт для мониторинга действий в программе Serial.begin(9600); // открываем Serial-соединение с GPRS Shield Serial1.begin(9600); // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе while (!Serial) { } Serial.print("Serial init OK\r\n"); // включаем GPRS шилд gprs.powerOn(); // проверяем есть ли связь с GPRS устройством while (!gprs.init()) { // если связи нет, ждём 1 секунду // и выводим сообщение об ошибке // процесс повторяется в цикле // пока не появится ответ от GPRS устройства delay(1000); Serial.print("Init error\r\n"); } // выводим сообщение об удачной инициализации GPRS Shield Serial.println("GPRS init success"); // отправляем сообщение по указанному номеру с заданным текстом gprs.sendSMS("+79829279704", "TEST"); } void loop() { } Второй код: Код (C++): // библиотека для работы с GPRS устройством #include <GPRS_Shield_Arduino.h> // длина сообщения #define MESSAGE_LENGTH 160 // номер сообщения в памяти сим-карты int messageIndex = 0; // текст сообщения char message[MESSAGE_LENGTH]; // номер, с которого пришло сообщение char phone[16]; // дата отправки сообщения char datetime[24]; // создаём объект класса GPRS и передаём в него объект Serial1 GPRS gprs(Serial1); // можно указать дополнительные параметры — пины PK и ST // по умолчанию: PK = 2, ST = 3 // GPRS gprs(Serial1, 2, 3); void setup() { // открываем последовательный порт для мониторинга действий в программе Serial.begin(9600); // ждём пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе while (!Serial) { } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с GPRS Shield Serial1.begin(9600); // включаем GPRS-шилд gprs.powerOn(); // проверяем, есть ли связь с GPRS-устройством while (!gprs.init()) { // если связи нет, ждём 1 секунду // и выводим сообщение об ошибке; // процесс повторяется в цикле, // пока не появится ответ от GPRS-устройства delay(1000); Serial.print("GPRS Init error\r\n"); } // выводим сообщение об удачной инициализации GPRS Shield Serial.println("GPRS init success"); Serial.println("Please send SMS message to me!"); } void loop() { // если пришло новое сообщение if (gprs.ifSMSNow()) { // читаем его gprs.readSMS(message, phone, datetime); // выводим номер, с которого пришло смс Serial.print("From number: "); Serial.println(phone); // выводим дату, когда пришло смс Serial.print("Datetime: "); Serial.println(datetime); // выводим текст сообщения Serial.print("Recieved Message: "); Serial.println(message); gprs.sendSMS(phone,"State: OK"); } } Но практически всегда выдает в Serial "GPRS init error". (Иногда, все же, нормально запускается). Есть подозрение, что не GPRS'е неверно выставлена частота Serial'а. Как можно настроить частоту на GPRS Shield'e? (AT командами - есть проблемы: ведь он на другой частоте и не понимает AT команд на частоте 9600).
Я пробовал просто первым делом Код (C++): Serial1.println("A"); (до этого делал Serial1.begin(9600)). Не помогло. Что я не так делаю?
p.s. Для меги нужно использовать объект Serial для общения с шилдом (первый порт, RX0/TX0), код для терминала убрать совсем. Если хотите сделать как на Leonardo, общаться одновременно и с шилдом и с терминалом, нужно прокинуть на шилд другой UART (1,2,3), например, через TroykaMegaTail.
Здравствуйте, сегодня решил подключить GPRS к Arduino UNO, вот код: // библиотека для работы с GPRS устройством #include <GPRS_Shield_Arduino.h> // библиотека для эмуляции Serial порта // она нужна для работы библиотеки GPRS_Shield_Arduino #include <SoftwareSerial.h> // создаём объект mySerial и передаём номера управляющих пинов RX и TX SoftwareSerial mySerial(4, 5); // создаём объект класса GPRS и передаём в него объект mySerial GPRS gprs(mySerial); // можно указать дополнительные параметры — пины PK и ST // по умолчанию: PK = 2, ST = 3 // GPRS gprs(mySerial, 2, 3); void setup() { // открываем последовательный порт для мониторинга действий в программе Serial.begin(9600); // открываем Serial-соединение с GPRS Shield mySerial.begin(9600); // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе while (!Serial) { } Serial.print("Serial init OK\r\n"); // включаем GPRS шилд gprs.powerOn(); // проверяем есть ли связь с GPRS устройством while (!gprs.init()) { // если связи нет, ждём 1 секунду // и выводим сообщение об ошибке // процесс повторяется в цикле // пока не появится ответ от GPRS устройства delay(1000); Serial.print("Init error\r\n"); } Потом в мониторе порта: Serial init OK Init error Init error Init error Init error Init error Init error Init error Init error Init error Init error Init error Init error Init error Что делать? Подключено: RX 10 TX 11
Шилд давно покупали? На новых изменена маркировка. Попробуйте поменять местами RX/TX, только вместо проводов для соединения 10,11 с RX,TX лучше используйте 220-240 Ом резисторы, чтобы случайно не пожечь порты.