Вообщем приобрёл я данную игрушку http://www.ebay.com/itm/GSM-GPRS-Sh...682?pt=LH_DefaultDomain_0&hash=item35c35f0b8a Прочёл тему http://wiki.amperka.ru/беспроводная-связь:gprs-shield Из всех 4-х примеров,работает только первый,и то определил когда подключил наушник((((,а мне так 4-й нужен(((Может кто сталкивался с данным девайсом?Помогите плиз.Заранее СПАСИБО!Очень помогает Ваш форум!
Он тоже работает на SIM900, поэтому всё должно работать, ну или лишь минимально отличаться. Как успехи? Удалось завести? Пробовали отправлять получаемые данные в Serial компьютера для отладки и отправлять на шилд SMS?
Нет...Пока никак не выходит(((Думаю ,что проблема в питании...на сайте продавца написано краснющем:This shield must work with a external DC9V power supply. Because SIM900 peak current more than 2A. тоесть питание ему нужно 9-ть вольт! Шилд устанавливается на UNO дублируя его входы и выходы,т.е.питается он от 5-и и 3,3В ,и тут я завис....,не могу же я на ногу 5-и вольт подать 9-ть...
Видимо, речь идёт о том, что у модуля на борту стоит свой линейный регулятор напряжения, который требует девять или более вольт. Питание, судя по фото, берётся из Vin на Arduino. А туда оно попадает с разъёма питания Arduino. Иными словами, питайте Arduino внешним стабилисированным блоком питания на 9 В, предоставляющим ток не менее 2000 мА.
Ну на деле 1 А должно хватать. А пробовали все входящие данные отправлять в Serial Monitor, чтобы глянуть чего происходит?
Вообщем есть кое какие успехи,загрузив этот скетч: Код (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 start a connection as client. InetGSM inet; //CallGSM call; //SMSGSM sms; char msg[50]; int numdata; char inSerial[50]; int i=0; boolean started=false; 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(4800)){ Serial.println("\nstatus=READY"); started=true; gsm.forceON(); } else Serial.println("\nstatus=IDLE"); if(started){ //GPRS attach, put in order APN, username and password. //If no needed auth let them blank. if (inet.attachGPRS("internet.wind", "", "")) Serial.println("status=ATTACHED"); else Serial.println("status=ERROR"); delay(1000); //Read IP address. gsm.SimpleWriteln("AT+CIFSR"); delay(5000); //Read until serial buffer is empty. gsm.WhileSimpleRead(); //TCP Client GET, send a GET request to the server and //save the reply. numdata=inet.httpGET("www.google.com", 80, "/", msg, 50); //Print the results. Serial.println("\nNumber of data received:"); Serial.println(numdata); Serial.println("\nData received:"); Serial.println(msg); } }; 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"); } //Read last message saved. if(!strcmp(inSerial,"MSG")){ Serial.println(msg); } else{ Serial.println(inSerial); gsm.SimpleWriteln(inSerial); } inSerial[0]='\0'; } } void serialswread(){ gsm.SimpleRead(); } получил в Serial Monitor вот это: Уже интереснее) (питание от 9В/1А)
Тот же самый скетч,только SIMкарта с инетом от МТС(до этого ставил Билайн,которая только принимает и отправляет СМС без интернета),и всё заработало: 1)Принимает цифровые СМС(числа) 2)Принимает Латиницу Кириллицу не хочет понимать,выдаёт десятичные коды в виде (A8 00 B3....и т п. От сюда вопрос:"Почему шилду нужен интернет?"
Скетч из примера GSM_GPRSLibrary_AT работает,но вот этот Код (C): #include <SoftwareSerial.h> SoftwareSerial gprsSerial(7, 8); //для зелёного светодиода будем использовать второй цифровой вход, //а для жёлтого - третий int greenPin = 2; int yellowPin = 3; void setup() { gprsSerial.begin(19200); pinMode(greenPin, OUTPUT); pinMode(yellowPin, OUTPUT); // Настраиваем приём сообщений с других устройств // Между командами даём время на их обработку gprsSerial.print("AT+CMGF=1\r"); delay(300); gprsSerial.print("AT+IFC=1, 1\r"); delay(300); gprsSerial.print("AT+CPBS=\"SM\"\r"); delay(300); gprsSerial.print("AT+CNMI=1,2,2,1,0\r"); delay(500); } String currStr = ""; // Переменная принимает значение True, если текущая строка является сообщением boolean isStringMessage = false; void loop() { if (!gprsSerial.available()) return; char currSymb = gprsSerial.read(); if ('\r' == currSymb) { if (isStringMessage) { //если текущая строка - SMS-сообщение, //отреагируем на него соответствующим образом if (!currStr.compareTo("Green on")) { digitalWrite(greenPin, HIGH); } else if (!currStr.compareTo("Green off")) { digitalWrite(greenPin, LOW); } else if (!currStr.compareTo("Yellow on")) { digitalWrite(yellowPin, HIGH); } else if (!currStr.compareTo("Yellow off")) { digitalWrite(yellowPin, LOW); } isStringMessage = false; } else { if (currStr.startsWith("+CMT")) { //если текущая строка начинается с "+CMT", //то следующая строка является сообщением isStringMessage = true; } } currStr = ""; } else if ('\n' != currSymb) { currStr += String(currSymb); } } не хочет,не могли бы подсказать где копать?У меня есть подозрение,что дело во 2-ой строчке:SoftwareSerial gprsSerial(7, 8);
А джамперы как стоят? Если в положении аппаратного serial, нужно заменить: SoftwareSerial gprsSerial(7, 8); на HardwareSerial& gprsSerial = Serial;
у меня такая же проблема как и у Romeo1(GSM Shield такой же, прада говоря я хотел чтоб он у меня работал от 5В((.. ), оба джампера установлены в SW (SoftWare).. был бы очень признателен за решение этой проблемы. И еще вопрос: как сделать так чтоб шилд отвечал смс-кой на номер последнего, входящего на него, смс? вкратце: как написать определитель номера и как этот определенный номер вписать в место где задаются параметры отправки смс ( "AT + CMGS = \"+380хххххххх\"") )
Плюнул на всё,и купил v2 на Амперке вот этот http://amperka.ru/product/arduino-gprs-shield Всё работает на AT команды откликается,а вот последний пример не работает((( #include <SoftwareSerial.h> SoftwareSerial gprsSerial(7, 8); //для зелёного светодиода будем использовать второй цифровой вход, //а для жёлтого - третий int greenPin = 2; int yellowPin = 3; void setup() { gprsSerial.begin(19200); pinMode(greenPin, OUTPUT); pinMode(yellowPin, OUTPUT); // Настраиваем приём сообщений с других устройств // Между командами даём время на их обработку gprsSerial.print("AT+CMGF=1\r"); delay(300); gprsSerial.print("AT+IFC=1, 1\r"); delay(300); gprsSerial.print("AT+CPBS=\"SM\"\r"); delay(300); gprsSerial.print("AT+CNMI=1,2,2,1,0\r"); delay(500); } String currStr = ""; // Переменная принимает значение True, если текущая строка является сообщением boolean isStringMessage = false; void loop() { if (!gprsSerial.available()) return; char currSymb = gprsSerial.read(); if ('\r' == currSymb) { if (isStringMessage) { //если текущая строка - SMS-сообщение, //отреагируем на него соответствующим образом if (!currStr.compareTo("Green on")) { digitalWrite(greenPin, HIGH); } else if (!currStr.compareTo("Green off")) { digitalWrite(greenPin, LOW); } else if (!currStr.compareTo("Yellow on")) { digitalWrite(yellowPin, HIGH); } else if (!currStr.compareTo("Yellow off")) { digitalWrite(yellowPin, LOW); } isStringMessage = false; } else { if (currStr.startsWith("+CMT")) { //если текущая строка начинается с "+CMT", //то следующая строка является сообщением isStringMessage = true; } } currStr = ""; } else if ('\n' != currSymb) { currStr += String(currSymb); } } Такое впечатление,что "Green on,Yellow on" шилд просто не понимает,потому как предыдущие примеры работают,а этот никак(,а мне как раз надо отсылая СМСку включать ,и выключать,спрашивать температуру ну и т д
почему не работает этот код?: Код (Text): #include "SIM900.h" #include <SoftwareSerial.h> SoftwareSerial gprsSerial(7, 8); #include "sms.h" SMSGSM sms; int numdata; boolean started=false; char smsbuffer[160]; char n[20]; void setup() { pinMode(13, OUTPUT); digitalWrite(13, LOW); Serial.begin(9600); Serial.println("GSM Shield testing."); if (gsm.begin(2400)){ Serial.println("\nstatus=READY"); started=true; } else Serial.println("\nstatus=IDLE"); if(started){ } }; void loop() { if(started){ if(gsm.readSMS(smsbuffer, 160, n, 20)) { delay(1000); if (smsbuffer == "a") digitalWrite(13, HIGH);//если отправляем "a" то зажигаем 13 светодиод else { digitalWrite(13, LOW); } } delay(1000); } }; он компилируется,но поморгать светодиодом не удаётся,купил новый gsmshild v.2 ,такая же история(((,чего делаю не так?
Тем у кого такие же проблемы. Ответ: ищите нужные библиотеки. Ибо даже на сайтах где продают, не всегда они свежие.
выставите одну скорость как для модема так и для порта, второе попробуйте управлять не буквами а цифрами.