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: NTPclient Firebase-https
main.cpp@1:7f0e80fcb3a0, 2020-03-08 (annotated)
- Committer:
- star297
- Date:
- Sun Mar 08 14:45:02 2020 +0000
- Revision:
- 1:7f0e80fcb3a0
- Parent:
- 0:76248fdccc2a
Added NTP set RTC function.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| star297 | 0:76248fdccc2a | 1 | #include "mbed.h" |
| star297 | 0:76248fdccc2a | 2 | #include "Firebase.h" |
| star297 | 0:76248fdccc2a | 3 | #include "trng_api.h" |
| star297 | 1:7f0e80fcb3a0 | 4 | #include "NTPclient.h" |
| star297 | 0:76248fdccc2a | 5 | |
| star297 | 0:76248fdccc2a | 6 | DigitalOut led1(LED1,0); |
| star297 | 1:7f0e80fcb3a0 | 7 | DigitalOut led2(LED1,0); |
| star297 | 1:7f0e80fcb3a0 | 8 | DigitalOut led3(LED1,0); |
| star297 | 0:76248fdccc2a | 9 | |
| star297 | 0:76248fdccc2a | 10 | char dataPUT[200]; // PUT data container |
| star297 | 0:76248fdccc2a | 11 | char dataPOST[200]; // POST data container |
| star297 | 0:76248fdccc2a | 12 | char timebuff[100]; // timestamp container |
| star297 | 0:76248fdccc2a | 13 | |
| star297 | 0:76248fdccc2a | 14 | int PUTdata,POSTdata,GETdata,RTCsecond,Lastsecond,RTCminute,Lastminute,RTChour,Lasthour; |
| star297 | 0:76248fdccc2a | 15 | |
| star297 | 0:76248fdccc2a | 16 | void getRTC(),getSENSORS(); |
| star297 | 0:76248fdccc2a | 17 | |
| star297 | 0:76248fdccc2a | 18 | int main() |
| star297 | 0:76248fdccc2a | 19 | { |
| star297 | 1:7f0e80fcb3a0 | 20 | ThisThread::sleep_for(100); // allow time to reset |
| star297 | 0:76248fdccc2a | 21 | printf("\033[0m\033[2J\033[H\n ----- Firebase Example -----\r\n\n\n"); |
| star297 | 0:76248fdccc2a | 22 | printf("Initialise!\r\n\n"); |
| star297 | 1:7f0e80fcb3a0 | 23 | |
| star297 | 0:76248fdccc2a | 24 | // connect to the default connection access point |
| star297 | 1:7f0e80fcb3a0 | 25 | net = connect_to_default_network_interface(); |
| star297 | 1:7f0e80fcb3a0 | 26 | |
| star297 | 1:7f0e80fcb3a0 | 27 | // get NTP time and set RTC |
| star297 | 1:7f0e80fcb3a0 | 28 | NTPclient ntp(*net); |
| star297 | 1:7f0e80fcb3a0 | 29 | printf("\nConnecting to NTP server..\n"); |
| star297 | 1:7f0e80fcb3a0 | 30 | // NTP server address, timezone offset in seconds +/-, enable DST, set RTC |
| star297 | 1:7f0e80fcb3a0 | 31 | if(ntp.getNTP("0.pool.ntp.org",0,1,1)){ |
| star297 | 1:7f0e80fcb3a0 | 32 | time_t seconds = time(NULL); |
| star297 | 1:7f0e80fcb3a0 | 33 | printf("System time set by NTP: %s\n\n", ctime(&seconds)); |
| star297 | 1:7f0e80fcb3a0 | 34 | } |
| star297 | 1:7f0e80fcb3a0 | 35 | else{printf("No NTP could not set RTC !!\n\n"); |
| star297 | 1:7f0e80fcb3a0 | 36 | } |
| star297 | 0:76248fdccc2a | 37 | |
| star297 | 0:76248fdccc2a | 38 | printf("\nConnecting TLS re-use socket...!\n\n"); |
| star297 | 0:76248fdccc2a | 39 | TLSSocket* socket = new TLSSocket(); |
| star297 | 0:76248fdccc2a | 40 | startTLSreusesocket((char*)FirebaseID); |
| star297 | 0:76248fdccc2a | 41 | |
| star297 | 0:76248fdccc2a | 42 | printf("\nReady...!\n\n"); |
| star297 | 0:76248fdccc2a | 43 | |
| star297 | 0:76248fdccc2a | 44 | while(1){ |
| star297 | 0:76248fdccc2a | 45 | led1=1; |
| star297 | 0:76248fdccc2a | 46 | while(Lastsecond==RTCsecond){ // synchronise data upload with RTC |
| star297 | 0:76248fdccc2a | 47 | getRTC(); |
| star297 | 0:76248fdccc2a | 48 | } |
| star297 | 0:76248fdccc2a | 49 | Lastsecond=RTCsecond; |
| star297 | 0:76248fdccc2a | 50 | |
| star297 | 0:76248fdccc2a | 51 | getSENSORS(); // get sensor data. |
| star297 | 0:76248fdccc2a | 52 | led1=0; |
| star297 | 0:76248fdccc2a | 53 | |
| star297 | 0:76248fdccc2a | 54 | if(RTCsecond%10==0){PUTdata=1;} // PUT 10 second counter |
| star297 | 0:76248fdccc2a | 55 | if(RTCsecond==0){GETdata=1;} // GET minute counter |
| star297 | 1:7f0e80fcb3a0 | 56 | if(RTCminute==0 && RTCsecond==0){POSTdata=1;} // POST hour counter |
| star297 | 0:76248fdccc2a | 57 | |
| star297 | 0:76248fdccc2a | 58 | if(PUTdata){ // PUT data to Firebase, initialise a data block the updates it on subsiquent PUT's |
| star297 | 0:76248fdccc2a | 59 | led3=1; |
| star297 | 0:76248fdccc2a | 60 | strcpy(FirebaseUrl, FirebaseID); // Firebase account ID |
| star297 | 0:76248fdccc2a | 61 | strcat(FirebaseUrl, "/Test/Current/.json?auth="); // bit in the middle to send .json data and authority |
| star297 | 0:76248fdccc2a | 62 | strcat(FirebaseUrl, FirebaseAuth); // Firebase account authorisation key |
| star297 | 0:76248fdccc2a | 63 | if(putFirebase((char*)FirebaseUrl,(char*)dataPUT)){ |
| star297 | 0:76248fdccc2a | 64 | printf("PUT Current okay, time: %s\n",timebuff); |
| star297 | 0:76248fdccc2a | 65 | } |
| star297 | 0:76248fdccc2a | 66 | PUTdata=0; |
| star297 | 0:76248fdccc2a | 67 | led3=0; |
| star297 | 0:76248fdccc2a | 68 | } |
| star297 | 0:76248fdccc2a | 69 | if(POSTdata){ // POST data to Firebase, adds records |
| star297 | 0:76248fdccc2a | 70 | led3=1; |
| star297 | 0:76248fdccc2a | 71 | strcpy(FirebaseUrl, FirebaseID); // Firebase account ID |
| star297 | 0:76248fdccc2a | 72 | strcat(FirebaseUrl, "/Test/History/.json?auth="); // bit in the middle to send .json data and authority |
| star297 | 0:76248fdccc2a | 73 | strcat(FirebaseUrl, FirebaseAuth); // Firebase account authorisation key |
| star297 | 0:76248fdccc2a | 74 | if(postFirebase((char*)FirebaseUrl,(char*)dataPOST)){ |
| star297 | 0:76248fdccc2a | 75 | printf("POST History okay, time: %s\n",timebuff); |
| star297 | 0:76248fdccc2a | 76 | } |
| star297 | 0:76248fdccc2a | 77 | POSTdata=0; |
| star297 | 0:76248fdccc2a | 78 | led3=0; |
| star297 | 0:76248fdccc2a | 79 | } |
| star297 | 0:76248fdccc2a | 80 | if(GETdata){ // retrieve data from Firebase |
| star297 | 0:76248fdccc2a | 81 | led2=1; |
| star297 | 0:76248fdccc2a | 82 | strcpy(FirebaseUrl, FirebaseID); // Firebase account ID |
| star297 | 1:7f0e80fcb3a0 | 83 | strcat(FirebaseUrl, "/Mill/Current/.json?auth="); // bit in the middle to send .json data and authority |
| star297 | 0:76248fdccc2a | 84 | strcat(FirebaseUrl, FirebaseAuth); // Firebase account authorisation key |
| star297 | 0:76248fdccc2a | 85 | printf("\nGET current... time: %s\n",timebuff); |
| star297 | 0:76248fdccc2a | 86 | printf("%s \n\n",getFirebase((char*)FirebaseUrl)); |
| star297 | 0:76248fdccc2a | 87 | GETdata=0; |
| star297 | 0:76248fdccc2a | 88 | led2=0; |
| star297 | 0:76248fdccc2a | 89 | } |
| star297 | 0:76248fdccc2a | 90 | } |
| star297 | 0:76248fdccc2a | 91 | } |
| star297 | 0:76248fdccc2a | 92 | |
| star297 | 0:76248fdccc2a | 93 | void getSENSORS() |
| star297 | 0:76248fdccc2a | 94 | { |
| star297 | 0:76248fdccc2a | 95 | // dummy sensor values, change these if you add real sensors eg, BME280, DS1820 etc. |
| star297 | 0:76248fdccc2a | 96 | // STM32F7 trng |
| star297 | 1:7f0e80fcb3a0 | 97 | //RCC->AHB2ENR |= RCC_AHB2ENR_RNGEN; // Enable RNG clock source |
| star297 | 1:7f0e80fcb3a0 | 98 | //RNG->CR |= RNG_CR_RNGEN; // RNG Peripheral enable |
| star297 | 1:7f0e80fcb3a0 | 99 | //while (!(RNG->SR & (RNG_SR_DRDY))); // Wait until one RNG number is ready |
| star297 | 1:7f0e80fcb3a0 | 100 | //int num = RNG->DR; |
| star297 | 1:7f0e80fcb3a0 | 101 | //num = abs(num%100); |
| star297 | 0:76248fdccc2a | 102 | |
| star297 | 1:7f0e80fcb3a0 | 103 | int num = abs(rand()%100); |
| star297 | 0:76248fdccc2a | 104 | //printf("RNG: %d\n",num); |
| star297 | 0:76248fdccc2a | 105 | |
| star297 | 0:76248fdccc2a | 106 | char Temp[5][7] = {"23.80","72.50","65.00","45.30","30.60"}; |
| star297 | 0:76248fdccc2a | 107 | float temp1 = (num/1.3), temp2 = (num*1.13), humidity = (num), pressure = (985+num); |
| star297 | 0:76248fdccc2a | 108 | // POST data |
| star297 | 0:76248fdccc2a | 109 | sprintf(dataPOST,"{\"Temp0\" : \"%s\",\"Temp1\" : \"%s\",\"Temp2\" : \"%s\",\"Temp3\" : \"%s\",\"Temp4\" : \"%s\",\"Time\" : \"%s\"}", |
| star297 | 0:76248fdccc2a | 110 | Temp[0],Temp[1],Temp[2],Temp[3],Temp[4],timebuff); |
| star297 | 0:76248fdccc2a | 111 | // PUT data |
| star297 | 0:76248fdccc2a | 112 | sprintf(dataPUT,"{\"TempIn\" : \"%3.2f\", \"TempOut\" : \"%3.2f\",\"Humidity\" : \"%2.2f\",\"Pressure\" : \"%4.2f\", \"Time\" : \"%s\"}", |
| star297 | 0:76248fdccc2a | 113 | temp1,temp2,humidity,pressure,timebuff); |
| star297 | 0:76248fdccc2a | 114 | } |
| star297 | 0:76248fdccc2a | 115 | |
| star297 | 0:76248fdccc2a | 116 | void getRTC() |
| star297 | 0:76248fdccc2a | 117 | { |
| star297 | 0:76248fdccc2a | 118 | time_t seconds = time(NULL); |
| star297 | 0:76248fdccc2a | 119 | strftime(timebuff, 3,"%H", localtime(&seconds)); |
| star297 | 0:76248fdccc2a | 120 | RTChour = atoi(timebuff); |
| star297 | 0:76248fdccc2a | 121 | strftime(timebuff, 3,"%M", localtime(&seconds)); |
| star297 | 0:76248fdccc2a | 122 | RTCminute = atoi(timebuff); |
| star297 | 0:76248fdccc2a | 123 | strftime(timebuff, 3,"%S", localtime(&seconds)); |
| star297 | 0:76248fdccc2a | 124 | RTCsecond = atoi(timebuff); |
| star297 | 0:76248fdccc2a | 125 | strftime(timebuff,50,"%H:%M:%S %m/%d/%Y ", localtime(&seconds)); |
| star297 | 0:76248fdccc2a | 126 | } |
| star297 | 0:76248fdccc2a | 127 | |
| star297 | 0:76248fdccc2a | 128 |