Передача данных на сервер
- Войдите на сайт для отправки комментариев
Сб, 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 выводилась информация температуры и влажности.
Помогите мне пажалуйста их скрестить !