Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: GPSLibrary GSM mbed-modifed Storage_Library Temp_Library Wakeup pH_Sensor
Revision 15:5f366ddcce18, committed 2015-12-07
- Comitter:
- ptcrews
- Date:
- Mon Dec 07 00:07:31 2015 +0000
- Parent:
- 14:196ed16cd62b
- Commit message:
- Added comments.
Changed in this revision
--- a/GPS_Library.lib Sat Dec 05 07:36:48 2015 +0000 +++ b/GPS_Library.lib Mon Dec 07 00:07:31 2015 +0000 @@ -1,1 +1,1 @@ -http://developer.mbed.org/teams/Flotsam/code/GPSLibrary/#d28ff2012e9f +http://developer.mbed.org/teams/Flotsam/code/GPSLibrary/#1249c2cfdede
--- a/GSM_Library.lib Sat Dec 05 07:36:48 2015 +0000 +++ b/GSM_Library.lib Mon Dec 07 00:07:31 2015 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/Flotsam/code/GSM/#7f509d0d5c0e +https://developer.mbed.org/teams/Flotsam/code/GSM/#922cf54e97ec
--- a/Storage_Library.lib Sat Dec 05 07:36:48 2015 +0000 +++ b/Storage_Library.lib Mon Dec 07 00:07:31 2015 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/Flotsam/code/Storage_Library/#d096cf64dd33 +https://developer.mbed.org/teams/Flotsam/code/Storage_Library/#d43bb3c9c037
--- a/Temp_Library.lib Sat Dec 05 07:36:48 2015 +0000 +++ b/Temp_Library.lib Mon Dec 07 00:07:31 2015 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/Flotsam/code/Temp_Library/#a42f4353261f +https://developer.mbed.org/teams/Flotsam/code/Temp_Library/#fc58ae197a88
--- a/main.cpp Sat Dec 05 07:36:48 2015 +0000
+++ b/main.cpp Mon Dec 07 00:07:31 2015 +0000
@@ -1,36 +1,51 @@
+#include "main.h"
#include "GSM_Wrapper.h"
#include "WakeUp.h"
-#include "main.h"
#include "pH_Sensor.h"
#include "storage.h"
#include "GPS_Wrapper.h"
#include "Temp_Sensor.h"
#include <string>
-struct reading lastReadingBuffer;
-pH_Sensor pH;
-GPS_Sensor GPS;
-GSM_Sensor GSM;
-Temp_Sensor Temp;
-Storage storage;
-Serial pcSerial(USBTX, USBRX);
+#define PC_BAUD 115200 // High baud rate for PC serial connection
+#define GSM_INITIAL_DELAY 20 // Delay to allow GSM to initally turn on
+// Global sensor objects
+pH_Sensor pH; // pH Sensor object - initialized in setup()
+GPS_Sensor GPS; // GPS sensor object - initialized in setup()
+GSM_Sensor GSM; // GSM sensor object - initialized in setup()
+Temp_Sensor Temp; // Temperature sensor object - initialized in setup()
+Storage storage; // Storage sensor object - initialized in setup()
+Serial pcSerial(USBTX, USBRX); // PC serial communication -- initialized in setup(). Used for debugging
+
+// Function that sets up the PC serial connection. Used for printing debug statements
void setupPCSerial() {
wait(2);
- pcSerial.baud(115200);
+ pcSerial.baud(PC_BAUD);
pcSerial.printf("\n\n PC Serial connection established at 115200 baud.\n");
wait(2);
}
+/* Function: setup
+ * ---------------
+ * Sets up all the sensors and PC serial.
+ */
void setup() {
setupPCSerial();
GPS.setup();
pH.setup();
- wait(20);
+ // Delay to allow GSM to turn on initially
+ wait(GMS_INITIAL_DELAY);
+ // Turn the GSM back off
GSM.changePowerState();
}
-
+/* Function: enterSleep
+ * Enters deep sleep. Turns off all necessary
+ * sensors, and resets the clock after waking
+ * up (and turns the GPS on so that it can start getting
+ * a fix).
+ */
void enterSleep(int sec)
{
GPS.turnOff();
@@ -42,15 +57,38 @@
wait(2);
}
-void sendData(int& nreadings, bool& toSend)
+/* Function: read
+ * --------------
+ * Calls the read function for each sensor, and adds it
+ * to the reading buffer. Writes it to the perminant storage.
+ */
+void read(struct reading& lastReadingBuffer)
{
- struct reading* data = new struct reading[nreadings];
+ printf("~~~~~[pH]~~~~~\n");
+ lastReadingBuffer.pH = pH.read();
+ printf("~~~~~[Temperature]~~~~~\n");
+ lastReadingBuffer.temperature = Temp.read();
+ printf("~~~~~[GPS]~~~~~\n");
+ GPS.read(lastReadingBuffer);
+ storage.write((uint8_t *) &lastReadingBuffer, sizeof(struct reading));
+ GSM.changePowerState();
+}
+
+/* Function: send
+ * --------------
+ * Sends the data over GSM by reading from the
+ * nonvolitile storage. Only if it succeeds does it
+ * change the toSend bool to false (thus attempting to send
+ * the next time if it fails).
+ */
+void send(int& nreadings, bool& toSend)
+{
+ struct reading data[nreadings];
storage.read((uint8_t*) data);
- int sizeofentry = 8+8+10+10+5*sizeof(int)+8+1;
- size_t bufsize = sizeofentry*nreadings+1;
+ size_t bufsize = SIZE_OF_ENTRY*nreadings+1;
char buffer[bufsize];
for(int i = 0; i < nreadings; i++) {
- int n = sprintf(buffer+sizeofentry*i, "%8f %8f %10f %10f %d %d %d %d %d\t", data[i].temperature, data[i].pH, data[i].latitude, data[i].longitude, data[i].day,
+ int n = sprintf(buffer+SIZE_OF_ENTRY*i, "%8f %8f %10f %10f %d %d %d %d %d\t", data[i].temperature, data[i].pH, data[i].latitude, data[i].longitude, data[i].day,
data[i].month, data[i].year, data[i].hour, data[i].minutes);
}
if(GSM.send((uint8_t*) buffer, bufsize)) {
@@ -58,31 +96,25 @@
nreadings = 0;
storage.reset();
}
- delete[] data;
}
-void read()
-{
- printf("~~~~~[pH]~~~~~\n");
- lastReadingBuffer.pH = pH.read();
- printf("~~~~~[Temperature]~~~~~\n");
- lastReadingBuffer.temperature = Temp.read();
- printf("~~~~~[GPS]~~~~~\n");
- GPS.read(lastReadingBuffer);
- storage.write((uint8_t *) &lastReadingBuffer, READINGSIZE);
- GSM.changePowerState();
-}
-
+/* Function: main
+ * --------------
+ * Never returns. Calls setup, initializes nreadings and toSend,
+ * then repeatedly reads the sensors and sends the data (if
+ * the number of readings is correct) before entering sleep.
+ */
int main()
{
setup();
int nreadings = 0;
bool toSend = false;
while (true) {
- read();
+ struct reading lastReadingBuffer;
+ read(lastReadingBuffer);
nreadings++;
if(nreadings == N_READINGS_PER_SEND) toSend = true;
- if(toSend) sendData(nreadings, toSend);
+ if(toSend) send(nreadings, toSend);
GSM.changePowerState();
wait(2);
enterSleep(N_SECONDS_SLEEP);
--- a/main.h Sat Dec 05 07:36:48 2015 +0000
+++ b/main.h Mon Dec 07 00:07:31 2015 +0000
@@ -1,34 +1,35 @@
#include "mbed.h"
-#define N_READINGS_PER_SEND 5
-#define N_SECONDS_SLEEP 360
+#define URL "" //URL -- Required
+#define NETWORK_APN "fast.tmobile.com" //APN URL
-#define TMP_ANALOG A0
+#define N_READINGS_PER_SEND 5 // Readings to take before sending
+#define N_SECONDS_SLEEP 360 // Seconds between readings
+
+// Temperature sensor constant
+#define TMP_ANALOG A0 // Analog communication for temperature sensor
// Global Positioning System constants
-#define GPS_TX D6
-#define GPS_RX PB_11
-#define GPS_EN D7
-#define N_GPS_QUERIES 300000
-#define SEC_WAIT_FOR_FIX 60
-#define GPS_BAUD 9600
+#define GPS_TX D6 // Denotes TX port on the Nucleo, attached to RX port on GPS
+#define GPS_RX PB_11 // Likewise, TX port on GPS, RX on Nucleo
+#define GPS_EN D7 // Enable pin for power on/off. Connected to a digital pin
// pH sensor constants
-#define PH_TX PC_10
-#define PH_RX PC_11
+#define PH_TX PC_10 // Serial communication for pH
+#define PH_RX PC_11 // Serial communication for pH
// Cellular communication constants
-#define FONA_TX D8
-#define FONA_RX D2
-#define FONA_RST D3
-#define FONA_RI D4
-#define FONA_KEY D5
+#define FONA_TX D8 // Serial communication for GSM
+#define FONA_RX D2 // Serial communication for GSM
+#define FONA_RST D3 // Required for ported Adafruit Library
+#define FONA_RI D4 // "Ring Indicator" to recieve calls
+#define FONA_KEY D5 // Turns FONA off/on (pull to GRND for 2 seconds to change state)
-#define READINGSIZE sizeof(struct reading)
-#define URL "http://requestb.in/1ihfre81"
+#define SIZE_OF_ENTRY (45+5*sizeof(int)) // Size of each entry when converted to a string in main.cpp:send();
#ifndef _MAIN_H
#define _MAIN_H
+// Reading struct that includes the data for each reading we take
struct reading {
float temperature;
float pH;
--- a/pH_Library.lib Sat Dec 05 07:36:48 2015 +0000 +++ b/pH_Library.lib Mon Dec 07 00:07:31 2015 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/Flotsam/code/pH_Sensor/#1314058dbadb +https://developer.mbed.org/teams/Flotsam/code/pH_Sensor/#767f53c397ad