GSM/GPRS Shield

dardik
Offline
Зарегистрирован: 09.03.2013

Здравствуйте. Приобрел такой шилд: http://www.ebay.com/itm/230911052682?ssPageName=STRK:MEWNX:IT&_trksid=p3...

Подсоединил к Arduino Mega 2560. В мегу, кроме усб шнура воткнул питание 12В, 1А. Вставил сим карту.

Какими способами я только не пытался достучаться к шилду, результат один - не видится он в сериал мониторе.

Пробовал перемычки ставить и на Software и на Hardware - безрезультатно. На шилде горит красный огонь питания, синий - статус, зеленый моргает - поймал сеть. Могу звонить на него с телефона, естественно трубу не берет, но идут гудки. Может кто сталкивался с такой проблемой? Такое ощущение, что шилд сам по себе, а ардуино сама по себе.

ourlive
Offline
Зарегистрирован: 26.05.2012

This shield must work with a external DC9V power supply. Because SIM900 peak current more than 2A.

Этот шилд должен работать с внешним источником питания 9 В постоянного тока. Потому что на SIM900 пиковый ток более .
 
оно как бы по вашей ссылке красным написано..

 

dardik
Offline
Зарегистрирован: 09.03.2013

Почему же тогда загораются светодиоды питания, статуса и сети? Я думаю, если бы нехватало, они бы вообще не загорались...

ourlive
Offline
Зарегистрирован: 26.05.2012

ну горят, и горят себе, вам то от этого не легче, выполните инструкции производителя после прочтения даташита на устройство, оттуда наверное и узнать сможете с чего это они светятся.

dardik
Offline
Зарегистрирован: 09.03.2013

Замена блока питания на более мощный не дало результатов (блок питания взял от компьютера)

__Alexander
Offline
Зарегистрирован: 24.10.2012

попробуйте для начала отладить уарт без шилда. если весит на rx/tx 0, то ft232 может мешать.

__Alexander
Offline
Зарегистрирован: 24.10.2012

кстати, на картинке sim900a... у вас  с буковкой А?

а, еще одно, чтобы заработал обмен на симкомах, первая АТ команда должна быть обязательно прописным шрифтом (т.е. все заглавные).

dardik
Offline
Зарегистрирован: 09.03.2013

 У меня на чипе SIM900 без буквы А.

Шилд начал опрашиваться после того, как я его вытащил из ардуано и сделал все на проводах, изменив пины RX, TX, на ардуино. Пробовал, точно работает на Mega 2560 пины 10,11 и 50,51 (RX,TX). Точно не работают 2,3. Может кому-то поможет... Буду продолжать эксперименты. Еще похоже, что влияет скорость порта (на нормальное изображения символов в терминале), еще не все попробовал, но стабильно работает на 9600.

mainprolab
Offline
Зарегистрирован: 19.06.2013

Здравствуйте.

Я столкнулся с такой же самой проблемой!

Разница лишь только в том, что у меня Mega 1280, аппаратно это тоже что и 2560 только памяти в 2 раза меньше. Испробовал все тоже, что и автор данной темы.

Вопрос к автору темы:

Какие библиотеки вы используете?

У меня ссылка ведет вот сюда http://code.google.com/p/gsm-shield-arduino/

Как стабильно работает устройство?

А со схемой совсем плохо http://www.open-electronics.org/arduino-gsm-shield/ вид совсем не такой!

Если не трудно напишите более подробно, как настроить связь микроконтроллера с модулем SIM900.

Спасибо.

RomeoTer
Offline
Зарегистрирован: 12.08.2013

Точно такая же проблема,звонки проходят,с СМСками никак не могу разобраться(,как победили???

Life23
Offline
Зарегистрирован: 10.08.2013

Была такая же самая проблема с ICOMSAT 1.1(на чипе sim900). пока не вытащил с Ардуино контроллер и не подключил на прямую 0 и 1 пины к самому контроллеру Sim900 и через терминал Putty обрезал ему скорость на 9600. в даташите написано, что Sim900 автомитически перебирает скорость.  И кстати: RX(Arduino) подключаеться к TX(Шилда) и на оборот TX(ARDUINO)-RX(Шилда).

 

UPDATE:

а по поводу 2А питание - у меня работает от USB без всяких проблем.

Danila
Offline
Зарегистрирован: 16.05.2013

Уважаемые!

Если я вас правильно понял, то плату надо отдельно запитать 9 вольтами ? 

 

Вообще странно, без отдельного питания она может звонить, принимать звонки слать смс - а вот принимать не может :) 

RomeoTer
Offline
Зарегистрирован: 12.08.2013

Вообщем есть кое какие успехи,загрузив этот скетч и поставив сим карту МТС маяк(до этого была Билайн)

#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();
}

Получил СМС без дполнительного питания (питался от usb),принимает Латиницу и цыфры,Кирилицу отказывается....

Maverik
Offline
Зарегистрирован: 12.09.2012

Кто нибудь может нормальное описание подключение этого шилда к меге дать ?

dardik
Offline
Зарегистрирован: 09.03.2013

У тебя точно такой шилд, как я указал в начале темы? Если да, то в понедельник напишу, я смог подсоединить, но он  лежит на работе, надо посмотреть.

Maverik
Offline
Зарегистрирован: 12.09.2012

У меня не просто точно такой же шилд, я еще и брал его у этого же продавана на ебее.

Подскажи плиз максимально подробно как что подлючено, как установлены джамперы, соединены ли платы между собой, если что-то просто проводами соединено - что куда идет и какой скетч залит.

Желательно подключить к меге, хотя на крайняк распиновка для мини про тоже подойдет.

Еще имеется efcom module http://www.elecfreaks.com/5164.html , я его подключил напрямую к компу, на команды отвечает. 

А этот даже напрямую не реагирует. Пробовал уже разные варианты. Сеть (МТС) видит, инициализируется, потом диод сетевой начинает мигать раз в три секунды как положено, но связи по com-порту нет.

У продавца на странице есть даташит, из которого более-менее понятно что к чему (хоть и на китайском языке комменты), но всё-равно ни в какую. Очень нужно разобраться.

Maverik
Offline
Зарегистрирован: 12.09.2012
 Пробовал, точно работает на Mega 2560 пины 10,11 и 50,51 (RX,TX). Точно не работают 2,3. Может кому-то поможет... Буду продолжать эксперименты

Кстати, 2,3 не работают, потому что на Мегах у этих пинов не может быть прервываний, вот тут об этом писали http://devicter.blogspot.ru/2012/03/icomsat-grps-shield.html .  По той же причине не работает эта плата вставленной в шилд, если шилд НЕ уно - ведь у нее rx и tx выведены принудительно на 2, 3 пины.  Но вот как ее завести, хоть примерно расскажи пока, не хоцца до понедельника ждать ))

dardik
Offline
Зарегистрирован: 09.03.2013

Хорошо, я в понедельник отвечу, сфотографирую, как у меня, и выложу сюда, и пример скетча тоже. Подсоединял к Меге, долго возился, никто не знал как его подсоединять. Удалось сделать так, что он становится сверху меги, но 2 вывода на нем, я отогнул, чтобы все получилось. Работает на скорости 9600 (другие скорости не удалось установить). Подключал на 50, 51 пины. Перемычки на софтваре обе. Более подробно в понедельник.

PS. По моему отогнул на шилде я пины 2 и 3, но точно не помню, и с этих пинов, которые отогнул, проводами завел на 50,51 пины ардуино.

Скетч для проверки работоспособности - можешь посылать в него АТ команды с сериал монитора...

/*
  Software serial multple serial test
 
 Receives from the hardware serial, sends to software serial.
 Receives from software serial, sends to hardware serial.
 
 The circuit:
 * RX is digital pin 10 (connect to TX of other device)
 * TX is digital pin 11 (connect to RX of other device)
 
 Note:
 Not all pins on the Mega and Mega 2560 support change interrupts,
 so only the following can be used for RX:
 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69
 
 Not all pins on the Leonardo support change interrupts,
 so only the following can be used for RX:
 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
 
 created back in the mists of time
 modified 25 May 2012
 by Tom Igoe
 based on Mikal Hart's example
 
 This example code is in the public domain.
 
 */
#include <SoftwareSerial.h>

SoftwareSerial mySerial(50, 51); // RX, TX

void setup()  
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
//  while (!Serial) {
 //   ; // wait for serial port to connect. Needed for Leonardo only
 // }


  Serial.println("Goodnight moon!");

  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
  mySerial.println("Hello, world?");
}

void loop() // run over and over
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

 

Maverik
Offline
Зарегистрирован: 12.09.2012

Спасибо, буду ждать

Я правильно понимаю, что в этом варианте с шилдом ты общаешься через uart ардуины, т.е.  через тот же виртуальный com-порт куда подключена сама ардуинка ?

Maverik
Offline
Зарегистрирован: 12.09.2012

Вроде зачирикала по твоему способу НО только после того, как добавил ей внешнее питание (12v 1A) через Мегу. 

Это не очень радует, т.к. такую напругу моя мега 2560 не очень любит, стабилизатор греется шописец.

Вообще вариант с отогнутыми ногами 2,3 адский, я даже не представляю как ты до этого додумался, респект! 

Причем сеть находит только будучи воткнутой в мегу. Пробовал отделить шилд и подавать на него питание отдельно (на ноги Vin Gnd) - светодиод даже не загорается. такое впечатление что Vin на шилде тупо не распаяна, а подавать 12 вольт на 5ти вольтовую ногу что-то совсем не хочется.

Еще задача снизить скорость хотябы да 4800, для GPRS рекомендуют не выше.

dardik
Offline
Зарегистрирован: 09.03.2013

У меня работает даже если питается от УСБ компа мега+шилд. В таком варианте пробовал и звонить на нее и с нее звонить и смс на нее отправлять и с нее смс отправлять. Сигнал GSM сети был хороший, может если плохой сигнал и нужно большее питание. GPRS не пробовал, может для него тоже питание нужно побольше.

Maverik
Offline
Зарегистрирован: 12.09.2012

Ты главное выложи скетч хотябы для смс. Беру готовые примеры, вижу что там SoftsareSerial.h уже подключена, но не совсем понятно где номера пинов указывать (50, 51) ?  В  GSM.h что-ли вместо 2 и 3 ?

А то что скорость порта не меняется с 9600, подозреваю это из-за первых строк в файле HwSerial.cpp , а именно:

#ifdef MEGA
	HWSerial::HWSerial(){
			Serial1.begin(9600);

И то же самое в GSM.cpp:

#ifdef MEGA
GSM::GSM(){
	_cell.begin(9600);
};
#endif

Вообще, если можно, черкани пожалуйста свой какой-нибдь контакт- скайп или еще чего.

По питанию - у меня тоже судя по мигающим светодиодам работает всё ок, и в рабочий режим выходит через 3 сек, но только после запуска скетча. Если же просто подпитаться от усб и нажать кнопку power на шилде, то сеть не находит - просто пять раз мигает диод "сеть" и шилд отключается- горит только питание. Если же подпитаться хотябы от 9в 850 ма через внешнее питание меги, то при нажатии кнопки power шилд находит сеть без каких-либо скетчей в меге.

dardik
Offline
Зарегистрирован: 09.03.2013

Как и обещал, вот скетч для отправки смс и фото.




#include <SoftwareSerial.h>

SoftwareSerial mySerial(50, 51); // RX, TX


void send_sms(String sms_number, String sms_text) {
    
   delay(1500);
   mySerial.print("AT+CMGS="); // send the SMS the number
   mySerial.print((char)34); // передача в порт символа "
   mySerial.print((String)sms_number); // передача номера телефона
   mySerial.print((char)34); // передача в порт символа "
   mySerial.print((char)13);
   delay(1500);
 
   mySerial.println((String)sms_text); // передача текста сообщения
   delay(500);
   mySerial.print((char)26); // передача ^Z
   mySerial.print((char)13); // передача Enter
}


void setup()  
{
  Serial.begin(9600);
    mySerial.begin(9600);
    mySerial.println("AT+CMGF=1"); // выставляем текстовым режим сообщений
  delay(100);

    mySerial.print("AT+CSCS=");
    mySerial.print((char)34);  // передача в порт символа "
    mySerial.print("IRA");
    mySerial.print((char)34);   // передача в порт символа "
    mySerial.print((char)13);   // передача в порт Enter
    send_sms("**********","test"); //вместо звездочек ставим свой номер мобильного;
}

void loop() // пустой цикл
{

 

}

 

Maverik
Offline
Зарегистрирован: 12.09.2012

Спасибо.  

Вот здесь используется тот же шилд, только не с мегой а с мини про http://arduino.ru/forum/proekty/gsm-signalizatsiya#comment-49964  но там через библиотеку gsm.  Мой шилд так работать отаказывается. 

И еще - удалось ли реализовать программное включение шилда ?

dardik
Offline
Зарегистрирован: 09.03.2013

Да, программное включение шилда реализовать удалось, достаточно добавить 4 строки:

digitalWrite(8, HIGH);
delay(1200);
digitalWrite(8, LOW);
delay(10000);

В итоге, если взять предыдущий скетч, получим (автоматическое включение шилда и отправка смс):

#include <SoftwareSerial.h>
	 
	SoftwareSerial mySerial(50, 51); // RX, TX
	 
	 
	void send_sms(String sms_number, String sms_text) {
	     
	   delay(1500);
	   mySerial.print("AT+CMGS="); // send the SMS the number
	   mySerial.print((char)34); // передача в порт символа "
	   mySerial.print((String)sms_number); // передача номера телефона
	   mySerial.print((char)34); // передача в порт символа "
	   mySerial.print((char)13);
	   delay(1500);
	  
	   mySerial.println((String)sms_text); // передача текста сообщения
	   delay(500);
	   mySerial.print((char)26); // передача ^Z
	   mySerial.print((char)13); // передача Enter
	}
	 
	 
	void setup() 
	{
digitalWrite(8, HIGH);
delay(1200);
digitalWrite(8, LOW);
delay(10000);
	  Serial.begin(9600);
	    mySerial.begin(9600);
	    mySerial.println("AT+CMGF=1"); // выставляем текстовым режим сообщений
	  delay(100);
	 
	    mySerial.print("AT+CSCS=");
	    mySerial.print((char)34);  // передача в порт символа "
	    mySerial.print("IRA");
	    mySerial.print((char)34);   // передача в порт символа "
	    mySerial.print((char)13);   // передача в порт Enter
	    send_sms("**********","test"); //вместо звездочек ставим свой номер мобильного;
	}
	 
	void loop() // пустой цикл
	{
	 
	  
	 
	}

 

revolt
Offline
Зарегистрирован: 03.01.2014

тоже заморочился этой связкой, никак не запустится.кстати,вместо отгибания 2,3 пинов можно было просто снять перемычки на шилде с TX,RX и проводок вставить напрямую в ножки RX,TX соответственно(точнее перекрестно).ну это дело хозяйское.поставил задачу работать с шилдом посредством не програмного порта,а аппаратного,у них и скорость возможна до 115200,в отличии от програмного.вопрос в том как это реализовать в самом скече.бьюсь над этим,и не сдамся пока из всей этой лабуды не сделаю толковую GSM сигнализацию,со всеми датчиками :) долго в нэте копаюсь,перерыл много,и вот наткнулся сюда,и хотелось бы вместе добится результатов.мой скайп niobar888 . на меге програмные порты для RX : 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69. и может кто сталкивался, почему в терминал мониторе вместо нормального шрифта появляются какието крокозябры, как это исправить,и вообще проблема в самой консоли,или в винде что то? а шилд может питатся и от юсб,но именно во время работы с GSM сетью может потреблять и до 3А,поэтому все же лучше отдельный блок.

dardik
Offline
Зарегистрирован: 09.03.2013

У меня получилось подсоеденить через аппаратный порт на меге. В скетче нужно прописать:

HardwareSerial & gprsSerial = Serial1;

и цеплять те же ноги шилда на аппаратные порты меги -  Serial1 на портах 19 (RX) и 18 (TX). Обращаться к шилду после этого следует через gprsSerial, например проверка уровня сигнала: gprsSerial.println("AT+CSQ");

По поводу кракозябр - мне удалось получать нормальные символы в сериал монитор на этом шилде только на скорости 9600. Хотя этой скорости вполне достаточно для нормальной работы сигнализации.

Попробуйте для нормального отображения в сериал мониторе прописать в скетче gprsSerial.begin(9600); Serial.begin(9600);

revolt
Offline
Зарегистрирован: 03.01.2014

спасибо за помощь,самому никак не понять,крыша чуть не едет ) контакты соеденил(TX-RX,RX-TX). пытался прописать все как сказали, но конечно ничего не смог.если можно на примере скеча все это показать,пожалуйста.(чтобы не думали,вот какой тугодум,я в операторах и коде вообще нини,знаю только азы,а все это изучу но на практике,для этого мне просто нужен начальный стартовый рабочий скеч, и вот с него начну изучать,добавлять/удалять).и еще есть вопрос: допустим вы мне дали скеч,а для его записи в контроллер понадобятся определенные библиотеки или нет, библиотеки стандартные для всех скечей?

dardik
Offline
Зарегистрирован: 09.03.2013

Вот скетч, работающий с аппаратным портом ардуино мега. В сериал мониторе можно давать AT команды для GSM модуля и получать ответ. Цеплять те же ноги шилда на аппаратные порты меги -  Serial1 на портах 19 (RX) и 18 (TX)

HardwareSerial & mySerial = Serial1;

void setup()  
{
  Serial.begin(9600);
  mySerial.begin(9600);
  Serial.println("Goodnight moon!");
  mySerial.println("Hello, world?");
}

void loop() 
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

 

revolt
Offline
Зарегистрирован: 03.01.2014

спасибо,все более менее проясняется. в данном примере пишет "serial1"was not declared in this scope, как объявить serial1?

dardik
Offline
Зарегистрирован: 09.03.2013

Странно, у меня нормально компилируется, скорее всего вы serial1 указали с маленькой буквы, а надо с большой - Serial1. Это важно.

revolt
Offline
Зарегистрирован: 03.01.2014

я как есть скопировал из вашего примера и вставил в иде и нажал аплоуд,все.может какой библиотеки нехватает,или еще чего?

dardik
Offline
Зарегистрирован: 09.03.2013

А какая версия программы? У меня все нормально на 1.0.5. тут стандартные библиотеки...

revolt
Offline
Зарегистрирован: 03.01.2014

Я как то копался во время экспериментов в этих библиотеках и видимо что то изменил что забыл, сейчас удалил и заново установил 1.0.5 и все получилось ! ) все клас! спасибо дружище! это был хороший толчок в нужном направлении ! я буду обращатся по мере надобности, в крайнем случае, не против? да,и личный немного вопрос, а что делаете,или уже сделали из этой связки? очень интересно узнать 

dardik
Offline
Зарегистрирован: 09.03.2013

Конечно, форум для этого и создан. Я делаю GSM сигнализацию. Почти доделал, осталось немного - энергоэффективность. Пытаюсь добиться наименьшего энергопотребления сигнализации. На данный момент я написал программу на Android и с помощью телефона управляю сигнализацией (постановка и снятие с охраны, прослушивание периметра) и узнаю параметры (баланс на сим карте сигнализации, контроль периметра, температура, уровень сигнала GSM, заряд аккумулятора, от которого питается сигнализация). В планах на будущее -  возможность делать фото нарушителя и отослать на телефон или на сайт.

revolt
Offline
Зарегистрирован: 03.01.2014

вот это,кого называют творческий человек! а уменя задача стоит сделать сигнализацию и управление тверд.топл.котлом,и пож.сигнализацию туда,ну и освещение и управление штор )) может поскажете сайты где есть помощь в этом направлении,практические примеры желательно.вы молодец! сказать честно восхищаюсь людьми которые голову используют по назначению,а не только что бы туда пить и есть ) хорошая работа!

dardik
Offline
Зарегистрирован: 09.03.2013
revolt
Offline
Зарегистрирован: 03.01.2014

ух,замечательные статьи.руки чешутся начать!но дела есть и нужно бежать.похоже с занятием на ночь я определился ) спасибо огромное !

revolt
Offline
Зарегистрирован: 03.01.2014

помогите разобратся со следующей ситуацией,проверяются датчики 1-wire,в мониторе все пишется как надо,нужно что бы по определенному(в данном случае "#") символу во входящей смс,отреагировал ответным смс с температурами.в моем случае,запускается,ждем 20сек,начинают циклировать данные в мониторе,и через 5 сек после этого мне приходит смс "-127.00"

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 3

OneWire oneWire(ONE_WIRE_BUS);
 
DallasTemperature sensors(&oneWire);

DeviceAddress domC = { 0x28, 0xF7, 0x72, 0x46, 0x05, 0x00, 0x00, 0xDB };
DeviceAddress ulicaC = { 0x28, 0x6B, 0xDF, 0xDF, 0x02, 0x00, 0x00, 0xC0 };
DeviceAddress kotelC = { 0x28, 0x59, 0xBE, 0xDF, 0x02, 0x00, 0x00, 0x9F };

char inchar;
float tempC;

void setup(void)
{
  Serial.begin(9600);
  Serial1.begin(9600);
  Serial1.print("AT+CMGF=1\r");
  delay(1000);
  Serial1.println("AT+CNMI=3,0,0,0\r");
  delay(1000);
  sensors.begin();
  sensors.setResolution(domC, 10);
  sensors.setResolution(ulicaC, 10);
  sensors.setResolution(kotelC, 10);
}

void printTemperature(DeviceAddress deviceAddress)
{
  tempC = sensors.getTempC(deviceAddress);
  if (tempC == -127.00) {
    Serial.print("Error getting temperature");
  } else {
    Serial.print("C: ");
    Serial.print(tempC);
    Serial.print(" F: ");
    Serial.print(DallasTemperature::toFahrenheit(tempC));
    
  }
}

void loop(void)
{ 
  delay(20000);
  Serial.print("Getting temperatures...\n\r");
  sensors.requestTemperatures();
  
  Serial.print("Doma: ");
  printTemperature(domC);
  Serial.print("\n\r");
  Serial.print("Ha ylice: ");
  printTemperature(ulicaC);
  Serial.print("\n\r");
  Serial.print("Kotel: ");
  printTemperature(kotelC);
  Serial.print("\n\r\n\r");
  if(Serial1.available() >0) // насколько я понял считывает смс,возможно в этом проблема
    { 
      inchar=Serial1.read();     
      if (inchar=='#')
      {
        sendSMS();
      }
    }
}

void sendSMS()
{      
  Serial1.println("AT+CMGS=\"+380660830000\"\r");
  delay(1000);
  Serial1.println(tempC);
  delay(1000);
  Serial1.println((char)26);
  delay(1000);
  Serial1.println("AT+CMGD=1,4\r"); 
  Serial1.flush();
}

 

Life23
Offline
Зарегистрирован: 10.08.2013

http://arduino.ru/forum/programmirovanie/pomogite-novichku-dopisat-kod?page=5#comment-40099 посмотрите код в последнем посте. Поправьте под себя и пользуйтесь. 

abt06
Offline
Зарегистрирован: 13.07.2013

Коллеги, возник вопрос...

исходники: Мега 2560 + модуль SIM900. Раньше связка работала великолепно. Через некоторое время решил взяться заново. все подключил, внешний источник 3А, TX RX кинул на 50 и 51 ноги.

идея в том, что при инициализации модема он находит сеть и вроде как ее держит, но стоит попробовать дозвониться до модема, он сразу начинает ее поиск опять - начинает моргать синий светодиод часто. При отправке СМС - вообще не видит ее.

такое ощущение, что нет связки между Ардуино и модемом...

откидывал ноги 2,3. вообще перестает соединяться с ардуино.  пишет нет ответа от Ардуино. перемычки скинуты. проброшены провода на 50 и 51.

В чем подвох??

Danila
Offline
Зарегистрирован: 16.05.2013

скорей всего питание, была такая же тема, попробуй помощней источник подключить!

abt06
Offline
Зарегистрирован: 13.07.2013

ок, попробую - спасибо!! Подозревал, что может быть такое. но как то надпись 3А меня успокаивала, потому как народ говорил, что работало и без БП

abt06
Offline
Зарегистрирован: 13.07.2013

Поставил блок питания на 8А. не помогло (( Поменял сечение проводов питания. Самое интересное, что после звонка модем пытается поймать сеть снова, и все безуспешно, пока не выдернешь провод идущий на TX. тогда он сразу устанавливает соединение и светодиод начинает моргать раз в 3 секунды. Но как только делаю звонок на модем сразу же как только происходит соединение с модемом, он теряет соединение. При отправке сообщений, ничего не происходит ни с модема ни на модем. Подозреваю, что мог когда то изменить настройки режима работы модема (прием только СМС, прием только звонков, помнится что то пытался изменить в настройках UART).

Есть возможность произвести сброс до заводских настроек? путем отключения просто аккумулятора, понятное дело успеха не принесло.

 

gena
Offline
Зарегистрирован: 04.11.2012

Почитайте о командах -  ATZ0, AT&F.

abt06
Offline
Зарегистрирован: 13.07.2013

К сожалению, идея пока не получила своего результата.

по прежнему есть проблема - при установлении соединения модема с Ардуино все протекает хорошо, потому как монитор выдает результаты соединения и выдает результат опроса нужных выходов. При попытке соединения со звонком, сразу происходит потеря связи между станцией и модемом - начинает мигать модем часто. Восстановить соединение можно только если отключить провод от вывода 50 Меги, т.е. ТХ. Пробую отправить команды через монитор или Hyper Terminal ничего не происходит. До этого вспоминаю, было что то похожее, тогда решилось путем подвязки резистора (4,7 кОм) между выводом 50 Меги (ТХ) и +5 вольт. Сейчас не работает. при любом звонке сразу происходит потеря связи Модем - Станция. Не знаю куда и смотреть.... подумываю, что может что то навернулось в модеме. Может у кого есть какие мысли еще?

Может я не правильно коннектюсь к модему для отправки команд? Модем вообще не видет мои команды. ((((

abt06
Offline
Зарегистрирован: 13.07.2013

проблема оказалась в битой плате Меги. Поставил на другую Мегу... все закрутилось как нужно... спасибо за помощь всем.

Deep Sky
Offline
Зарегистрирован: 12.10.2014

Здравствуйте. купил такой шилд: 

http://www.ebay.com/itm/331221837047?_trksid=p2059210.m2749.l2649&ssPage...

подключил его по правилу к Мегу 2560

использую такой симпл код для проверки: но не получаю ничего и в окне мониторинга программы ничего не пишет. помогите пожалуйста...

#include <SoftwareSerial.h>
 
SoftwareSerial gprsSerial(22, 25); //22-RX connected to D8-TX of GSM module
                                   //25-TX connected to D7-RX of GSM module
 
void setup()
{
    gprsSerial.begin(19200);
    delay(500);
    pinMode(21, INPUT);
}
 
void loop()
{
  int val = digitalRead(21);
  if (val==HIGH){
        //сразу после нажатия кнопки отправляем "HELLO" сообщение по заданному номеру
        sendTextMessage();
        delay(5000);
  }
}
 
/*
 * Функция отправки SMS-сообщения
 */
void sendTextMessage() {
    // Устанавливает текстовый режим для SMS-сообщений
    gprsSerial.print("AT+CMGF=1\r");
    delay(100); // даём время на усваивание команды
    // Устанавливаем адресата: телефонный номер в международном формате
    gprsSerial.println("AT + CMGS = \"+994554076939\"");
    delay(100);
    // Пишем текст сообщения
    gprsSerial.println("HELLO");
    delay(100);
    // Отправляем Ctrl+Z, обозначая, что сообщение готово
    gprsSerial.println((char)26);
}

 

gena
Offline
Зарегистрирован: 04.11.2012

  Попробуйте, для начала, добиться от шилда ответ на простую команду   AT.

RomeoTer
Offline
Зарегистрирован: 12.08.2013
08 gprsSerial.begin(9600);

Скорость поменять и пожалуй должно заработать

 

Kirows
Offline
Зарегистрирован: 24.10.2014

Всем привет!

Имеется Funduino MEGA2560 и Icomsat v1.1.

Все свои мучения с ним пересказывать не буду, поделюсь только последними результатами. 

AT команды в Serial Monitor получить не удалось. В данный момент RX,TX висит на 50,51 выходах.

Залит код

#include <SoftwareSerial.h>

SoftwareSerial mySerial(50, 51);

void setup()
{
  Serial.begin(9600);          
  mySerial.begin(9600);              
}
void loop()
{
  if (Serial.available())
  mySerial.write(Serial.read());

  if (mySerial.available())
    Serial.write(mySerial.read());  

}

При совершении любых действий с шилдом(звонки,смс,вкл/выкл), он в мониторе отображает что произошло. Смс с него отправлял и принимал(зажигание светодиода) в слепую.  Никаких AT туда отправлять не хочет. Для первого if пробовал добавлять else, срабатывает только оно(else). Учитывая что в меге простого Serial нет, то видимо чтото нужно сделать по другому, но что, лично мне непонятно :( 

ОЧЕНЬ нужен Serial monitor.

Натолкните на путь истинный, люди добрые.