[go: up one dir, main page]

0% found this document useful (0 votes)
78 views9 pages

Last Gps

Download as txt, pdf, or txt
Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1/ 9

#include <DNSServer.

h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <Update.h>
#include <WiFiUdp.h>
#include "ArduinoOTA.h"
//https://github.com/esp8266/Arduino/tree/master/libraries/ArduinoOTA
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include "SoftwareSerial.h"
#include <TinyGPSPlus.h>
#include <ArduinoJson.h>
bool connected_wifi = 0;

#define run_every(t) for (static uint16_t last_; \


(uint16_t)(uint16_t(millis()) - last_) >= (t); \
last_ += (t))
#define csn 15
#define mosi 13 //hspi
#define miso 12
#define clk 14
#define ce 2
unsigned long time_mm = millis();
float last_value_1, last_value_2;
float giatri[5]; // gia tri cua cam bien
float slave1[5];
float slave2[5];
uint8_t state_led = 0;
bool gps_status = 0;
RF24 radio(2, 15, clk, miso, mosi); // CE, CSN
const uint64_t address = 0xF0F0F0F0E1LL;
const char* ssid = "Redmi Note 11"; //replace with your SSID
const char* password = "12345678"; //replace with your password
TinyGPSPlus gps; // create gps object
SoftwareSerial sim_(22, 23); // rx tx
WebServer server(80);
String apn = "v-connect"; //APN
String apn_u = ""; //APN-Username
String apn_p = ""; //APN-Password
String url_post = "http://scube.loca.lt/box/upload-data/mother01"; //URL of Server
String url_get = "api.thingspeak.com/channels/119922/feeds/last.txt";
String data_get = "";
String timestamp;
float lat_value = 0; //21.0037091
float lng_value = 0; //105.8431574
float temp, hum, acc;
const char* host = "esp32";
const char* loginIndex =
"<form name='loginForm'>"
"<table width='20%' bgcolor='A09F9F' align='center'>"
"<tr>"
"<td colspan=2>"
"<center><font size=4><b>ESP32 Login Page</b></font></center>"
"<br>"
"</td>"
"<br>"
"<br>"
"</tr>"
"<td>Username:</td>"
"<td><input type='text' size=25 name='userid'><br></td>"
"</tr>"
"<br>"
"<br>"
"<tr>"
"<td>Password:</td>"
"<td><input type='Password' size=25 name='pwd'><br></td>"
"<br>"
"<br>"
"</tr>"
"<tr>"
"<td><input type='submit' onclick='check(this.form)' value='Login'></td>"
"</tr>"
"</table>"
"</form>"
"<script>"
"function check(form)"
"{"
"if(form.userid.value=='admin' && form.pwd.value=='admin')"
"{"
"window.open('/serverIndex')"
"}"
"else"
"{"
" alert('Error Password or Username')/*displays error message*/"
"}"
"}"
"</script>";

/*
* Server Index Page
*/

const char* serverIndex =


"<script
src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>"
"<form method='POST' action='#' enctype='multipart/form-data' id='upload_form'>"
"<input type='file' name='update'>"
"<input type='submit' value='Update'>"
"</form>"
"<div id='prg'>progress: 0%</div>"
"<script>"
"$('form').submit(function(e){"
"e.preventDefault();"
"var form = $('#upload_form')[0];"
"var data = new FormData(form);"
" $.ajax({"
"url: '/update',"
"type: 'POST',"
"data: data,"
"contentType: false,"
"processData:false,"
"xhr: function() {"
"var xhr = new window.XMLHttpRequest();"
"xhr.upload.addEventListener('progress', function(evt) {"
"if (evt.lengthComputable) {"
"var per = evt.loaded / evt.total;"
"$('#prg').html('progress: ' + Math.round(per*100) + '%');"
"}"
"}, false);"
"return xhr;"
"},"
"success:function(d, s) {"
"console.log('success!')"
"},"
"error: function (a, b, c) {"
"}"
"});"
"});"
"</script>";

/*
* setup function
*/
void gsm_send_serial(String command, uint32_t time_delay = 3000, bool cvt_data = 0)
{
Serial.println("Send ->: " + command);
sim_.println(command);
long wtimer = millis();
while (wtimer + time_delay > millis()) {
if (connected_wifi == 1) server.handleClient();
while (sim_.available()) {
char c = sim_.read();
Serial.write(c);
}
}
Serial.println();
}
void gsm_config_gprs() {
Serial.println(" --- CONFIG GPRS --- ");
gsm_send_serial("AT+SAPBR=3,1,Contype,GPRS");
gsm_send_serial("AT+SAPBR=3,1,APN," + apn);
if (apn_u != "") {
gsm_send_serial("AT+SAPBR=3,1,USER," + apn_u);
}
if (apn_p != "") {
gsm_send_serial("AT+SAPBR=3,1,PWD," + apn_p);
}
}
String str_cvt(String str) {
String c = "\"" + str + "\"";
return c;
}
void gsm_http_post(String postdata) {
Serial.println(" --- Start GPRS & HTTP --- ");
gsm_send_serial("AT+SAPBR=1,1");
gsm_send_serial("AT+SAPBR=2,1");
gsm_send_serial("AT+HTTPINIT");
gsm_send_serial("AT+HTTPPARA=\"CID\",1");

StaticJsonDocument<400> doc;
doc["timeStamp"] = "1672483819";
doc["longitude"] = lng_value;
doc["latitude"] = lat_value;
JsonArray slave = doc.createNestedArray("slaves");
StaticJsonDocument<200> slaves;
slaves["id"] = "box01";
slaves["temperature"] = slave1[2];
slaves["humidity"] = slave1[1];
slaves["acceleration"] = slave1[0];
StaticJsonDocument<200> slaves2;
slaves2["id"] = "box02";
slaves2["temperature"] = slave2[2];
slaves2["humidity"] = slave2[1];

slaves2["acceleration"] = slave2[0];

//StaticJsonDocument<200> slaves3;
// slaves3["id"] = "sla";
// slaves3["temperature"] = temp;
// slaves3["humidity"] = hum;
// slaves3["acceleration"] = acc;
slave.add(slaves);
slave.add(slaves2);
// slave.add(slaves3);
String c;
serializeJson(doc, c);
gsm_send_serial("AT+HTTPPARA=\"URL\",\"http://scube.loca.lt/box/upload-data/
mother01\"", 4000);
gsm_send_serial("AT+HTTPPARA=\"CONTENT\",\"application/json\""); /// thay bang
json
gsm_send_serial("AT+HTTPDATA=" + String(c.length()) + ",10000");
gsm_send_serial(c);
gsm_send_serial("AT+HTTPACTION=1", 10000);
gsm_send_serial("AT+HTTPREAD", 7000);
//gsm_send_serial("AT+HTTPTERM",10000);
// gsm_send_serial("AT+SAPBR=0,1");
time_mm = millis();
}
void gsm_http_get() {
gsm_send_serial("AT+SAPBR=1,1");
gsm_send_serial("AT+SAPBR=2,1");
gsm_send_serial("AT+HTTPINIT");
gsm_send_serial("AT+HTTPPARA=CID,1");
gsm_send_serial("AT+HTTPPARA=URL," + url_get);
gsm_send_serial("AT+HTTPACTION=0");
gsm_send_serial("AT+HTTPREAD", 5000, 1);
}
bool connected_ = 0;

void setup() {
Serial.begin(9600);
sim_.begin(9600);
Serial2.begin(9600); // gps
Serial.println("Booting");
pinMode(33, OUTPUT);
pinMode(25, OUTPUT);
digitalWrite(25, HIGH);
digitalWrite(33, LOW);

WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
static uint16_t count_delay = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
count_delay++;
if (count_delay >= 30) {
SPI.begin(14, 12, 13, 15);
radio.begin();
radio.openReadingPipe(0, address); //Setting the address at which we will
receive the data
radio.setPALevel(RF24_PA_MIN); //You can set this as minimum or maximum
depending on the distance between the transmitter and receiver.
radio.startListening();
for (int i = 0; i < 10; i++) {
digitalWrite(25, LOW);
delay(200);
digitalWrite(25, HIGH);
delay(200);
}
sim_.setTimeout(100);
return;
}
Serial.print(".");
}
connected_wifi = 1;
Serial.println("");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
delay(3000);
// Port defaults to 8266
// ArduinoOTA.setPort(8266);
if (!MDNS.begin(host)) { //http://esp32.local
Serial.println("Error setting up MDNS responder!");
while (1) {
delay(1000);
}
}
Serial.println("mDNS responder started");
/*return index page which is stored in serverIndex */
server.on("/", HTTP_GET, []() {
server.sendHeader("Connection", "close");
server.send(200, "text/html", loginIndex);
});
server.on("/serverIndex", HTTP_GET, []() {
server.sendHeader("Connection", "close");
server.send(200, "text/html", serverIndex);
});
/*handling uploading firmware file */
server.on(
"/update", HTTP_POST, []() {
server.sendHeader("Connection", "close");
server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
ESP.restart();
},
[]() {
HTTPUpload& upload = server.upload();
if (upload.status == UPLOAD_FILE_START) {
Serial.printf("Update: %s\n", upload.filename.c_str());
if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size
Update.printError(Serial);
}
} else if (upload.status == UPLOAD_FILE_WRITE) {
/* flashing firmware to ESP*/
if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
Update.printError(Serial);
}
} else if (upload.status == UPLOAD_FILE_END) {
if (Update.end(true)) { //true to set the size to the current progress
Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
} else {
Update.printError(Serial);
}
}
});

server.begin();
SPI.begin(14, 12, 13, 15);
radio.begin();
radio.openReadingPipe(0, address); //Setting the address at which we will
receive the data
radio.setPALevel(RF24_PA_MIN); //You can set this as minimum or maximum
depending on the distance between the transmitter and receiver.
radio.startListening();
sim_.setTimeout(100);
}
int recvData() {
if (radio.available()) {
radio.read(&giatri, sizeof(giatri));
if ((int)giatri[4] == 6) {
for (int i = 0; i < 5; i++) {
if (giatri[i] == NAN) slave2[i] = 0;
else slave2[i] = giatri[i];
}
} else {
for (int i = 0; i < 5; i++) {
if (giatri[i] == NAN) slave1[i] = 0;
else slave1[i] = giatri[i];
}
}
static uint8_t count_1 = 0;
static uint8_t count_2 = 0;
/*
if (abs(last_value_1 - slave1[4]) ==0) {
count_1++;
if (count_1 >= 2) {
count_1 = 0;
for (int i = 0; i < 5; i++) {
slave1[i] = 0;
}
}
}
if(abs(last_value_2-slave2[0])==0)
{
count_2++;
if(count_2>=2)
{
count_2=0;
for(int i =0 ; i<5;i++)
{
slave2[i]=0;
}
}
}
last_value_1 = slave1[4];
last_value_2 = slave2[0];
*/
return 1;
}
return 0;
}
void loop() {
static bool connected_2 = 0;
static bool send_sms = 0;
if (connected_wifi == 1) server.handleClient();
if (connected_ == 0 && connected_2 == 0) {
static uint8_t count_signal = 0;
static unsigned long time_d = millis();
if (millis() - time_d > 1000) {
/// Serial.println("send");
sim_.println("AT+CSQ");
time_d = millis();
}
if (sim_.available()) {
String c = sim_.readString();
Serial.println(c);
int m = c.indexOf(":");
if (m != -1) {
// int u = c.indexOf(",");
//Serial.println("m:"+String(m));
//Serial.println(c.substring(m+1,m+3));
int x = c.substring(m + 1, m + 4).toInt();
if (x >= 8) {
count_signal++;
}
if (count_signal >= 5) {
connected_2 = 1;
connected_ = 0;
gsm_config_gprs();
gsm_send_serial("AT+SAPBR=1,1");
}
Serial.println("x:" + String(x));
}
}
}
if (connected_2 == 1) {
static unsigned long time_d2 = millis();
if (millis() - time_d2 > 1000) {
/// Serial.println("send");
sim_.println("AT+SAPBR=2,1");
time_d2 = millis();
}
if (sim_.available()) {
String c = sim_.readString();
Serial.println(c);
int m = c.indexOf(".");
if (m != -1) {
String str_2 = c.substring(m + 1);
int ind_2 = str_2.indexOf(".");
Serial.println("str:" + str_2);

//Serial.println("m:"+String(m));
//Serial.println(c.substring(m+1,m+3));
Serial.println(str_2.substring(0, ind_2));
int x = str_2.substring(0, ind_2).toInt();

if (x != 0) {
connected_2 = 0;
digitalWrite(25, LOW);
// digitalWrite(33, HIGH);
connected_ = 1;
}
Serial.println("x:" + String(x));
}
}
}
run_every(1000) {
send_sms = recvData();
if (send_sms) {
Serial.print("slave1:");
for (int i = 0; i < 5; i++) {
Serial.print(slave1[i]);
Serial.print(",");
}
Serial.println();
Serial.print("slave2:");
for (int i = 0; i < 5; i++) {
Serial.print(slave2[i]);
Serial.print(",");
}
Serial.println();
}
}
if (connected_ == 1) {
static unsigned long time_m = millis();
if (Serial2.available() > 0) {
//Serial.println("serial2:"+String(Serial2.read()));
gps.encode(Serial2.read());
if (gps_status == 0) {
if (gps.location.isValid()) {
lat_value = gps.location.lat();
lng_value = gps.location.lng();
// Serial.println(lat_value);
gps_status = 1;
} else {
Serial.print(F("INVALID"));
}
// Serial.println(lng_value);

} else {
if (gps.location.isValid()) {
lat_value = gps.location.lat();
lng_value = gps.location.lng();
// Serial.println(lat_value);
}
}
}
if (millis() - time_m > 500) {

time_m = millis();
if (gps_status == 0) {
digitalWrite(33, state_led);
state_led = 1 - state_led;
//Serial.println(state_led);
return;
} else {
digitalWrite(33, HIGH);
}
}
for (int i = 0; i < 5; i++) {
if (giatri[i] == 0) return;
}
if (lat_value == 0 && lng_value == 0) {
gps_status = 0;
return;
}
digitalWrite(33, HIGH);
static uint8_t count_ti = 0;
if (millis() - time_mm > 50000) {
count_ti++;
Serial.println("send");
time_mm = millis();
if (send_sms && count_ti >= 2) {
gsm_http_post(" ");
count_ti=0;

}
}
}
//any custom code or logic goes here
}

You might also like