Code for sensor nodes connected by radio receiver with gateway
Dependencies: mbed WakeUp coapRadioClient DHT11
mainDistance.cpp
00001 #include "sensor.h" 00002 #include "mbed.h" 00003 #include "msg.h" 00004 #include "dbg.h" 00005 #include "coapClient.h" 00006 #include <string> 00007 00008 // https://os.mbed.com/users/Sissors/code/WakeUp/ 00009 #include "WakeUp.h" 00010 00011 #include "DHT11.h" 00012 #include "distanceMeter.h" 00013 00014 #define DATA_BUFFER_LEN 10 00015 #define BUFFER_LEN 32 00016 #define CHANNEL 4 00017 #define RX_ADDRESS 0xABCDEF08 00018 #define TX_ADDRESS 0xABCDEF13 00019 #define DATA_RATE 1000 00020 #define RETRANSMITS 4 00021 00022 char postUri[] = "/dist"; 00023 char getConfUri[] = "/conf/dist"; 00024 00025 Serial pc(USBTX, USBRX, 115200); // tx, rx 00026 PinName pinA = PinName(PB_3); 00027 PinName pinB = PinName(PA_10); 00028 uint8_t token[] = {2}; 00029 CoapClient coapClient = CoapClient(1, token, RETRANSMITS, DATA_RATE, CHANNEL, RX_ADDRESS, TX_ADDRESS); 00030 InterruptIn button(USER_BUTTON); 00031 00032 00033 // change this 00034 DistanceMeter sensor = DistanceMeter(pinA, pinB); 00035 00036 int config_interval = 30; 00037 int sense_interval = 10; 00038 00039 int config_time_left = 0; 00040 int sense_time_left = 0; 00041 00042 void check_for_new_config() { 00043 uint8_t buffer[BUFFER_LEN]; 00044 int ret = coapClient.get(buffer, BUFFER_LEN, getConfUri); 00045 if(ret > 0) { 00046 uint8_t sensor_id = 0; 00047 int data = -1; 00048 Msg::deconstruct_data_msg(&sensor_id, &data, buffer, ret); 00049 DBG("INTERVAL: %d", data); 00050 sense_interval = data; 00051 } 00052 DBG("GET: %d", ret); 00053 } 00054 00055 void collect_and_send_data() { 00056 uint8_t buffer[DATA_BUFFER_LEN]; 00057 int data = sensor.read(); 00058 DBG("DATA: %d", data); 00059 int sensor_id = sensor.getSensorId(); 00060 // TODO put sensor_id in URI, not in payload 00061 Msg::construct_data_msg(sensor_id, data, buffer, DATA_BUFFER_LEN); 00062 int ret = coapClient.post(buffer, DATA_BUFFER_LEN, postUri); 00063 DBG("POST: %d", ret); 00064 } 00065 00066 bool start = false; 00067 void send_packet() { 00068 DBG("Start"); 00069 start = true; 00070 } 00071 00072 00073 int main() { 00074 WakeUp::calibrate(); 00075 sensor.initialize(); 00076 DBG("RESTART"); 00077 int czas_na_spanko = 1; 00078 Timer t; 00079 button.rise(&send_packet); 00080 while(true) { 00081 while(start) { 00082 if (config_time_left <= 0) { 00083 check_for_new_config(); 00084 config_time_left = config_interval; 00085 } 00086 if (sense_time_left <= 0) { 00087 collect_and_send_data(); 00088 sense_time_left = sense_interval; 00089 } 00090 00091 czas_na_spanko = min(config_time_left, sense_time_left); 00092 DBG("SPANKO: %d", czas_na_spanko); 00093 if(czas_na_spanko > 0) { 00094 t.stop(); 00095 //WakeUp::set(czas_na_spanko); 00096 wait(czas_na_spanko); 00097 t.reset(); 00098 t.start(); 00099 config_time_left -= czas_na_spanko; 00100 sense_time_left -= czas_na_spanko; 00101 } else { 00102 config_time_left -= t.read_ms(); 00103 t.stop(); 00104 t.reset(); 00105 t.start(); 00106 } 00107 } 00108 } 00109 }
Generated on Fri Jul 15 2022 10:06:21 by 1.7.2