/* Ricardo Mena C ricardo@crcibernetica.com http://crcibernetica.com Modificaciones: Angel Marquez angel.marquez@ribbitsolutions.com http://ribbitsolutions.com This example code is in public domain */ /* Temperature sensors, Voltage sensor, GPS and communication with Nextion * terminal by Angel Marquez angel.marquez@ribbitsolutions.com */ #include #include #include #include //#define myNextion Serial /********************************************************************/ // Data wire is plugged into pin 4 on the Arduino #define ONE_WIRE_BUS 4 /********************************************************************/ // Setup a oneWire instance to communicate with any OneWire devices // (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); /********************************************************************/ // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); SoftwareSerial nextion(2, 3);// Nextion TX to pin 2 and RX to pin 3 of Arduino /********************************************************************/ // GPS Setup #define RXPIN 10 // RX is digital pin 10 (connect to TX of the GPS device) #define TXPIN 11 // TX is digital pin 11 (connect to RX of the GPS device) SoftwareSerial myGPS(RXPIN, TXPIN); // GPS pin setup (RX, TX) //Adafruit_GPS GPS(&myGPS); // Create GPS object String NMEA1; // Variable for first NMEA Sentence String NMEA2; // Variable for second NMEA Sentence char c; // to readcharacters coming from GPS /********************************************************************/ //create a Nextion object named myNextion using the nextion serial port @ 9600bps Nextion myNextion(nextion, 9600); float distance = 0; float temp1 = 10; float temp2 = 10; // Variables para el calculo del voltage float volts; float vtemp; String pagina = "0"; int old_sensor_value = 0; String ID,UTC,Lat,NSInd,Lon,WEInd,PFix,Satt,HDOP,Alti,Units1,GEOid,Units2,AoD,Diff,Checksum; void setup() { Serial.begin(9600); myNextion.init(); delay(1000); myGPS.begin(9600); // Turn on GPS at 9600 baud //GPS.sendCommand("$PGCMD,33,0*6D"); //GPS.sendCommand(PMTK_SET_NMEA_UPDATE_10HZ); //GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); Serial.println("Inicio programa"); delay(1000); } void loop() { String message = myNextion.listen(); // Check for message Serial.print(message); // call sensors.requestTemperatures() to issue a global temperature // request to all devices on the bus /********************************************************************/ Serial.print(" Requesting temperatures..."); sensors.requestTemperatures(); // Send the command to get temperature readings Serial.println("DONE"); /********************************************************************/ // You can have more than one DS18B20 on the same bus. // 0 refers to the first IC on the wire Serial.print("Temperature 1 is: "); Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"? temp1 = sensors.getTempCByIndex(0); Serial.print(" Temperature 2 is: "); Serial.println(sensors.getTempCByIndex(1)); // Why "byIndex"? temp2 = sensors.getTempCByIndex(1); /*********************************************************************/ /* toma valor de voltage * */ volts = analogRead(0); // Read value from divider module and divided by 5 // the maximum can read is 25Volts vtemp=volts/40.92; // volts=(int)vtemp; // Serial.print("Voltage: "); Serial.println(volts); delay(50);// Wait 50mS before next ranging if (message != "") { // if a message is received.... Serial.println(message); //...print out } if (message == "0" || pagina=="0" ) { pagina = "0"; Serial.print("Pagina: "); // ... print out Serial.print(pagina); Serial.print(" Boton: "); Serial.println(message); } if (message == "1" || pagina=="1" ) { pagina = "1"; Serial.print("Pagina: "); Serial.print(pagina); Serial.print(" Boton: "); Serial.println(message); myNextion.setComponentText("temp1", String(temp1,1)); // update text using original sensor value } if (message == "2" || pagina=="2" ) { pagina = "2"; Serial.print("Pagina: "); Serial.print(pagina); Serial.print(" Boton: "); Serial.println(message); myNextion.setComponentText("temp2", String(temp2,1)); // update text using original sensor value } if (message == "3" || pagina=="3" ) { pagina = "3"; Serial.print("Pagina: "); Serial.print(pagina); Serial.print(" Boton: "); Serial.println(message); Serial.print("Voltage: "); Serial.print(volts); myNextion.setComponentText("voltage", String(volts,1)); // update text using original sensor value } if (message == "4" || pagina=="4" ) { pagina = "4"; Serial.print("Pagina: "); Serial.print(pagina); Serial.print(" Boton: "); Serial.println(message); delay(2000); readGPS(); if (ID=="$GPGGA") { myNextion.setComponentText("ID", ID); // update text using GPS Value myNextion.setComponentText("UTC", UTC); // update text using GPS value myNextion.setComponentText("Lat", Lat); // update text using GPS value myNextion.setComponentText("Lon", Lon); // update text using GPS value myNextion.setComponentText("Alti", Alti); // update text using GPS value myNextion.setComponentText("Satt", Satt); // update text using GPS value myNextion.setComponentText("GEOid", GEOid); // update text using GPS value } } myNextion.setComponentText("temp1", String(temp1,1)); // update text using original sensor value myNextion.setComponentText("temp2", String(temp2,1)); // update text using original sensor value myNextion.setComponentText("voltage", String(volts,1)); // update text using original sensor value delay(1000); readGPS(); if (ID=="$GPGGA") { myNextion.setComponentText("ID", ID); // update text using GPS Value myNextion.setComponentText("UTC", UTC); // update text using GPS value myNextion.setComponentText("Lat", Lat); // update text using GPS value myNextion.setComponentText("Lon", Lon); // update text using GPS value myNextion.setComponentText("Alti", Alti); // update text using GPS value myNextion.setComponentText("Satt", Satt); // update text using GPS value myNextion.setComponentText("GEOid", GEOid); // update text using GPS value } } void readGPS() { String checksum; int idx1,idx2,idx3,idx4,idx5,idx6,idx7,idx8,idx9,idx10,idx11,idx12,idx13,idx14,idx15,idx16; NMEA1 = ""; if (myGPS.available()>0) { while (myGPS.available()>0 ) { c = myGPS.read(); NMEA1=NMEA1+c; } } Serial.println("NMEA:"); Serial.println(NMEA1); idx1=NMEA1.indexOf(','); idx2=NMEA1.indexOf(',',idx1 +1); idx3=NMEA1.indexOf(',',idx2 +1); idx4=NMEA1.indexOf(',',idx3 +1); idx5=NMEA1.indexOf(',',idx4 +1); idx6=NMEA1.indexOf(',',idx5 +1); idx7=NMEA1.indexOf(',',idx6 +1); idx8=NMEA1.indexOf(',',idx7 +1); idx9=NMEA1.indexOf(',',idx8 +1); idx10=NMEA1.indexOf(',',idx9 +1); idx11=NMEA1.indexOf(',',idx10 +1); idx12=NMEA1.indexOf(',',idx11 +1); idx13=NMEA1.indexOf(',',idx12 +1); idx14=NMEA1.indexOf(',',idx13 +1); idx15=NMEA1.indexOf(',',idx14 +1); idx16=NMEA1.indexOf(',',idx15 +1); ID = NMEA1.substring(0,idx1); UTC = NMEA1.substring(idx1+1,idx2); int utcidx; utcidx = UTC.indexOf('.'); String hrs = UTC.substring(0,utcidx-4); String min = UTC.substring(utcidx-4,utcidx-2); String sec = UTC.substring(utcidx-2,UTC.length()); UTC = String(hrs+":"+min+":"+sec); Lat = NMEA1.substring(idx2+1,idx3); NSInd = NMEA1.substring(idx3+1,idx4); if (NSInd =="N") { Lat = String(Lat+" N"); } else if (NSInd == "S") { Lat = String(Lat+" S"); } Lon = NMEA1.substring(idx4+1,idx5); WEInd = NMEA1.substring(idx5+1,idx6); if (WEInd == "W"){ Lon = String(Lon+" W"); } else if (WEInd == "E") { Lon = String(Lon+" E"); } PFix = NMEA1.substring(idx6+1,idx7); Satt = NMEA1.substring(idx7+1,idx8); HDOP = NMEA1.substring(idx8+1,idx9); Alti = NMEA1.substring(idx9+1,idx10); Units1 = NMEA1.substring(idx10+1,idx11); GEOid = NMEA1.substring(idx11+1,idx12); Units2 = NMEA1.substring(idx12+1,idx13); AoD = NMEA1.substring(idx13+1,idx14); Diff = NMEA1.substring(idx14+1,idx15); Checksum = NMEA1.substring(idx15+1,NMEA1.length()); if (ID=="$GPGGA") { Serial.print("Message ID: "); Serial.println(ID); Serial.print("UTC Time: "); Serial.println(UTC); //Serial.print("N/S Indicator: "); //Serial.println(NSInd); Serial.print("Latitude: "); Serial.println(Lat); Serial.print("Longitude: "); Serial.println(Lon); //Serial.print("E/W Indicator: "); //Serial.println(WEInd); Serial.print("Position FIX: "); Serial.println(PFix); Serial.print("Satellites Used: "); Serial.println(Satt); Serial.print("Altitude: "); Serial.println(Alti+" Meters"); Serial.print("GEO Id Separation: "); Serial.println(GEOid+" M"); } }