Code for sensor nodes connected by radio receiver with gateway
Dependencies: mbed WakeUp coapRadioClient DHT11
mainDistance.cpp@5:808964f041bf, 2019-01-25 (annotated)
- 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?
User | Revision | Line number | New 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 | } |