Передача данных на сервер
- Войдите на сайт для отправки комментариев
Сб, 07/09/2019 - 23:19
Здравствуйте уважаемы пользователи форума !
Помогите пожалуйста !
Недавно на просторах интернета я нашел интересный проект по передачи данных на модуле sim-808 под управлением arduino
<span style="color: #5e6d03;"></span><span style="color: #000000;"> </span> #include <SoftwareSerial.h> SoftwareSerial GSMport(3, 2); // RX, TX typedef struct { String latitude; String longitude; String datetime; } MyDataGPS; MyDataGPS dataGPS; void gprs_init(void); MyDataGPS getGPSLocation(void); void gprs_send(String dataa, String datab, int dataA0, int dataA1); String ReadGSM(); void setup() { Serial.begin(9600); GSMport.begin(9600); GSMport.println("AT+CLIP=1"); //устанавливаем чтобы номер входящего звонка определялся delay(300); GSMport.println("AT+DDET=1"); //устанавливаем прием DTMF delay(300); gprs_init(); digitalWrite(A1,1); //подтяжка к 1 } void loop() { char c; String str; if (analogRead(A1)<100) { dataGPS = getGPSLocation(); Serial.println("Level A1: "+String(analogRead(A1))); gprs_send(dataGPS.latitude, dataGPS.longitude, analogRead(A0), analogRead(A1)); } while (GSMport.available()) { //отправляем данные с GSM в Serial c = GSMport.read(); Serial.write(c); delay(10); } while (Serial.available()) { //сохраняем входную от консоли строку в переменную str пока не конец строки c = Serial.read(); GSMport.write(c); //str += c; //if (c == '\n') { // AnalyseCmd(&str); // str = ""; delay(10); } } MyDataGPS getGPSLocation(void) { //функция определения местоположения по GPS String v,v1,v2; String data[5]; MyDataGPS d; int a = 0,b = 0; GSMport.println("AT+CGNSPWR=1"); delay(1000); Serial.println(ReadGSM()); GSMport.println("AT+CGNSINF"); delay(400); delay(400); v = ReadGSM(); Serial.println(v); for(int i=0;i<5;i++){ //парсинг данных между запятыми в массив строк a = v.indexOf(",",a); //первое вхождение запятой if(a!=-1){ b = v.indexOf(",",a+1); //второе вхождение запятой после нашей первой запятой если a не -1 data[i] = v.substring(a+1,b); Serial.println(String("Poluchennaya data: " + String(i)+" - "+ data[i])); a = b; } } d.datetime = data[1]; d.latitude = data[2]; d.longitude = data[3]; return d; } void gprs_init(void) { //Процедура начальной инициализации GSM модуля для GPRS int d = 500; Serial.println("---------------GPRS init start----------------"); delay(d * 4); GSMport.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\""); //Установка настроек подключения delay(d * 5); Serial.println(ReadGSM()); //показываем ответ от GSM модуля delay(d * 5); GSMport.println("AT+SAPBR=3,1,\"APN\",\"internet.ltmsk\""); //Установка APN delay(d); Serial.println(ReadGSM()); //показываем ответ от GSM модуля delay(d * 2); GSMport.println("AT+SAPBR=3,1,\"USER\",\"\""); //Установка имени пользователя для сети delay(d); Serial.println(ReadGSM()); //показываем ответ от GSM модуля GSMport.println("AT+SAPBR=3,1,\"PWD\",\"\""); //Установка пароля для сети delay(d); Serial.println(ReadGSM()); //показываем ответ от GSM модуля delay(d * 2); GSMport.println("AT+SAPBR=1,1"); //Устанавливаем соединение GPRS delay(d * 2); Serial.println(ReadGSM()); //показываем ответ от GSM модуля delay(d * 2); GSMport.println("AT+SAPBR=2,1"); //Проверяем как настроилось delay(d); Serial.println(ReadGSM()); //показываем ответ от GSM модуля delay(d * 5); Serial.println("----------------GPRS init complete-------------"); Serial.println(""); } void gprs_deinit(){ } String ReadGSM() { //функция чтения данных от GSM модуля char c; String str; while (GSMport.available()) { //сохраняем входную строку в переменную str c = GSMport.read(); str += c; delay(20); } str = "<<< " + str; return str; } void gprs_send(String dataa, String datab, int dataA0, int dataA1) { //Процедура отправки данных на сервер //отправка данных на сайт String tempstr; Serial.println("Send start"); GSMport.println("AT+HTTPINIT"); delay(1000); Serial.println(ReadGSM()); GSMport.println("AT+HTTPPARA=\"CID\",1"); delay(1000); Serial.println(ReadGSM()); Serial.println("setup url"); tempstr = String("AT+HTTPPARA=\"URL\",\"адрес вэб сайта.ком/gps/write.php?a=" + dataa + "&b=" + datab + "&a0=" + String(dataA0) +"&a1=" + String(dataA1) +"\""); GSMport.println(tempstr); Serial.println(tempstr); delay(4000); Serial.println(ReadGSM()); Serial.println("GET url"); GSMport.println("AT+HTTPACTION=0"); delay(5000); Serial.println(ReadGSM()); Serial.println("Send done"); GSMport.println("AT+HTTPTERM"); delay(200); Serial.println(ReadGSM()); }
Данный скейч берет информацию с пинов 0 и 1
иу меня есть 2 датчика один датчик температуры другой датчик влажности почвы.
Вот онтних скейчи
Датчик влажноти
#define SENSOR A2 // Определяем номер аналогового входа, к которому подключен датчик влажности почвы. // Датчик инверсный: больше влажность - меньше значение. #define MIN 630 // Определяем минимальное показание датчика (в воздухе), #define MAX 330 // определяем максимальное показание датчика (в воде), uint16_t sensor; // создаем переменную для хранения адаптированных показаний, void setup(){ Serial.begin(9600); // Инициируем передачу данных по последовательному порту на скорости 9600 бот. } void loop(){ sensor = analogRead(SENSOR); // Читаем сырые данные с датчика, sensor = map(sensor, MIN, MAX, 0, 100); // адаптируем значения от 0 до 100, Serial.println(sensor); // выводим текущую влажность почвы из датчика в последовательный порт, delay(500); // приостанавливаем выполнение программы на 0.5 секунд. }
Датчик температуры
#include <OneWire.h> OneWire ds(8); // Объект OneWire int temperature = 0; // Глобальная переменная для хранения значение температуры с датчика DS18B20 long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика const int TEMP_UPDATE_TIME = 1000; // Определяем периодичность проверок void setup(){ Serial.begin(9600); } void loop(){ detectTemperature(); // Определяем температуру от датчика DS18b20 Serial.println(temperature); // Выводим полученное значение температуры // Т.к. переменная temperature имеет тип int, дробная часть будет просто отбрасываться } int detectTemperature(){ byte data[2]; ds.reset(); ds.write(0xCC); ds.write(0x44); if (millis() - lastUpdateTime > TEMP_UPDATE_TIME) { lastUpdateTime = millis(); ds.reset(); ds.write(0xCC); ds.write(0xBE); data[0] = ds.read(); data[1] = ds.read(); // Формируем значение temperature = (data[1] << 8) + data[0]; temperature = temperature >> 4; } }
Тоест чтоб информация заместе тех упомянутых ранее пинов 0 , 1 выводилась информация температуры и влажности.
Помогите мне пажалуйста их скрестить !