Code for sensor nodes connected by radio receiver with gateway

Dependencies:   mbed WakeUp coapRadioClient DHT11

Committer:
Ka_myk
Date:
Fri Jan 25 02:08:12 2019 +0000
Revision:
5:808964f041bf
Parent:
4:aa980c0a2775
Child:
6:5102672e8ff4
ctrl v

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ka_myk 5:808964f041bf 1 #include "sensor.h"
Ka_myk 5:808964f041bf 2 #include "mbed.h"
Ka_myk 5:808964f041bf 3 #include "msg.h"
Ka_myk 5:808964f041bf 4 #include "dbg.h"
Ka_myk 5:808964f041bf 5 #include "coapClient.h"
Ka_myk 5:808964f041bf 6 #include <string>
Ka_myk 5:808964f041bf 7
Ka_myk 5:808964f041bf 8 // https://os.mbed.com/users/Sissors/code/WakeUp/
Ka_myk 5:808964f041bf 9 #include "WakeUp.h"
Ka_myk 5:808964f041bf 10
Ka_myk 5:808964f041bf 11 #include "DHT11.h"
Ka_myk 5:808964f041bf 12 #include "distasnceMeter.h"
Ka_myk 5:808964f041bf 13
Ka_myk 5:808964f041bf 14 #define DATA_BUFFER_LEN 10
Ka_myk 5:808964f041bf 15 #define BUFFER_LEN 32
Ka_myk 5:808964f041bf 16 #define CHANNEL 4
Ka_myk 5:808964f041bf 17 #define RX_ADDRESS 0xABCDEF08
Ka_myk 5:808964f041bf 18 #define TX_ADDRESS 0xABCDEF11
Ka_myk 5:808964f041bf 19 #define DATA_RATE 1000
Ka_myk 5:808964f041bf 20 #define RETRANSMITS 4
Ka_myk 5:808964f041bf 21
Ka_myk 5:808964f041bf 22 char postUri[] = "/dist";
Ka_myk 5:808964f041bf 23 char getConfUri[] = "/conf/dist";
Ka_myk 5:808964f041bf 24
Ka_myk 5:808964f041bf 25 Serial pc(USBTX, USBRX); // tx, rx
Ka_myk 5:808964f041bf 26 PinName pinA = PinName(PB_3);
Ka_myk 5:808964f041bf 27 PinName pinB = PinName(PA_10);
Ka_myk 5:808964f041bf 28 uint8_t token[] = {2};
Ka_myk 5:808964f041bf 29 CoapClient coapClient = CoapClient(token, RETRANSMITS, DATA_RATE, CHANNEL, RX_ADDRESS, TX_ADDRESS);
Ka_myk 5:808964f041bf 30 InterruptIn button(USER_BUTTON);
Ka_myk 5:808964f041bf 31
Ka_myk 5:808964f041bf 32
Ka_myk 5:808964f041bf 33 // change this
Ka_myk 5:808964f041bf 34 DistanceMeter sensor = DistanceMeter(pinA, pinB);
Ka_myk 5:808964f041bf 35
Ka_myk 5:808964f041bf 36 int config_interval = 30;
Ka_myk 5:808964f041bf 37 int sense_interval = 10;
Ka_myk 5:808964f041bf 38
Ka_myk 5:808964f041bf 39 int config_time_left = 0;
Ka_myk 5:808964f041bf 40 int sense_time_left = 0;
Ka_myk 5:808964f041bf 41
Ka_myk 5:808964f041bf 42 void check_for_new_config() {
Ka_myk 5:808964f041bf 43 uint8_t buffer[BUFFER_LEN];
Ka_myk 5:808964f041bf 44 int ret = coapClient.get(buffer, BUFFER_LEN, getConfUri);
Ka_myk 5:808964f041bf 45 if(ret > 0) {
Ka_myk 5:808964f041bf 46 uint8_t sensor_id = 0;
Ka_myk 5:808964f041bf 47 int data = -1;
Ka_myk 5:808964f041bf 48 Msg::deconstruct_data_msg(&sensor_id, &data, buffer, ret);
Ka_myk 5:808964f041bf 49 DBG("INTERVAL: %d", data);
Ka_myk 5:808964f041bf 50 sense_interval = data;
Ka_myk 5:808964f041bf 51 }
Ka_myk 5:808964f041bf 52 DBG("GET: %d", ret);
Ka_myk 5:808964f041bf 53 }
Ka_myk 5:808964f041bf 54
Ka_myk 5:808964f041bf 55 void collect_and_send_data() {
Ka_myk 5:808964f041bf 56 uint8_t buffer[DATA_BUFFER_LEN];
Ka_myk 5:808964f041bf 57 int data = sensor.read();
Ka_myk 5:808964f041bf 58 DBG("DATA: %d", data);
Ka_myk 5:808964f041bf 59 int sensor_id = sensor.getSensorId();
Ka_myk 5:808964f041bf 60 // TODO put sensor_id in URI, not in payload
Ka_myk 5:808964f041bf 61 Msg::construct_data_msg(sensor_id, data, buffer, DATA_BUFFER_LEN);
Ka_myk 5:808964f041bf 62 int ret = coapClient.post(buffer, DATA_BUFFER_LEN, postUri);
Ka_myk 5:808964f041bf 63 DBG("POST: %d", ret);
Ka_myk 5:808964f041bf 64 }
Ka_myk 5:808964f041bf 65
Ka_myk 5:808964f041bf 66 bool start = false;
Ka_myk 5:808964f041bf 67 void send_packet() {
Ka_myk 5:808964f041bf 68 DBG("Start");
Ka_myk 5:808964f041bf 69 start = true;
Ka_myk 5:808964f041bf 70 }
Ka_myk 5:808964f041bf 71
Ka_myk 5:808964f041bf 72
Ka_myk 5:808964f041bf 73 int main() {
Ka_myk 5:808964f041bf 74 pc.baud(115200);
Ka_myk 5:808964f041bf 75 WakeUp::calibrate();
Ka_myk 5:808964f041bf 76 sensor.initialize();
Ka_myk 5:808964f041bf 77 sensor2.initialize();
Ka_myk 5:808964f041bf 78 DBG("RESTART");
Ka_myk 5:808964f041bf 79 int czas_na_spanko = 1;
Ka_myk 5:808964f041bf 80 Timer t;
Ka_myk 5:808964f041bf 81 button.rise(&send_packet);
Ka_myk 5:808964f041bf 82 while(true) {
Ka_myk 5:808964f041bf 83 while(start) {
Ka_myk 5:808964f041bf 84 if (config_time_left <= 0) {
Ka_myk 5:808964f041bf 85 check_for_new_config();
Ka_myk 5:808964f041bf 86 config_time_left = config_interval;
Ka_myk 5:808964f041bf 87 }
Ka_myk 5:808964f041bf 88 if (sense_time_left <= 0) {
Ka_myk 5:808964f041bf 89 collect_and_send_data();
Ka_myk 5:808964f041bf 90 sense_time_left = sense_interval;
Ka_myk 5:808964f041bf 91 }
Ka_myk 5:808964f041bf 92
Ka_myk 5:808964f041bf 93 czas_na_spanko = min(config_time_left, sense_time_left);
Ka_myk 5:808964f041bf 94 DBG("SPANKO: %d", czas_na_spanko);
Ka_myk 5:808964f041bf 95 if(czas_na_spanko > 0) {
Ka_myk 5:808964f041bf 96 t.stop();
Ka_myk 5:808964f041bf 97 //WakeUp::set(czas_na_spanko);
Ka_myk 5:808964f041bf 98 wait(czas_na_spanko);
Ka_myk 5:808964f041bf 99 t.reset();
Ka_myk 5:808964f041bf 100 t.start();
Ka_myk 5:808964f041bf 101 config_time_left -= czas_na_spanko;
Ka_myk 5:808964f041bf 102 sense_time_left -= czas_na_spanko;
Ka_myk 5:808964f041bf 103 } else {
Ka_myk 5:808964f041bf 104 config_time_left -= t.read_ms();
Ka_myk 5:808964f041bf 105 t.stop();
Ka_myk 5:808964f041bf 106 t.reset();
Ka_myk 5:808964f041bf 107 t.start();
Ka_myk 5:808964f041bf 108 }
Ka_myk 5:808964f041bf 109 }
Ka_myk 5:808964f041bf 110 }
Ka_myk 5:808964f041bf 111 }