At httpinit error

I want to send data to my php server using sim900 module but I am unable to initialize http service on sim900. code: #include SoftwareSerial gprsSerial(8, 9); void setup...

I want to send data to my php server using sim900 module but I am unable to initialize http service on sim900.

code:

#include <SoftwareSerial.h>
SoftwareSerial gprsSerial(8, 9);

void setup()
{
  gprsSerial.begin(9600);
  Serial.begin(9600);

  Serial.println("Con");
  delay(2000);
  Serial.println("Done!...");
  gprsSerial.flush();
  Serial.flush();


  // See if the SIM900 is ready
  gprsSerial.println("AT");
  delay(1000);
  toSerial();

  // SIM card inserted and unlocked?
  gprsSerial.println("AT+CPIN?");
  delay(1000);
  toSerial();

  // Is the SIM card registered?
  gprsSerial.println("AT+CREG?");
  delay(1000);
  toSerial();

  // Is GPRS attached?
  gprsSerial.println("AT+CGATT?");
  delay(1000);
  toSerial();

  // Check signal strength
  gprsSerial.println("AT+CSQ ");
  delay(1000);
  toSerial();

  // Set connection type to GPRS
  gprsSerial.println("AT+SAPBR=3,1,"Contype","GPRS"");
  delay(2000);
  toSerial();

  // Set the APN
  gprsSerial.println("AT+SAPBR=3,1,"APN","web"");
  delay(2000);
  toSerial();

  // Enable GPRS
  gprsSerial.println("AT+SAPBR=1,1");
  delay(10000);
  toSerial();

  // Check to see if connection is correct and get your IP address
  gprsSerial.println("AT+SAPBR=2,1");
  delay(2000);
  toSerial();

}


void loop()
{
   // initialize http service
   gprsSerial.println("AT+HTTPINIT");
   delay(2000); 
   toSerial();

   // set http param value
   // ToDO : send dynamic value
   gprsSerial.println("AT+HTTPPARA="URL","http://www.fohoraayo.000webhostapp.com/?lat=1111&lon=1111"");
   delay(4000);
   toSerial();

   // set http action type 0 = GET, 1 = POST, 2 = HEAD
   gprsSerial.println("AT+HTTPACTION=0");
   delay(6000);
   toSerial();

   // read server response
   gprsSerial.println("AT+HTTPREAD"); 
   delay(1000);
   toSerial();

   //gprsSerial.println("");
   gprsSerial.println("AT+HTTPTERM");
   toSerial();
   delay(300);

   gprsSerial.println("");
   delay(10000);
}

void toSerial()
{
  while(gprsSerial.available()!=0)
  {
    Serial.write(gprsSerial.read());
  }
}

output:

Config SIM900...
Done!...
AT

OK
AT+CPIN?

+CPIN: READY

OK
AT+CREG?

+CREG: 0,1

OK
AT+CGATT?

+CGATT: 1

OK
AT+CSQ 

+CSQ: 31,0

OK
AT+SAPBR=3,1,"Contype","GPRS"

OK
AT+SAPBR=3,1,"APN","web"

OK
AT+SAPBR=1,1

ERROR
AT+SAPBR=2,1

+SAPBR: 1,1,"xx.xxx.x.x"

OK
AT+HTTPINIT

ERROR
AT+HTTPPARA="URL","http://www.fohoraayo.000webhostapp.com/?lat=AT+HTTPACTION=0

ERROR
AT+HTTPREAD

ERROR
AT+HTTPTERM

ERROR

Предшествующие материалы: GSM модем SIM900, AT-команды GSM модема SIM900.

В продолжение серии статей по GSM модему SIM900, а точнее по его AT командам, расскажу, как работать с GPRS его составляющей.

GSM GPRS модуль SIM900

GSM GPRS модуль SIM900

Модуль всё также подключен через UART. В него установлена SIM карта, он видит сеть, на нём есть деньги, оператор поддерживает GPRS соединение и эта услуга включена.

Не забывайте, что неправильно настроенный GPRS или большой трафик по лимитному тарифу может влететь в копеечку.
Приступим.

Настройка GPRS соединения

Настройки GPRS подключения и само подключение к интернету производиться через одну команду AT+SAPBR с множеством параметров.

Количество входных параметров может доходить до 4-х:

1 параметр — тип выполняемой операции

  • 0 – закрыть соединение
  • 1 – открыть соединение
  • 2 – запросить сведения о соединение
  • 3 – передать параметры соединения
  • 4 – запросить параметры соединения
  • 5 – сохранить настройки в энергонезависимую память модуля

2 параметр – CID или идентификатор профиля

Оставшиеся 2 параметра могут применять различные значения в зависимости от запроса.

Команда

Описание

AT+SAPBR=1,1
OK
Устанавливаем GPRS соединение
AT+SAPBR=2,1
+SAPBR: 1,1,»xxx.xxx.xxx.xxx»
OK
Получаем сведения о соединении и IP адрес
В ответе:
Второй параметр:
0 – соединение устанавливается
1 – соединение установлено
2 – соединение закрывается
3 – нет соединения
Третий параметр – IP адрес
AT+SAPBR=0,1
OK
Закрываем GPRS соединение
AT+SAPBR=3,1,»CONTYPE»,»GPRS»
OK
AT+SAPBR=3,1,»APN»,»internet.mts.ru»
OK
AT+SAPBR=3,1,»USER»,»mts»
OK
AT+SAPBR=3,1,»PWD»,»mts»
OK
Установка настроек подключения
CONTYPE – тип подключения GPRS или CSD
APN – точка подключения
USER – имя пользователя
PWD – пароль
PHONENUM – номер телефона (для CSD)
RATE – скорость соединения (для CSD)
AT+SAPBR=4,1
+SAPBR:
CONTYPE: GPRS
APN: internet.mts.ru
PHONENUM:
USER: mts
PWD: mts
RATE: 2
OK
Узнать текущие настройки подключения

Настройки GPRS автоматически не сохраняются в памяти модуля, но текущие настройки можно сохранить командой – AT+SAPBR=5,1.

Модуль позволяет использовать не только GPRS соединение для выхода в интернет, но и осуществлять передачу данных напрямую между модулями, но это рассматривать не буду.

Пример запроса для настройки GPRS соединения и подключения к итеренету:

AT+SAPBR=3,1,"CONTYPE","GPRS"
OK
AT+SAPBR=3,1,"APN","internet.mts.ru"
OK
AT+SAPBR=3,1,"USER","mts"
OK
AT+SAPBR=3,1,"PWD","mts"
OK
AT+SAPBR=1,1
OK

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

Во время нахождения в Интернете можно производить следующие операции: читать страницы (осуществлять html запросы), посещать ftp, со всеми вытекающими последствиями, обмениваться TCP и UDP пакетами, проверять электронную почту (требуется специальная прошивка, читайте в следующих статьях) и возможно многое другое. Начнём по порядку.

HTML запросы

Команда

Описание

AT+HTTPINIT
OK
Инициализация http сервиса
AT+HTTPPARA=»CID»,1
OK
Установка CID параметра для http сессии
AT+HTTPPARA=»URL»,»https://alex-exe.ru/links/links.html»
OK
Указание адреса страницы
AT+HTTPACTION=0
OK
Старт сессии, на обмен данными данных
Параметр, метод запроса:
0 – GET
1 – POST
2 – HEAD
+HTTPACTION:0,200,1647 Возвращаются данные о запрошенной страницы:
Первый параметр – тип запроса, с.м. предыдущий пункт
Второй параметр – HTTP код – статус о выполнение операции или код ошибки
100 – соединение
200 – Ок
204 – нет контента
404 – страницы не найдено
Третий параметр – размер доступных данных (байт)
AT+HTTPREAD Чтение данных
Первый параметр – адрес, с которого начать чтение
Второй параметр – количество байт, которые нужно прочитать
+HTTPREAD:1647
……………………..
В ответ приходит информация о количестве прочитанных байт и прочитанные данные
AT+HTTPDATA=10,10000
DOWNLOAD
1234567890

OK

Передача данных HTTP серверу
Первый параметр – количество передаваемых байт
Второй параметр – время ожидания данных, загружаемых в UART
После отправки команды вернётся сообщение DOWNLOAD – приглашение на ввод данных. После удачной передачи данных вернётся OK, иначе error.
AT+HTTPTERM
OK
Завершить работу HTTP службы

Пример HTTP запроса:

AT+HTTPINIT
OK
AT+HTTPPARA="CID",1
OK
AT+HTTPPARA="URL","https://alex-exe.ru/links/links.html"
OK
AT+HTTPACTION=0
OK
+HTTPACTION:0,200,1647
AT+HTTPREAD
+HTTPREAD:1647
<html>
<head>
<title>Alex_EXE - Сайты</title>
<link rel="StyleSheet" href="http://alex-exe.net.ru/wp-content/themes/redplanet-10/style.css" type="text/css"/>
</head>
<body>
<center>
<table border=1 cellspacing=0 cellpadding=0>
………………………………………………………
</html>
OK
AT+HTTPTERM
OK

В запросе: сначала на модуле запускаем HTTP службу, далее указываем страницу с которой будем работать. Работать со страницей можно по разному: можно только узнать, существует ли она и её размер (HEAD), можно передать данные (POST), а можно, банально, прочитать (GET), что и продемонстрировано в примере. После указания своих намерений и получения ответа в виде существования страницы и её размера можем приступить к её чтению. По завершению работы закрываем HTTP службу.

FTP запросы

Команда

Описание

AT+FTPCID=1
OK
Установка CID параметра FTP сессии
AT+FTPSERV=»xxx.xxx.xxx.xxx»
OK
Адрес ftp сервера
из 32 бит формата xxx.xxx.xxx.xxx или в виде текстовой ASCII строки, длиной до 49 символов.
AT+FTPUN=»anonymous»
OK
AT+FTPPW=»password»
OK
Аутентификация на сервере
AT+FTPGETNAME=»README»
OK
Имя файла
AT+FTPGETPATH=»/pub/site/»
OK
Путь к файлу
AT+FTPGET=1
OK
+FTPGET:1,1
Открыть FTP сессию для получения данных
Параметр указывает – на открытие FTP сессии
В ответе возвращается:
первый параметр – см выше,
а второй параметр – состояние открытой сессии или код ошибки:
1 – сессия открыта
61 – нет подключения
64 – время сессии истекло
71 – неправильное им пользователя
72 – неправильно введен пароль
В случае успешно открытой сессии сообщение 1,1 будет возвращаться в течении всей сессии, каждые 2 секунды, пока сессия не будет закрыта или выйдет её ремя с кодом ошибки 1,64.
AT+FTPGET=2,1024
+FTPGET:2,175
……………………..
Чтение данных с FTP сервера
Первый параметр – указывает на чтение данных с FTP сервера
Второй параметр указывает на количество читаемых байт
AT+FTPPUT=1
+FTPPUT=1,1,1280
Открыть FTP сессию для отправки данных
Параметр указывает – на открытие FTP сессии
В ответе:
Первый параметр – см. выше
Второй параметр – состояние открытой сессии или код ошибки:
1 – сессия открыта
Третий параметр – в случае успешно открытой сессии – максимальное количество возможных принятых данных за одну сессию
AT+FTPPUT=2,100
+FTPPUT=2,100
……………………..
OK
Отправка данных
Первый параметр – указывает на отправку данных на FTP
Второй параметр – количество отправляемых данных
После подтверждение приёма команды нужно передать данные по UART
AT+FTPPUT=2,0
OK
Уведомляем сервер, что данных для передачи больше нет.
Или закрытие сессии по передаче данных на FTP сервер.

Пример FTP запроса:

AT+FTPCID=1
OK
AT+FTPSERV="149.20.4.69"
OK
AT+FTPUN="anonymous"
OK
AT+FTPPW="password"
OK
AT+FTPGETNAME="README"
OK
AT+FTPGETPATH="/pub/site/"
OK
AT+FTPGET=1
OK

+FTPGET:1,1
AT+FTPGET=2,1024
+FTPGET:2,175
This directory contains files related to the operation of the
kernel.org file itself.

The file sample_mirror_script.pl is a sample script for mirroring
kernel.org via rsync.

OK

В запросе зашли на FTP сервер ftp://kernel.org/ (можно зайти как по IP адресу, как в примере, а можно указать адрес в виде имени — kernel.org) под анонимным пользователем (имя и пароль для входа на открытые ресурсы по умолчанию). Указали имя файла, который собирались прочитать и путь к нему. Далее открыли FTP сессию и убедились, что всё сделали верно: интернет есть, сервер существует, путь к файлу и параметры аутентификации верны и файл доступен для чтения. Теперь, пока сессия не закончилась, мы можем прочитать доступный файл – читаем 1024 байта из файла. Прочитан весь файл в 175 байт и его содержимое выведено в терминал.

.

AT Command
Description

AT+HTTPINIT AT command initializes the HTTP service. This is a proprietary Simcom AT command.This command should be sent first before starting HTTP service.

Support Simcom Module Tutorial
Examples

AT+HTTPINIT
OK

Keywords AT+HTTPINIT syntax, examples, parameters, error, input, response.

AT+HTTPINIT function is used to initialize the HTTP service for Simcom modules.
With Online AT Command Tester tool, you can test Simcom HTTP feature.

Send batch of AT commands in the script mode,

//Check the registration status
AT+CREG?

//Check whether bearer 1 is open.
AT+SAPBR=2,1

//Enable bearer 1
AT+SAPBR=1,1

//Wait untial bearer is activated
WAIT=6

//Initialize HTTP service
AT+HTTPINIT

//Set the HTTP URL
AT+HTTPPARA="URL","https://www.m2msupport.net/m2msupport/http_get_test.php"

//Set the context ID
AT+HTTPPARA="CID",1

//Set up the HTTP action
AT+HTTPACTION=0

//Do a HTTP read
AT+HTTPREAD

//Wait for the HTTP response
WAIT=6

//Terminate the HTTP service
AT+HTTPTERM

В текущей статье рассмотим как с помощью GSM модуля SIM800L и платы Arduino UNO R3 отправлять данные на Ваш сайт. Будем отправлять изменения состояния магнитного датчика (геркона), изменилось состояние датчика отправили сайт время и состояние датчика. Получится прототип сигнализации и ведением журнала на открывание/закрываение двери или окна. Для работы нам дополнительно понадобится наличие своего сайта с возможностью работы с PHP.

Постановка задачи

  • Мониторить состояние магнитоного датчика (геркона) и при изменении его состояния отправлять на сайт время и состояние датчика
  • На сайте сохранять принятые данные в файл журнала

Подготовка и подключение

  1. Собираем устройство согласно схеме на картинке
    Схема подключения SIM800L и датчика геркона к Arduino
    Учитывая, что напряжение уровней модуля должны быть 2.8В, то следует сделать делители напряжений для контактов идущих от RX/TX модуля к 2,3-му на Ардуине. В моем случае работало без проблем и так.
  2. Заливаем в Arduino скетч. Вместо сайта «mysite.ru» вписывайте свой адрес сайта
  3. Создаем файл PHP скрипта и закачиваем его на сервер

Скетч (для клиента)

#include <SoftwareSerial.h>
SoftwareSerial GSMport(2, 3); // RX, TX
int char_;
int SensorPin = 10;
int SensorState;
int SensorLastState = HIGH;

void setup() {
delay(3000); //дадим время на инициализацию GSM модулю   pinMode(SensorPin, INPUT);   digitalWrite(SensorPin, HIGH); //вкл. подтягивающий резистор 20ом   Serial.begin(9600); //скорость порта   Serial.println("GPRS test");   GSMport.begin(9600);   gprs_init(); } void loop() {   SensorState = digitalRead(SensorPin);   if (SensorState != SensorLastState) { //если смена состояния датчика     Serial.print("sensor changed to: ");     Serial.println(SensorState);     SensorLastState = SensorState;     gprs_send(String(SensorState));     delay(100);   }   if (GSMport.available()) { //если GSM модуль что-то послал нам, то     Serial.println(ReadGSM()); //печатаем в монитор порта пришедшую строку   }   delay(100); } void gprs_init() { //Процедура начальной инициализации GSM модуля   int d = 500;   int ATsCount = 7;   String ATs[] = { //массив АТ команд     "AT+SAPBR=3,1,"CONTYPE","GPRS"", //Установка настроек подключения     "AT+SAPBR=3,1,"APN","internet.tele2.ru"",     "AT+SAPBR=3,1,"USER","tele2"",     "AT+SAPBR=3,1,"PWD","tele2"",     "AT+SAPBR=1,1", //Устанавливаем GPRS соединение     "AT+HTTPINIT", //Инициализация http сервиса     "AT+HTTPPARA="CID",1" //Установка CID параметра для http сессии   };   int ATsDelays[] = {6, 1, 1, 1, 3, 3, 1}; //массив задержек   Serial.println("GPRG init start");   for (int i = 0; i < ATsCount; i++) {     Serial.println(ATs[i]); //посылаем в монитор порта     GSMport.println(ATs[i]); //посылаем в GSM модуль     delay(d * ATsDelays[i]);     Serial.println(ReadGSM()); //показываем ответ от GSM модуля     delay(d);   }   Serial.println("GPRG init complete"); } void gprs_send(String data) { //Процедура отправки данных на сервер   //отправка данных на сайт   int d = 400;   Serial.println("Send start");   Serial.println("setup url");   GSMport.println("AT+HTTPPARA="URL","http://mysite.ru/?a=" + data + """);   delay(d * 2);   Serial.println(ReadGSM());   delay(d);   Serial.println("GET url");   GSMport.println("AT+HTTPACTION=0");   delay(d * 2);   Serial.println(ReadGSM());   delay(d);   Serial.println("Send done"); } String ReadGSM() { //функция чтения данных от GSM модуля   int c;   String v;   while (GSMport.available()) { //сохраняем входную строку в переменную v     c = GSMport.read();     v += char(c);     delay(10);   }   return v; }

PHP скрипт (для сервера)

Сохраняем на сервере в файл index.php

<?php
  $ip = $_SERVER['REMOTE_ADDR']; //получаем IP адрес клиента
  $client = $_SERVER['HTTP_USER_AGENT']; //получаем идентификатор HTTP клиента
  $today = date("Y.m.d H:i:s"); //получаем текущие дату и время
  $f = fopen("log.csv","a"); //открываем файл для добавления данных
  $param = $_REQUEST['a']; //получаем значение посланной переменной "а"
  fwrite($f,"$today; $ip; $client; sensor=$paramrn-----------------rn"); //запись данных в файл
  fclose($f); //закрываем файл
?>
<p>GPRS data read page</p>

Проверка

Состояние SIM800L при установленном GPRS соединении

Подавать питание рекомендую сперва GSM модулю, потом соединять Ардуину с ПК. Включаем монитор порта и наблюдаем.

Инициализация

Должны пробежать двойные строчки с АТ командами. Если показываются по одной АТ команде, значит нет связи с SIM800L. После инициализации при успешном создании GPRS сеанса светодиод на GSM модуле начнет часто моргать.

GPRS test
GPRG init start
AT+SAPBR=3,1,"CONTYPE","GPRS"
AT+SAPBR=3,1,"CONTYPE","GPRS"

OK

AT+SAPBR=3,1,"APN","internet.tele2.ru"
AT+SAPBR=3,1,"APN","internet.tele2.ru"

OK

AT+SAPBR=3,1,"USER","tele2"
AT+SAPBR=3,1,"USER","tele2"

OK

AT+SAPBR=3,1,"PWD","tele2"
AT+SAPBR=3,1,"PWD","tele2"

OK

AT+SAPBR=1,1
AT+SAPBR=1,1

OK

AT+HTTPINIT
AT+HTTPINIT

OK

AT+HTTPPARA="CID",1
AT+HTTPPARA="CID",1

OK

GPRG init complete

Сработка датчика и отправка на сервер

Отправка через открытый GET запрос с передачей параметра в URL строке. Значение состояния датчика передаем через переменную «а». «?a=0» — передана переменная «а» со значением «0».

sensor changed to: 0
Send start
setup url
AT+HTTPPARA="URL","http://mysite.ru/?a=0

ERROR

GET url
AT+HTTPACTION=0

OK

Send done

+HTTPACTION: 0,200,26

Проверяем сервер

На сервере должен появиться файл со следующим содержимым:

2015.09.02 13:26:51; 176.59.197.176; SIMCOM_MODULE; sensor=0
-----------------
2015.09.02 13:27:14; 176.59.199.8; SIMCOM_MODULE; sensor=1
-----------------

Теперь вы можете самостоятельно сделать свой GPS трекер на авто или метео станцию со сбором данных.

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

На этом все. Вопросы и пожелания пишите в комментариях.

				
	
AT - Данную команду необходимо вводить при первом подключении к модулю. Основные команды AT+CCLK? - Вернет текущую дату и время. AT+CCLK="гг/мм/дд,чч:мм:сс+пп" - Ввод даты и время + часовой пояс. AT+GSV - Вернет данные о модуле, прошивке и серийном номере AT+CSQ - Вернет уровень приема сети от 0 до 31. 99 - нет сети. AT+COPS? - Вернет оператора к которому подключился модуль AT+CMGS="89161234567" "Enter" - Отправит SMS с текстом "Некий текст" на номер > Некий текст "Ctrl + Z" 89161234567 ATD89161234567; - Позвонит на номер 89161234567 (точка с запятой обязательно) ATD#102# - Узнать баланс. Работает с МТС и Билайн. С Мегафоном не работает. AT+CBC - Вернет уровень заряда батареи. (Как я понял в мВ) AT+CPOWD=0/1 - Выключит модуль. Если с 0, то просто выключает. Если с 1, то вернет сообщение о нормальном выключении. Команды для работы с HTTP Передача данных методом GET Если требуется передать на сервер какие-то данные и обработать их скриптом, то эти команды то что нужно. AT+HTTPINIT - Вернет Ок если нормально проинициализировалось. AT+HTTPPARA="URL","www.server.ru/script.php?data=param"- Что и куда будем передавать. AT+HTTPACTION=0 - Старт сессии (в этот момент модуль передаст данные на сервер). И вернет ответ от сервера. AT+HTTPREAD - Как я понял, должен прочитать данные с сервера. AT+HTTPTERM - Закрыть сессию. Получение/передача данных из/в файла из/в FTP сервера. AT+SAPBR=1,1 - Открытие GPRS соединения. AT+SAPBR=0,1 - Закрытие GPRS соединения. AT+SAPBR=2,1 - Запрос состояния GPRS соединения. Ответ: AT+SAPBR:<Идентификатор профиля>,<Состояние соединения>,"IP" <Идентификатор профиля> 0 - Закрыть соединение 1 - Открыть соединение 2 - Запрос соединения 3 - Установить параметры соединения 4 - Получить параметры соединения 5 - Сохранить значение параметров в NVRAM <Состояние соединения> 0 - Идет установка соединения 1 - Соединение установлено 2 - Соединение закрывается 4 - Соединение закрыто "IP" IP адрес присвоенный провайдером AT+FTPCID=1 Установка CID для FTP сессии AT+FTPSERV="www.server.ru" Адрес FTP сервера AT+FTPPORT=хххх Номер порта FTP сервера AT+FTPUN="login" Имя пользователя FTP сервера AT+FTPPW="password" Пароль для пользователя FTP сервера AT+FTPGETPATH="/" Директория в которой находится требуемый файл. AT+FTPGETNAME="file.txt" Имя файла котрый необходимо прочитать AT+FTPGET=1 Открытие FTP сессии для получения данных. Ответ: +FTPGET:<Режим>,<Ответ состояния> <Режим> 1 - Попытка открыть FTP сессию <Ответ состояния> 1 - Удачная открытая сессия. Ошибки: 61 - Ошибка сети (Нед подключения) 62 - Ошибка DNS 63 - Ошибка соединения 64 - Ошибка по таймауту (Закончилось время ожидания ответа от FTP сервера) 65 - Ошибка сервера 66 - Не позволительная операция 70 - Повтор ошибки 71 - Неверное имя пользователя 72 - Неверный пароль пользователя AT+FTPGET=2,<Количество получаемых байт> Команда чтения данных файла из FTP. <Количество получаемых байт> Количество байт для чтения из FTP сервера Ответ: +FTPGET=2,<Количество принятых байт> <Количество принятых байт> Количество принятых байт из FTP сервера. AT+FTPPUT=1 Запись данных на FTP сервер Ответ: +FTPPUT=<Состояние>,<Максимальное кол-во передаваемых байт> <Состояние> 1 - Передача прошла удачно. Ошибки: Смотри ошибки FTPGET <Максимальное кол-во передаваемых байт> В случае удачного подключения указывает на максимальное количество передаваемых байт за одну сессию. AT+FTPPUT=2,<Количество передаваемых байт> Ответ: +FTPPUT=2,<Количество переданных байт> <Количество переданных байт> Количество байт которые были переданы на FTP сервер. AT+FTPPUT=2,0 Команда о прекращении передачи данных на FTP сервер Пример получения данных из файла file.txt находящегося на FTP сервере в директории /mydir/file.txt Адрес FTP сервера www.ftpserver.ru, порт 21, логин user, пароль password. AT+SAPBR=1,1 // Подключились к GPRS OK AT+FTPCID=1 // Выбрали CID OK AT+FTPSERV="www.ftpserver.ru" // Передали адрес FTP сервера ОК AT+FTPUN="user" // Передали имя пользователя OK AT+FTPPW="password" // Передали пароль пользователя OK AT+FTPGETPATH="/mydir/" // Передали директорию где лежит файл OK AT+FTPGETNAME="file.txt" // Передали имя файла OK AT+FTPGET=1 // Отправили команду на подключение к серверу +FTPGET=1,1 // Данный ответ говорит об удачном подключении к серверу. Если второй параметр отличный от 1, значит возникла ошибка. описание ошибки смотрим выше. AT+FTPGET=2,100 // Передаем команду на получение не более 100 байт из файла. OK +FTPGET:2,5 // Ответ о том что получили из файла 5 байт 12345 // То что было в файле OK AT+SAPBR=0,1 // Заканчиваем работу с GPRS




You need to setup the connection to the bearer. Here are the minimum setup commands that have worked for me (based on trial/error and searching around on the internet).

AT+SAPBR=3,1,"APN","wap.cingular"
AT+SAPBR=1,1

The correct value for the APN may be different for you, depending on your network and service provider. I’m using AT&T prepaid SIM cards. Once that’s working, then you can do the HTTP setup commands as you already have…

AT+HTTPINIT
AT+HTTPPARA="URL","http://www.google.com"
AT+HTTPACTION=0

Status codes above 600 (and some in the 500 range) are unassigned in the HTTP standard. In the AT command manual for the SIM908, status meanings are given in the notes on the HTTPACTION command:

600 Not HTTP PDU
601 Network Error
602 No memory
603 DNS Error
604 Stack Busy

You can query the bearer connection status of CID 1 with AT+SAPBR=2,1 and the related parameters with AT+SAPBR=4,1. You can also check that you’re attached to the GPRS network with AT+CGATT?. If everything indicates that you are connected and you are still getting a 601 status code, then check that your service plan has data and that it hasn’t run out. I have found that even when my account has a few hundred k of data showing on the balance that I start to get a 601 status until I add more data to my prepaid phone plan. If the SIM module has been on the whole time and you add more data, you’ll need to close and re-open your connection (AT+SAPBR=0,1 followed by AT+SAPBR=1,1) and then your HTTP* commands will start working again without having to set the HTTPPARA settings again and without having to restart with HTTPINIT.

Hi Olivier , I modified the code as you asked:

My results:

v⸮⸮&��R⸮⸮⸮⸮⸮⸮B⸮SIM800L : Reset
SIM800L : Prepare internal buffer of 200 bytes
SIM800L : Prepare reception buffer of 512 bytes
SIM800L : Send "AT"
SIM800L : Receive timeout
Problem to initialize AT command, retry in 1 sec
SIM800L : Send "AT"
SIM800L : End of transmission
SIM800L : Receive "AT

OK
"
Setup Complete!
SIM800L : Send "AT+CSQ"
SIM800L : End of transmission
SIM800L : Receive "AT+CSQ

+CSQ: 0,0
"
SIM800L : Send "AT+CSQ"
SIM800L : End of transmission
SIM800L : Receive "AT+CSQ

+CSQ: 13,0
"
Signal OK (strenght: 13)
SIM800L : Send "AT+CREG?"
SIM800L : End of transmission
SIM800L : Receive "AT+CREG?

+CREG: 0,2
"
SIM800L : Send "AT+CREG?"
SIM800L : End of transmission
SIM800L : Receive "AT+CREG?

+CREG: 0,1
"
Network registration OK
SIM800L : Send "AT+SAPBR=3,1,"Contype","GPRS""
SIM800L : End of transmission
SIM800L : Receive "AT+SAPBR=3,1,"Contype","GPRS"

OK
"
SIM800L : Send "AT+SAPBR=3,1,"APN","data.uk""
SIM800L : End of transmission
SIM800L : Receive "AT+SAPBR=3,1,"APN","data.uk"

OK
"
GPRS config OK
SIM800L : Send "AT+SAPBR=1,1"
SIM800L : End of transmission
SIM800L : Receive "AT+SAPBR=1,1

OK
"
GPRS connected !
Start HTTP GET...
SIM800L : Send "AT+HTTPINIT"
SIM800L : End of transmission
SIM800L : Receive "AT+HTTPINIT

OK
"
SIM800L : Send "AT+HTTPPARA="CID",1"
SIM800L : End of transmission
SIM800L : Receive "AT+HTTPPARA="CID",1

OK
"
SIM800L : Send "AT+HTTPPARA="URL","www.google.com""
SIM800L : End of transmission
SIM800L : Receive "AT+HTTPPARA="URL","www.google.com"

OK
"
SIM800L : Send "AT+HTTPSSL=0"
SIM800L : End of transmission
SIM800L : Receive "AT+HTTPSSL=0

ERROR
"
SIM800L : initiateHTTP() - Unable to switch to HTTP
HTTP GET error 702
SIM800L : Send "AT+SAPBR=0,1"
SIM800L : End of transmission
SIM800L : Receive "AT+SAPBR=0,1

OK
"
GPRS disconnected !
SIM800L : Send "AT+CFUN?"
SIM800L : End of transmission
SIM800L : Receive "AT+CFUN?

+CFUN: 1
"
SIM800L : Send "AT+CFUN=0"
SIM800L : Send "AT+CFUN?"
SIM800L : End of transmission
SIM800L : Receive "AT+CFUN=0
AT+CFUN?

+CFUN: 0
"

Доброго времени, Уважаемые

Столкнулся с проблемой выхода в интернет для вышеупомянутой сборки. Плата — Arduino Mega(китайская),

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

void DialVoiceCall()
{
Serial1.println("ATD + +79161234567;");//dial the number
delay(100);
Serial1.println();
}
void SendTextMessage()
{
// Устанавливает текстовый режим для SMS-сообщений
Serial1.print("AT+CMGF=1r");
delay(100); // даём время на усваивание команды
// Устанавливаем адресата: телефонный номер в международном формате
Serial1.println("AT + CMGS = "+79161234567"");
delay(100);
// Пишем текст сообщения
Serial1.println("789");
delay(100);
// Отправляем Ctrl+Z, обозначая, что сообщение готово
Serial1.println((char)26);
}

а вот с со следующим кодом результата нет.. «AT+SAPBR=1,1» — ответ ERROR.. плюс ко всему через терминал идет очень много

мусора..

void setup()
{
Serial.begin(19200); // USB port
Serial1.begin(19200); // serial port
delay(2500);

void setint()
{
Serial1.println("AT+CSQ");
delay(100);
ShowSerialData();
Serial1.println("AT+CGATT=1");
delay(100);
ShowSerialData();
Serial1.println("AT+SAPBR=3,1,"CONTYPE","GPRS"");
delay(4000);
ShowSerialData();
Serial1.println("AT+SAPBR=3,1,"APN","internet.mts.ru"");
delay(2000);
ShowSerialData();
Serial1.println("AT+SAPBR=3,1,"USER","mts"");
delay(2000);
ShowSerialData();
Serial1.println("AT+SAPBR=3,1,"PWD","mts"");
delay(2000);
ShowSerialData();
Serial1.println("AT+SAPBR=1,1");
delay(2000);
ShowSerialData();
Serial1.println("AT+HTTPINIT");
delay(2000);
ShowSerialData();
Serial1.println("AT+HTTPPARA="CID",1");
delay(2000);
ShowSerialData();
Serial1.println("AT+HTTPPARA="URL","http://pustota.su/d7t.php?
c=ZAZ_276&lt=55.4&lg=31.7&v1=401&v2=402&v3=403&v4=404&v5=405&v6=406&v7=407&v8=408&v9=409&v10=410&v11=411&v12=412"
");
delay(2000);
ShowSerialData();
Serial1.println("AT+HTTPACTION=0");
delay(1000);
ShowSerialData();
Serial1.println("AT+HTTPTERM");
delay(1000);
ShowSerialData();
}

void ShowSerialData()
{
if (Serial1.available()) // if date is comming from softwareserial port ==> data is comming from gprs shield
{
while(Serial1.available()) // reading data into char array
{
buffer[count++]=Serial1.read(); // writing data into array
if(count == 64)break;
}
Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port
clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array
count = 0; // set counter of while loop to zero
}
}

void loop() {
ShowSerialData();
if (Serial.available())
{
while(Serial.available()) // reading data into char array
{
buffer[count++]=Serial.read(); // writing data into array
if(count == 64)break;
}
clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array
count = 0;
okornot();
setint();
}
}

терминал

AT

OK
UHшAT+CSQ

+CSQ: 20,0

OK
TQQх1
AT+CGATT=1
ю
OK
APBR=3,1,"CONTYPE","GPRS"
AT+SAPBR=ымЧьPе‰,"internet.mts.ru"
AT+SAPBR=3,1,"APN","iояPBR=3,1,"USER","mts"
AT+SAPBR=3,1,"USER","mts"

ERROR
APBR=3,1,"PWD","mts"
AT+SAPBR=3,1,"PWDв,‘[Ч‰

ERROR
(%Iх1,1
)*ЉХAT+SAPBR=1<эяAT+HTTPINIT

ERROR
KD",1
AT+HTTPPARA="CID",1

ERROR
Iх"URL","http://pustota.su/d7t.php?c=ZAZ_276&lt=55.4&lg=31O=0
AT+HTTPPARA="URL","http://puыOMMнAT+HtяCЎ”%хI5TTPTERM
AT+HTTPTERM

ERROR

Питание внешнее.. Выход в интернет нужен для передачи данных на сервер, пока в максимально простом виде.. но и это не идет.

Ваши предложения..

Мониторинг температуры через интернет с помощью GSM-модуля SIM900. Урок 3.

В предыдущем уроке мы собрали устройство, которое будет измерять температуру и передавать эту информацию на сервер. Теперь мы переходим к разбору алгоритма работы управляющего контроллера, его взаимодействию с другими узлами передающего устройства. Этот урок будет посвящён теоретическому разбору программы контроллера, без рассмотрения самого кода.

Некоторым читателям может показаться, что теория без практики слишком скучна. В этом случае можете переходить сразу к следующему уроку, «залить» программу в контроллер и испробовать его в работе, а потом вернутся сюда и изучить теорию.

Алгоритм работы передающего устройства

На представленной ниже диаграмме последовательности показан общий алгоритм работы передающего устройства:

Arduino Mega + SIM900 диаграмма последовательностиРис. 1. Общий алгоритм работы передающего устройства

После  включения устройства контроллер производит начальную инициализацию всех программных структур и переменных. Затем он посылает модему последовательности команд, выполняя которые, SIM900 сначала подключается к GPRS, а после открывает встроенный HTTP-сервис.

Все последующие инструкции программы выполняются в бесконечном цикле:

  • Контроллер даёт модему команду «Отправить запрос на сервер» и указывает содержание запроса. Модем посылает запрос и ждёт ответ от сервера.
  • После того, как ответ от сервера получен, модем передаёт его контроллеру.
  • В ответе от сервера, кроме служебной информации, содержится текущая команда для выходного реле. Контроллер принимает эту команду и выполняет её.
  • Далее контроллер производит цифровой обмен с термодатчиком и получает от него текущее значение температуры.
  • Если параметры системы (состояние выходного реле или температура) изменились по сравнению с предыдущим кругом цикла, контроллер передаст эти параметры в следующем запросе на сервер.

Настройка COM-порта Arduino

Обмен контроллера и модема происходит через последовательный порт.

sim900 arduino COM-port
Рис. 2. Соединение контроллера и модема через последовательный порт

Заводские настройки порта модема следующие:

  • Скорость обмена: 19200 бит/с
  • 8 бит данных
  • Проверка чётности : нет
  • 1 стоп-бит

Подключение SIM900 к GPRS

Для того чтобы модем выполнил подключение к интернету по GPRS, контроллер посылает ему следующие команды:

Команда

Описание

1 AT+SAPBR=3,1,“CONTYPE“,“GPRS“ Тип подключения : GPRS
2 AT+SAPBR=3,1,“APN“,“internet“
Точка доступа (APN). Для большинства операторов подходит “internet“ (в противном случае нужно запросить APN у Вашего оператора)
3 AT+SAPBR=1,1 Выполнить подключение
Таб. 1. Команды для подключения модема к GPRS

Если команда выполнена успешно, модем отвечает «ОК», в противном случае – «ERROR».

Инициализация HTTP-сервиса SIM900

Модем SIM900 имеет реализованный его внутренней логикой протокол HTTP. Это «своеобразный браузер», встроенный в чип модема. Пользователю остаётся  инициализировать его, после чего можно передавать через него GET- и POST-запросы, так же, как это происходит в обычном браузере.

Для инициализации HTTP-сокета, контроллер посылает модему следующие команды:

Команда Описание
1 AT+HTTPINIT Инициализация HTTP сервиса
2 AT+HTTPPARA=“CID“,1 Установка CID параметра для HTTP сессии оператора.
Таб. 2. Команды для инициализации HTTP

Если команда выполнена успешно, модем отвечает «ОК», в противном случае – «ERROR».

Отправка GET-запроса на сервер

Для реализации обмена данными с сервером используются GET-запросы  (один из типов запроса стандарта HTTP).

GET-запрос имеет следующий вид:

«GET /device_status.php?LOG= 1111&PAS=2222 HTTP/1.1»
«HOST: t.lazysmart.ru»

В запросе:

  • «GET» – тип запроса
  • «/device_status.php» – URI (путь к запрашиваемому скрипту на сервере)
  • После знака «?» идут передаваемые на сервер параметры и их значения. В данном примере параметры LOG и PAS – это логин и пароль для авторизации устройства на сервере. Эти параметры присваиваются устройству при его регистрации на сервере и не могут быть изменены. Посмотреть их можно через веб-приложение LS Cloud по адресу t.lazysmart.ru в меню «Настройки» этого устройства. В процессе работы устройства в запрос могут добавляться другие параметры, отражающие состояние системы (текущую температуру и состояние выходного реле).
  • «HTTP/1.1» — версия протокола
  • «HOST:…» — адрес сервера, к которому адресован запрос

Этот же запрос можно выразить в виде URL:

«http://t.lazysmart.ru /device_status.php?LOG=1111&PAS=2222»

Чтобы передать температуру на сервер, контроллер добавляет к запросу параметр «BT», а для передачи состояния выходного реле параметр «CSt». BT содержит значение температуры, умноженное на 10, а CSt принимает значение 0 или 1, где 0 – реле выключено, а 1 – включено.

Например, в запросе  «http://t.lazysmart.ru/device_status.php?LOG=1111&PAS=2222&BT=127&CSt=1»  передаваемые параметры означают, что температура равна 12,7 °С, а реле включено.

Передача запроса на сервер

Для отправки запроса на сервер, контроллер посылает модему следующие команды:

Команда Описание
1 AT+HTTPPARA=“URL“,“http:// t.lazysmart.ru /device_status.php?LOG=1111&PAS=2222“ Указание содержание запроса
2 AT+HTTPACTION=0 Старт обмена данными
Параметр, метод запроса:
0 – GET
1 – POST
2 – HEAD
Таб. 3. Команды для передачи запроса на сервер

Если команда выполнена успешно, модем отвечает «ОК», в противном случае – «ERROR».

Получение ответа от сервера

Как только ответ от сервера получен, модем посылает контроллеру строку вида:

+HTTPACTION:0,200, <…>  ,

где  0 – тип запроса GET, 200 – код успешного ответа, <…>   — количество полученных байт.

Если код ответа не 200 – значит, при передаче запроса произошла ошибка.

Если от сервера получен «успешный» ответ, контроллер посылает модему команду «AT+HTTPREAD». В ответ на эту команду модем начинает передавать контроллеру содержание ответа сервера.

Ответ от сервера состоит из заголовков, содержащих служебную информацию, и тела ответа.

Тело представляет собой строку вида:

“COMMAND <…> EOC”,

где <…>  — команда для выходного реле (1 – включить, 0 – выключить).

Анализ состояния системы

После того, как команда для реле от сервера получена, контроллер выполняет её. Если команда реле поменялась,  — контроллер добавляет к новому запросу на сервер соответствующий параметр (см. «GET-запрос»). Благодаря этому сервер получит подтверждение о том, что устройство получило и выполнило команду.

Затем контроллер производит информационный обмен с датчиком температуры DS18B20. Если температура изменилась – эта информация также добавляется в новый запрос на сервер.

Алгоритм «выживания»

Алгоритм выживания используется для предотвращения непредвиденных ситуаций в обмене с модемом. Сбои в программной логике модема, «мусор» полученный от сети и другие ситуации — могут привести к зависанию модема или его неадекватной работе. Применяется простейший алгоритм «выживания» в таких ситуациях: если в течение трёх минут от сервера не получено никаких полезных данных – контроллер перезагружает модем.

Предотвращение зависания

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

Облачный сервис для мониторинга «LS Cloud»

Данные, передаваемые устройством на сервер, сохраняются в базе данных и доступны пользователю через веб-приложение “LS Cloud” по адресу  t.lazysmart.ru.

Этот сервис мы создали для того, чтобы Вы уже на этом этапе смогли опробовать работу своего устройства. Ну а для тех, кто хочет понять, как сервер устроен «внутри», следите за выходом следующих уроков. В одном из них мы покажем, как самостоятельно создать веб-сервис.

Основные элементы интерфейса приложения показаны на рисунках 3 и 4.

Мониторинг температуры LS Cloud

Рис. 3. Экран мониторинга основных параметров устройства

На экране мониторинга основных параметров устройства (рис. 3) отображается информация о текущей температуре, а так же исторические данные о температуре за весь период работы устройства. Панель «Реле» позволяет управлять выходным реле устройства, а в «Журнал» заносятся события, происходящие с устройством.

система мониторинга температуры

Рис. 4. Экран настроек прибора

На экране настроек прибора (рис. 4) можно изменить основные настройки прибора:

  • Имя
  • Верхний предупредительный (тревожный) порог температуры – при его превышении генерируется тревожное событие в журнал.
  • Верхний аварийный порог температуры – при его превышении генерируется аварийное событие в журнал.
  • Нижний предупредительный (тревожный) порог температуры – если температура опустится ниже него, будет сгенерировано тревожное событие в журнал.
  • Верхний аварийный порог температуры – если температура опустится ниже него, будет сгенерировано аварийное событие в журнал.
  • Таймаут (задаётся в секундах) – если в течение этого времени устройство ни разу не вышло на связь, генерируется событие «потеря связи с устройством».
  • Оповещение при тревоге — при активации этой настройки пользователь будет получать сообщения о тревожных событиях по email и SMS.
  • Оповещение при тревоге — при активации этой настройки пользователь будет получать сообщения о тревожных событиях по email и SMS.
  • Оповещение при обрывах связи с устройством — при активации этой настройки пользователь будет получать сообщения о событиях обрыва связи с устройством по email и SMS.

Заключение

На этом мы заканчиваем третий урок! Надеемся, что он был полезен! В следующем уроке мы прошьём программу в контроллер и запустим устройство. До скорой встречи на LAZY SMART! Чтобы не пропустить новую статью, вступай в нашу группу Вконтакте, а также подписывайся на наш канал YouTube.


Понравилась статья? Поделить с друзьями:
  • At error code h10 desc app crashed method get path favicon ico
  • At entercnd a710 error
  • At entercnd 710 error
  • At datalock oem code error
  • At datalock error что делать