На одном из ресурсов сети наткнулся на одну небольшую статью и объединил её с моими предыдущими наработками и у меня все заработало так как надо. В этой статье я покажу вам как отправлять данные с датчиков подключённых к ардуино или к подобным девайсам и отправлять их на удаленный сервер в сети. Весь свой проект я не буду выкладывать а только учебную часть которую вы сможете адаптировать под свои нужды. И так начнем.
Наш проект будет состоять из следующих комплектующих а именно
1 Arduino pro mini
2 Датчика температуры BMP 180
3 GSM/GPRS модуля SIM800L
Схема подключения GSM/GPRS модуля SIM800L типичная. Напряжение на модуль подавать не более чем 4,2 вольта, лучше в районе 4 вольт держать тогда и мощность передатчика теряться не будет. Схема ниже.
Датчик температуры BMP 180 также подключается по типичной схеме и сложностей с ним у вас не должно возникнуть, на всякий случай вот схема.

В качестве сервера мы будем использовать бесплатный сервер https://thingspeak.com.
Проходим регистрацию на сайте. Для этого нажимаем на вкладку SING IN и переходим далее.
Если вы когда то уже регистрировались на этом сайте, то можете переходить далее если нет, то проходим регистрацию далее. Нажимаем Create one!
Переходим на следующую вкладку . В строке Email Address в ней вводим эмейл на который придёт письмо активации. В строке Location выбираете свою страну. В строке First Name пишете свое имя. В строке Last Name вводите свою фамилию и нажимаете далее.

После чего вам на почту придёт письмо со ссылкой для активации аккаунта. Переходите по ссылке из письма и вводите свой логин и пароль.
Далее в основном меню сайта выбираем вкладку CHANNELS и из выпадающего списка выберите MY CHANNELS. Тогда перейдете на вкладку MY CHANNELS. Нажимаете NEW CHANNELS.

В поле Name пишите имя вашего канала. И создайте три поля как на картинке. Заполните их следующими именами: Temperature, Pressure, Altitude. И нажимаем кнопку SAVE.


Переходим на следующую вкладку. И видим три пустых поля. Далее находим вверху страницы вкладу API KEYS . В ней находим Write API Key и из этой графы скопируйте ключ.


Далее сворачиваем всё это и открываем среду ардуино для заливки скетча.
В скетче находим следующею строку и туда вставляем свой ключ.

Загружаем скетч в ардуино и смотрим результат. Результат будет у вас отображаться на вкладке MY CHANNELS у виде графика.

Сам скетч не сложный и я его питался сделать максимально понятным . Он хорошо закомментирован для максимального понимания того что и как делает программа и что бы вам можно было его легко модифицировать для своих самоделок. Я его приведу в полном виде как есть, код проверенный и работает сейчас в моем проекте.
Чуть не забыл SIM800L сам умеет определять настройки интернета и прописывать их совсем нет смысла.
А вот и сам код непосредственно.
#include <SoftwareSerial.h>//подключаем библиотеку для работы с серийным портом
#include <Wire.h>//подключаем библиотеку для работы с кабелем I2C
#include <Adafruit_BMP085.h>//подключаем библиотеку для работы с датчиком BMP180
#define seaLevelPressure_hPa 1013.00// определяем давление над уровнем моря
SoftwareSerial gprsSerial(3, 2);// определяем пины к которым будет подключен датчик BMP180
Adafruit_BMP085 bmp;//запускаем работу библиотеки
void setup()//цикл конфигурации портов
{
gprsSerial.begin(9600);// устанавливаем скорость порта для GPRS
Serial.begin(9600); //устанавливаем скорость серийного порта
if (!bmp.begin())//если датчик не начал работу то...
{
Serial.println("датчик неисправен либо отсутствует");// выводим в серийный порт
while (1) {}//будем ждать когда датчик заработает и тогда переходим дальше
}
}
void loop()// основной цикл программы
{
if (gprsSerial.available())// если датчик модуль связи отвечает то...
Serial.write(gprsSerial.read());// пишем в серийный порт а модуль связи
//прослушивает то что приходит из серийного порта
gprsSerial.println("AT");//пишем в серийный порт
delay(1000);// ждем ответ от модуля
gprsSerial.println("AT+CPIN?");//проверяем статус SIM карты
delay(1000);// ждем ответ от модуля
gprsSerial.println("AT+CREG?");//проверяем тип регистрации в сети
delay(1000);// ждем ответ от модуля
gprsSerial.println("AT+CGATT?");// проверяем подключен ли модуль к GPRS
delay(1000);// ждем ответ от модуля
gprsSerial.println("AT+CIPSHUT");// сброс всех tcp/ip соединений
delay(1000);// ждем ответ от модуля
gprsSerial.println("AT+CIPSTATUS");// проверяет состояние инициализации IP стека
delay(2000);// ждем ответ от модуля
gprsSerial.println("AT+CIPMUX=0");//настраиваем соединение только с одним сервером
delay(2000);// ждем ответ от модуля
ShowSerialData();//отображаем процесс формирования и отправки данных на сервер
gprsSerial.println("AT+CSTT=\"airtelgprs.com\"");//запуск настроек соединения
//и подключение к заданному серверу,
delay(1000);// ждем ответ от модуля
ShowSerialData();//отображаем процесс формирования и отправки данных на сервер
gprsSerial.println("AT+CIICR");//устанавливаем беспроводное подключение GPRS
delay(3000);// ждем ответ от модуля
ShowSerialData();//отображаем процесс формирования и отправки данных на сервер
gprsSerial.println("AT+CIFSR");//запрашиваем локальный IP адрес
delay(2000);// ждем ответ от модуля
ShowSerialData();//отображаем процесс формирования и отправки данных на сервер
gprsSerial.println("AT+CIPSPRT=0");//отключаем запрос данных
delay(3000);// ждем ответ от модуля
ShowSerialData();//отображаем процесс формирования и отправки данных на сервер
gprsSerial.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",\"80\"");
//устанавливаем TCP соединение,
//подключаемся к серверу на порт 80 сервера
delay(6000);// ждем ответ от модуля
ShowSerialData();//отображаем процесс формирования и отправки данных на сервер
gprsSerial.println("AT+CIPSEND");//начинаем отправку данных на сервер
delay(4000);// ждем ответ от модуля
ShowSerialData();//отображаем процесс формирования и отправки данных на сервер
String str = "GET https://api.thingspeak.com/update?api_key=E64T2AQVSXQ4UUAY&field1=" + String(bmp.readTemperature()) + "&field2=" + String(bmp.readSealevelPressure()) + "&field3=" + String(bmp.readAltitude(seaLevelPressure_hPa * 100));
//формируем поток данных для отправки на сервер
Serial.println(str);
//выводим в серийный порт поток данных которые будут отправляется на сервер
gprsSerial.println(str);//передаем поток данных на отдаленный сервер
delay(4000);// ждем ответ от модуля
ShowSerialData();//отображаем процесс формирования и отправки данных на сервер
gprsSerial.println((char)26);
//определяем длину потока данных для отправки на отдаленный сервер
delay(5000);// ждем ответ от модуля
gprsSerial.println();//передаем данные на сервер
ShowSerialData();//отображаем процесс формирования и отправки данных на сервер
gprsSerial.println("AT+CIPSHUT");//закрываем соединение после передачи данных и перезагружаем соединение
delay(100);// ждем ответ от модуля
ShowSerialData();//отображаем процесс формирования и отправки данных на сервер
}
void ShowSerialData()//цикл обработки и показа передачи данных на сервер
{
while (gprsSerial.available() != 0)//создадим цикл который будет ожидать ответ от передатчика,
//если он исправен или работает то...
Serial.write(gprsSerial.read());// читаем данные из передатчика и выводим содержимое в серийный порт
delay(5000);// ждем ответ от модуля
}