Подключение Mega к GPRS Shield
- Войдите на сайт для отправки комментариев
Добрый день коллеги! Приобрел вот такой шилд http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:gprs-shield
Почитал его распиновку, на 0 ноге у шилда написано RX, на 1 ноге у шилда написано TX. При сопоставлении шилда с мегой - эти ноги попадают в 0 контакт Меги RX и 1 контакт Меги TX. Т.е. схема подключения получилась RX0 Mega = RX0 Shild и TX1 Mega = TX1 Shild. Вот тут возникает вопрос - я не хочу использовать программный порт, а хочу использовать аппартаный порт на меге TX3 RX3. По моей логике подключение должно быть так TX => RX... а сейчас получается что RX=RX... Либо переделывать надо, либо опечатка на плате... чет запутался я... Нужна помощь)))
P.S. понимаю что перемычки на шилде RX и TX я должен снять. И тут открывается 2 свободных контакта которые можно перемычками ткнуть на мегу к 3-ему порту. Вот только осталось определить как )))
ща вот мысль мелькнула - а может это сквозное обозначение контактов меги на шилде ?? )))
Все мои опосения сжечь ардуину не сбылись )) TX и RX на шилде обозначают сквозное наименование порта Serial на Меге, так что распаяны они верно. Подключил эти ноги к Serial2 пробросив перемычки по обозначению RX Mega=RX Shield и TX Mega=TX Shield
Все заработало. Нашел косячки в примерах работы библиотек GPRS_Shield_Arduino и sim900. Пришлось поправить коды инициализации AT при получении СМС и в примерах переопределил переменные Phone как char.
друг, поделись скетчем с обществом
Да не жалко )) Это модуль GPRS_Shield_Arduino.cpp, я поправил пока в ней функцию IfSMSNow. В описании Sim900 сказана фукнция AT+CMTI при получении смс. А в родном варианте AT+CMT что не обрабатывает событие...
Это пример для чтения смс
// библиотека для работы с GPRS устройством #include <GPRS_Shield_Arduino.h> // библиотека для эмуляции Serial-порта // она нужна для работы библиотеки GPRS_Shield_Arduino #include <SoftwareSerial.h> // длина сообщения #define MESSAGE_LENGTH 160 // номер сообщения в памяти сим-карты int messageIndex = 0; // текст сообщения char message[MESSAGE_LENGTH]; // номер, с которого пришло сообщение char phone[16]; // дата отправки сообщения char datetime[24]; // создаём объект класса GPRS. По умолчанию скорость общения с ним 9600 бод // с помощью него будем давать команды GPRS шилду GPRS gprs; void setup() { // включаем GPRS-шилд gprs.powerUpDown(); // открываем последовательный порт для мониторинга действий в программе Serial.begin(9600); while (!Serial) { // ждём пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе } // проверяем, есть ли связь с GPRS-устройством while (!gprs.init()) { // если связи нет, ждём 1 секунду // и выводим сообщение об ошибке; // процесс повторяется в цикле, // пока не появится ответ от GPRS-устройства delay(1000); Serial.print("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); } }Это пример для отправки смс с исправленным кодом
#include <GPRS_Shield_Arduino.h> // библиотека для эмуляции Serial-порта // она нужна для работы библиотеки GPRS_Shield_Arduino #include <SoftwareSerial.h> // длина сообщения char PHONE_NUMBER[13]= "+7912XXXXXXX"; // номер сообщения в памяти сим-карты int messageIndex = 0; // текст сообщения char message[30] = "Hello! I am GPRS Shield"; // номер, с которого пришло сообщение char phone[16]; // дата отправки сообщения char datetime[24]; // создаём объект класса GPRS. По умолчанию скорость общения с ним 9600 бод // с помощью него будем давать команды GPRS шилду GPRS gprs; void setup() { // включаем GPRS-шилд gprs.powerUpDown(); // открываем последовательный порт для мониторинга действий в программе Serial.begin(9600); while (!Serial) { // ждём пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе } // проверяем, есть ли связь с GPRS-устройством while (!gprs.init()) { // если связи нет, ждём 1 секунду // и выводим сообщение об ошибке; // процесс повторяется в цикле, // пока не появится ответ от GPRS-устройства delay(1000); Serial.print("Init error\r\n"); } // выводим сообщение об удачной инициализации GPRS Shield Serial.println("GPRS init success"); Serial.println("Please send SMS message to me!"); //Serial.println("Start to send message ..."); // отправляем сообщение по указанному номеру с заданным текстом //gprs.sendSMS(PHONE_NUMBER, message); gprs.readSMS(2,message,30); sim900_send_cmd("AT"); Serial.print("From number: "); Serial.println(phone); Serial.print("Recieved Message: "); Serial.println(message); } 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); } }Дальше еще не копал, времен пока нет, но скоро докопаю