To measure temperature from DHT11 temp and RH sensor.

Dependencies:   DHT GPS MTS-Serial libmDot mbed-rtos mbed

Fork of mDot_LoRa_Connect_Example by MultiTech

Committer:
Mehrad
Date:
Fri Jun 10 00:13:36 2016 +0000
Revision:
5:bd93324bc2a9
Parent:
4:36e214ebfa56
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mfiore 0:09250cd371d2 1 #include "mbed.h"
mfiore 0:09250cd371d2 2 #include "mDot.h"
mfiore 4:36e214ebfa56 3 #include "MTSLog.h"
Mehrad 5:bd93324bc2a9 4 #include "MTSSerial.h"
mfiore 0:09250cd371d2 5 #include <string>
mfiore 0:09250cd371d2 6 #include <vector>
mfiore 4:36e214ebfa56 7 #include <algorithm>
Mehrad 5:bd93324bc2a9 8 #include <sstream>
Mehrad 5:bd93324bc2a9 9 #include <iomanip>
Mehrad 5:bd93324bc2a9 10 #include "DHT.h"
Mehrad 5:bd93324bc2a9 11 //#include "PulseCounter.h"
mfiore 0:09250cd371d2 12
mfiore 2:6e2c378339d9 13 // these options must match the settings on your Conduit
mfiore 2:6e2c378339d9 14 // uncomment the following lines and edit their values to match your configuration
Mehrad 5:bd93324bc2a9 15 static std::string config_network_name = "campbellsci";
Mehrad 5:bd93324bc2a9 16 static std::string config_network_pass = "campbellsci";
Mehrad 5:bd93324bc2a9 17 static uint8_t config_frequency_sub_band = 1;
Mehrad 5:bd93324bc2a9 18
Mehrad 5:bd93324bc2a9 19 DigitalOut greenLed(PA_11); // To turn the join LED on/off
Mehrad 5:bd93324bc2a9 20
Mehrad 5:bd93324bc2a9 21 std::string VectorInt8_To_StrHex (const vector<uint8_t>& v)
Mehrad 5:bd93324bc2a9 22 {
Mehrad 5:bd93324bc2a9 23 stringstream ss;
Mehrad 5:bd93324bc2a9 24 ss << std::hex << std::setfill('0');
Mehrad 5:bd93324bc2a9 25 vector<uint8_t>::const_iterator it;
Mehrad 5:bd93324bc2a9 26
Mehrad 5:bd93324bc2a9 27 for (it = v.begin(); it != v.end(); it++) {
Mehrad 5:bd93324bc2a9 28 ss << ":" << std::setw(2) << static_cast<unsigned>(*it);
Mehrad 5:bd93324bc2a9 29 }
Mehrad 5:bd93324bc2a9 30 return ss.str();
Mehrad 5:bd93324bc2a9 31 }
Mehrad 5:bd93324bc2a9 32
Mehrad 5:bd93324bc2a9 33 std::string VectorInt32_To_StrDec (const vector<uint32_t>& v)
Mehrad 5:bd93324bc2a9 34 {
Mehrad 5:bd93324bc2a9 35 // Serial output for debugging
Mehrad 5:bd93324bc2a9 36 //mts::MTSSerial serial(XBEE_DOUT, XBEE_DIN, 512, 512);
Mehrad 5:bd93324bc2a9 37 //serial.baud(115200);
Mehrad 5:bd93324bc2a9 38 //mts::MTSSerial& _serial(serial);
Mehrad 5:bd93324bc2a9 39 stringstream ss;
Mehrad 5:bd93324bc2a9 40 // Body
Mehrad 5:bd93324bc2a9 41 ss << std::dec << std::setfill('0');
Mehrad 5:bd93324bc2a9 42 vector<uint32_t>::const_iterator it;
mfiore 0:09250cd371d2 43
Mehrad 5:bd93324bc2a9 44 for (it = v.begin(); it != v.end(); it++) {
Mehrad 5:bd93324bc2a9 45 ss << ":" << std::setw(3) << static_cast<unsigned>(*it);
Mehrad 5:bd93324bc2a9 46 //_serial.writef(static_cast<unsigned>(*it));
Mehrad 5:bd93324bc2a9 47 }
Mehrad 5:bd93324bc2a9 48 return ss.str();
Mehrad 5:bd93324bc2a9 49 }
Mehrad 5:bd93324bc2a9 50
Mehrad 5:bd93324bc2a9 51 std::string VectorMdotFile_To_List (const vector<mDot::mdot_file>& v)
Mehrad 5:bd93324bc2a9 52 {
Mehrad 5:bd93324bc2a9 53 // Serial output for debugging
Mehrad 5:bd93324bc2a9 54 mts::MTSSerial serial(XBEE_DOUT, XBEE_DIN, 512, 512);
Mehrad 5:bd93324bc2a9 55 serial.baud(115200);
Mehrad 5:bd93324bc2a9 56 mts::MTSSerial& _serial(serial);
Mehrad 5:bd93324bc2a9 57
Mehrad 5:bd93324bc2a9 58 stringstream ss;
Mehrad 5:bd93324bc2a9 59 vector<mDot::mdot_file>::const_iterator it;
Mehrad 5:bd93324bc2a9 60
Mehrad 5:bd93324bc2a9 61 _serial.writef(" DEBUG: Vector size for user files list %d\r\n" , v.size());
Mehrad 5:bd93324bc2a9 62
Mehrad 5:bd93324bc2a9 63 for (it = v.begin(); it != v.end(); it++) {
Mehrad 5:bd93324bc2a9 64 ss << (*it).name << " " ;
Mehrad 5:bd93324bc2a9 65 }
Mehrad 5:bd93324bc2a9 66 return ss.str();
Mehrad 5:bd93324bc2a9 67 }
Mehrad 5:bd93324bc2a9 68
Mehrad 5:bd93324bc2a9 69 int main()
Mehrad 5:bd93324bc2a9 70 {
Mehrad 5:bd93324bc2a9 71 greenLed = 0;
Mehrad 5:bd93324bc2a9 72
Mehrad 5:bd93324bc2a9 73 // To read DHT11 RH Sensor
Mehrad 5:bd93324bc2a9 74 DHT dht (PB_1, DHT11);
Mehrad 5:bd93324bc2a9 75
mfiore 0:09250cd371d2 76 int32_t ret;
mfiore 0:09250cd371d2 77 mDot* dot;
mfiore 0:09250cd371d2 78 std::vector<uint8_t> data;
Mehrad 5:bd93324bc2a9 79 //std::string data_str = "hello!";
Mehrad 5:bd93324bc2a9 80 AnalogIn in(PB_1);
Mehrad 5:bd93324bc2a9 81 std::ostringstream ss;
Mehrad 5:bd93324bc2a9 82 std::string data_str = "Hello";
Mehrad 5:bd93324bc2a9 83 //ss << in.read_u16();
Mehrad 5:bd93324bc2a9 84 //data_str = ss.str();
Mehrad 5:bd93324bc2a9 85
mfiore 0:09250cd371d2 86 // get a mDot handle
mfiore 0:09250cd371d2 87 dot = mDot::getInstance();
Mehrad 5:bd93324bc2a9 88
Mehrad 5:bd93324bc2a9 89 // This section is to enable the debuging info over serial (rs232)
Mehrad 5:bd93324bc2a9 90 mts::MTSSerial serial(XBEE_DOUT, XBEE_DIN, 512, 512);
Mehrad 5:bd93324bc2a9 91 serial.baud(115200);
Mehrad 5:bd93324bc2a9 92 mts::MTSSerial& _serial(serial);
Mehrad 5:bd93324bc2a9 93 // Hello world
Mehrad 5:bd93324bc2a9 94 _serial.writef("\r\n\r\n\r\n\r\n");
Mehrad 5:bd93324bc2a9 95 _serial.writef("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \r\n");
Mehrad 5:bd93324bc2a9 96 _serial.writef("+ Hello mDot + \r\n");
Mehrad 5:bd93324bc2a9 97 _serial.writef("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \r\n");
Mehrad 5:bd93324bc2a9 98
Mehrad 5:bd93324bc2a9 99
Mehrad 5:bd93324bc2a9 100
mfiore 2:6e2c378339d9 101 // print library version information
Mehrad 5:bd93324bc2a9 102 _serial.writef("INFO: version: %s\r\n", dot->getId().c_str());
mfiore 0:09250cd371d2 103
mfiore 2:6e2c378339d9 104 //*******************************************
mfiore 2:6e2c378339d9 105 // configuration
mfiore 2:6e2c378339d9 106 //*******************************************
mfiore 0:09250cd371d2 107 // reset to default config so we know what state we're in
mfiore 0:09250cd371d2 108 dot->resetConfig();
Mehrad 5:bd93324bc2a9 109
mfiore 4:36e214ebfa56 110 dot->setLogLevel(mts::MTSLog::INFO_LEVEL);
mfiore 0:09250cd371d2 111
mfiore 2:6e2c378339d9 112 // set up the mDot with our network information: frequency sub band, network name, and network password
mfiore 2:6e2c378339d9 113 // these can all be saved in NVM so they don't need to be set every time - see mDot::saveConfig()
Mehrad 5:bd93324bc2a9 114
mfiore 4:36e214ebfa56 115 // frequency sub band is only applicable in the 915 (US) frequency band
mfiore 4:36e214ebfa56 116 // if using a MultiTech Conduit gateway, use the same sub band as your Conduit (1-8) - the mDot will use the 8 channels in that sub band
mfiore 4:36e214ebfa56 117 // if using a gateway that supports all 64 channels, use sub band 0 - the mDot will use all 64 channels
Mehrad 5:bd93324bc2a9 118 _serial.writef("INFO: setting frequency sub band: %d\r\n", config_frequency_sub_band);
mfiore 0:09250cd371d2 119 if ((ret = dot->setFrequencySubBand(config_frequency_sub_band)) != mDot::MDOT_OK) {
Mehrad 5:bd93324bc2a9 120 _serial.writef("ERROR: failed to set frequency sub band %d:%s\r\n", ret, mDot::getReturnCodeString(ret).c_str());
Mehrad 5:bd93324bc2a9 121 }
Mehrad 5:bd93324bc2a9 122
Mehrad 5:bd93324bc2a9 123 /* Dont' need network name when setting it network EUI
Mehrad 5:bd93324bc2a9 124 _serial.writef("INFO: setting network name: %s\r\n", config_network_name.c_str());
Mehrad 5:bd93324bc2a9 125 if ((ret = dot->setNetworkName(config_network_name)) != mDot::MDOT_OK) {
Mehrad 5:bd93324bc2a9 126 _serial.writef("ERROR: failed to set network name %d:%s\r\n", ret, mDot::getReturnCodeString(ret).c_str());
Mehrad 5:bd93324bc2a9 127 }
Mehrad 5:bd93324bc2a9 128 */
Mehrad 5:bd93324bc2a9 129 // Initializing a vecotr in C++
Mehrad 5:bd93324bc2a9 130 // This compiler doesn't accept -> static std::vector<uint8_t> config_network_key {00,00,00,00,00,00,00,01};
Mehrad 5:bd93324bc2a9 131 static std::uint8_t netId[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01};
Mehrad 5:bd93324bc2a9 132 static std::vector<uint8_t> netIdV(&netId[0], &netId[0] + 8); // It is +8 since 8 members. You need start and end of the array.
Mehrad 5:bd93324bc2a9 133 _serial.writef("INFO: setting network ID (EUI): %s\r\n", VectorInt8_To_StrHex(netIdV));
Mehrad 5:bd93324bc2a9 134 if ((ret = dot->setNetworkId(netIdV)) != mDot::MDOT_OK) {
Mehrad 5:bd93324bc2a9 135 _serial.writef("ERROR: failed to set network ID %d:%s\r\n", ret, mDot::getReturnCodeString(ret).c_str());
mfiore 2:6e2c378339d9 136 }
Mehrad 5:bd93324bc2a9 137 /*
Mehrad 5:bd93324bc2a9 138 _serial.writef("INFO: setting network password: %s\r\n", config_network_pass.c_str());
Mehrad 5:bd93324bc2a9 139 if ((ret = dot->setNetworkPassphrase(config_network_pass)) != mDot::MDOT_OK) {
Mehrad 5:bd93324bc2a9 140 _serial.writef("ERROR: failed to set network password %d:%s\r\n", ret, mDot::getReturnCodeString(ret).c_str());
Mehrad 5:bd93324bc2a9 141 }
Mehrad 5:bd93324bc2a9 142 */
Mehrad 5:bd93324bc2a9 143 // Initializing a vecotr in C++
Mehrad 5:bd93324bc2a9 144 static std::uint8_t netKey[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01};
Mehrad 5:bd93324bc2a9 145 static std::vector<uint8_t> netKeyV(&netKey[0], &netKey[0] + 16); // It is +16 since 16 members. You need start and end of the array.
Mehrad 5:bd93324bc2a9 146 _serial.writef("INFO: setting network key: %s\r\n", VectorInt8_To_StrHex(netKeyV));
Mehrad 5:bd93324bc2a9 147 if ((ret = dot->setNetworkKey(netKeyV)) != mDot::MDOT_OK) {
Mehrad 5:bd93324bc2a9 148 _serial.writef("ERROR: failed to set network key %d:%s\r\n", ret, mDot::getReturnCodeString(ret).c_str());
mfiore 0:09250cd371d2 149 }
Mehrad 5:bd93324bc2a9 150
Mehrad 5:bd93324bc2a9 151 bool adrStatus = false;
Mehrad 5:bd93324bc2a9 152 _serial.writef("ADR Status is %d\r\n", (*dot).getAdr());
Mehrad 5:bd93324bc2a9 153 _serial.writef("INFO: setting Adr %d: \r\n", adrStatus);
Mehrad 5:bd93324bc2a9 154 if ((ret = dot->setAdr(adrStatus)) != mDot::MDOT_OK) {
Mehrad 5:bd93324bc2a9 155 _serial.writef("ERROR: failed to set ADR %d:%s\r\n", ret, mDot::getReturnCodeString(ret).c_str());
Mehrad 5:bd93324bc2a9 156 } else {
Mehrad 5:bd93324bc2a9 157 _serial.writef("Data Rate: %d\r\n", (*dot).getTxDataRate());
Mehrad 5:bd93324bc2a9 158 _serial.writef("ADR Status is %d\r\n", (*dot).getAdr());
Mehrad 5:bd93324bc2a9 159
mfiore 0:09250cd371d2 160 }
Mehrad 5:bd93324bc2a9 161
Mehrad 5:bd93324bc2a9 162 /*
mfiore 4:36e214ebfa56 163 // a higher spreading factor allows for longer range but lower throughput
mfiore 4:36e214ebfa56 164 // in the 915 (US) frequency band, spreading factors 7 - 10 are available
mfiore 4:36e214ebfa56 165 // in the 868 (EU) frequency band, spreading factors 7 - 12 are available
Mehrad 5:bd93324bc2a9 166 _serial.writef("INFO: setting TX data rate: ");
Mehrad 5:bd93324bc2a9 167 if ((ret = dot->setTxDataRate(mDot::DR2)) != mDot::MDOT_OK) {
Mehrad 5:bd93324bc2a9 168 _serial.writef("ERROR: failed to set TX datarate %d:%s\r\n", ret, mDot::getReturnCodeString(ret).c_str());
Mehrad 5:bd93324bc2a9 169 } else
Mehrad 5:bd93324bc2a9 170 _serial.writef("%d\r\n", (*dot).getTxDataRate());
Mehrad 5:bd93324bc2a9 171
Mehrad 5:bd93324bc2a9 172 */
Mehrad 5:bd93324bc2a9 173
Mehrad 5:bd93324bc2a9 174
mfiore 4:36e214ebfa56 175 // request receive confirmation of packets from the gateway
Mehrad 5:bd93324bc2a9 176 _serial.writef("INFO: enabling ACKs\r\n");
mfiore 4:36e214ebfa56 177 if ((ret = dot->setAck(1)) != mDot::MDOT_OK) {
Mehrad 5:bd93324bc2a9 178 _serial.writef("ERROR: failed to enable ACKs %d:%s\r\n", ret, mDot::getReturnCodeString(ret).c_str());
Mehrad 5:bd93324bc2a9 179 }
Mehrad 5:bd93324bc2a9 180
Mehrad 5:bd93324bc2a9 181 // Public Network Mode
Mehrad 5:bd93324bc2a9 182 _serial.writef("INFO: Public network state: %d\r\n", (*dot).getPublicNetwork());
Mehrad 5:bd93324bc2a9 183 _serial.writef("INFO: enabling Public network mode\r\n");
Mehrad 5:bd93324bc2a9 184 if ((ret = dot->setPublicNetwork(1)) != mDot::MDOT_OK) {
Mehrad 5:bd93324bc2a9 185 _serial.writef("ERROR: failed to enable Public Mode %d:%s\r\n", ret, mDot::getReturnCodeString(ret).c_str());
mfiore 4:36e214ebfa56 186 }
Mehrad 5:bd93324bc2a9 187 _serial.writef("INFO: Public network state: %d\r\n", (*dot).getPublicNetwork());
Mehrad 5:bd93324bc2a9 188
Mehrad 5:bd93324bc2a9 189
Mehrad 5:bd93324bc2a9 190 _serial.writef("INFO: frequency band: %s\r\n", mDot::FrequencyBandStr((*dot).getFrequencyBand()).c_str());
Mehrad 5:bd93324bc2a9 191 _serial.writef("INFO: frequency band: %d\r\n", (*dot).getFrequencyBand());
Mehrad 5:bd93324bc2a9 192
Mehrad 5:bd93324bc2a9 193
Mehrad 5:bd93324bc2a9 194 const uint8_t _freqBand = 2;
Mehrad 5:bd93324bc2a9 195 _serial.writef("INFO: Setting frequency band to: %s\r\n", mDot::FrequencyBandStr(_freqBand).c_str());
Mehrad 5:bd93324bc2a9 196 if ((ret = dot->setFrequencyBand(_freqBand)) != mDot::MDOT_OK) {
Mehrad 5:bd93324bc2a9 197 _serial.writef("ERROR: failed to enable Public Mode %d:%s\r\n", ret, mDot::getReturnCodeString(ret).c_str());
Mehrad 5:bd93324bc2a9 198 }
Mehrad 5:bd93324bc2a9 199
Mehrad 5:bd93324bc2a9 200 // Workaround to lock the TX frequencies to a single Aussie one while working with the incorrect library.
Mehrad 5:bd93324bc2a9 201 // The latest library has the fixed 8 Aussie libraries and it makes the following lines irrelevent.
Mehrad 5:bd93324bc2a9 202 //_serial.writef("INFO: Setting TX frequency to: %s\r\n", mDot::FrequencyBandStr(_freqBand).c_str());
Mehrad 5:bd93324bc2a9 203 //if ((ret = dot->setTxFrequency(915200000)) != mDot::MDOT_OK) {
Mehrad 5:bd93324bc2a9 204 // _serial.writef("ERROR: failed to Set TX frequency %d:%s\r\n", ret, mDot::getReturnCodeString(ret).c_str());
Mehrad 5:bd93324bc2a9 205 //}
Mehrad 5:bd93324bc2a9 206 //_serial.writef("INFO: TX frequency: %d\r\n", (*dot).getTxFrequency());
Mehrad 5:bd93324bc2a9 207
Mehrad 5:bd93324bc2a9 208
mfiore 4:36e214ebfa56 209 // save this configuration to the mDot's NVM
Mehrad 5:bd93324bc2a9 210 _serial.writef("INFO: saving config\r\n");
mfiore 2:6e2c378339d9 211 if (! dot->saveConfig()) {
Mehrad 5:bd93324bc2a9 212 _serial.writef("ERROR: failed to save configuration\r\n");
mfiore 0:09250cd371d2 213 }
Mehrad 5:bd93324bc2a9 214
mfiore 2:6e2c378339d9 215 //*******************************************
mfiore 2:6e2c378339d9 216 // end of configuration
mfiore 2:6e2c378339d9 217 //*******************************************
mfiore 0:09250cd371d2 218
Mehrad 5:bd93324bc2a9 219 _serial.writef("INFO: frequency band: %s\r\n", mDot::FrequencyBandStr((*dot).getFrequencyBand()).c_str());
Mehrad 5:bd93324bc2a9 220
Mehrad 5:bd93324bc2a9 221 _serial.writef("INFO: Device ID%s\r\n", VectorInt8_To_StrHex((*dot).getDeviceId()).c_str());
Mehrad 5:bd93324bc2a9 222
Mehrad 5:bd93324bc2a9 223 _serial.writef("INFO: Network ID%s\r\n", VectorInt8_To_StrHex((*dot).getNetworkId()).c_str());
Mehrad 5:bd93324bc2a9 224 _serial.writef("INFO: Network Key%s\r\n", VectorInt8_To_StrHex((*dot).getNetworkKey()).c_str());
Mehrad 5:bd93324bc2a9 225
Mehrad 5:bd93324bc2a9 226 _serial.writef("INFO: Join mode: %s\r\n", mDot::JoinModeStr((*dot).getJoinMode()).c_str());
Mehrad 5:bd93324bc2a9 227
Mehrad 5:bd93324bc2a9 228 _serial.writef("INFO: List of channel frequencies currently in use%s\r\n", VectorInt32_To_StrDec((*dot).getChannels()).c_str());
Mehrad 5:bd93324bc2a9 229 // TODO: These data rate lists don't make sense.
Mehrad 5:bd93324bc2a9 230 _serial.writef("INFO: List of channel datarate ranges currently in use%s\r\n", VectorInt8_To_StrHex((*dot).getChannelRanges()).c_str());
Mehrad 5:bd93324bc2a9 231 //_serial.writef("INFO: List of channel frequencies in config file to be used as session defaults%s\r\n", VectorInt32_To_StrDec((*dot).getConfigChannels()));
Mehrad 5:bd93324bc2a9 232 //_serial.writef("INFO: List of channel frequencies currently in use%s\r\n", VectorInt32_To_StrDec((*dot).getChannels()));
Mehrad 5:bd93324bc2a9 233
Mehrad 5:bd93324bc2a9 234
Mehrad 5:bd93324bc2a9 235
Mehrad 5:bd93324bc2a9 236 //_serial.writef("INFO: List user files stored in flash%s\r\n", VectorMdotFile_To_List((*dot).listUserFiles()));
Mehrad 5:bd93324bc2a9 237
Mehrad 5:bd93324bc2a9 238
Mehrad 5:bd93324bc2a9 239 //*******************************************
Mehrad 5:bd93324bc2a9 240 // end of debuging info
Mehrad 5:bd93324bc2a9 241 //*******************************************
Mehrad 5:bd93324bc2a9 242
Mehrad 5:bd93324bc2a9 243
Mehrad 5:bd93324bc2a9 244 // attempt to join the network
Mehrad 5:bd93324bc2a9 245 _serial.writef("INFO: joining network...\r\n");
Mehrad 5:bd93324bc2a9 246 while ((ret = dot->joinNetworkOnce()) != mDot::MDOT_OK) {
Mehrad 5:bd93324bc2a9 247 _serial.writef("ERROR: failed to join network %d:%s\r\n", ret, mDot::getReturnCodeString(ret).c_str());
mfiore 4:36e214ebfa56 248 // in the 868 (EU) frequency band, we need to wait until another channel is available before transmitting again
mfiore 4:36e214ebfa56 249 osDelay(std::max((uint32_t)1000, (uint32_t)dot->getNextTxMs()));
mfiore 0:09250cd371d2 250 }
Mehrad 5:bd93324bc2a9 251 greenLed = 1; // Joined Successfuly
mfiore 0:09250cd371d2 252
Mehrad 5:bd93324bc2a9 253 mDot::rssi_stats _rssiStats;
Mehrad 5:bd93324bc2a9 254
Mehrad 5:bd93324bc2a9 255 int err;
Mehrad 5:bd93324bc2a9 256 while (true) {
mfiore 0:09250cd371d2 257
Mehrad 5:bd93324bc2a9 258 //format data for sending to the gateway
Mehrad 5:bd93324bc2a9 259 for (std::string::iterator it = data_str.begin(); it != data_str.end(); it++) {
Mehrad 5:bd93324bc2a9 260 data.push_back((uint8_t) *it);
Mehrad 5:bd93324bc2a9 261 }
Mehrad 5:bd93324bc2a9 262
mfiore 4:36e214ebfa56 263 // send the data to the gateway
mfiore 0:09250cd371d2 264 if ((ret = dot->send(data)) != mDot::MDOT_OK) {
Mehrad 5:bd93324bc2a9 265 _serial.writef("ERROR: failed to send\r\n", ret, mDot::getReturnCodeString(ret).c_str());
mfiore 0:09250cd371d2 266 } else {
Mehrad 5:bd93324bc2a9 267 _serial.writef("INFO: successfully sent data to gateway ");
Mehrad 5:bd93324bc2a9 268
Mehrad 5:bd93324bc2a9 269 _rssiStats = dot->getRssiStats();
Mehrad 5:bd93324bc2a9 270 _serial.writef("+ RSSI values( last:%d min:%d max:%d avg:%d ) \r\n", _rssiStats.last, _rssiStats.min, _rssiStats.max, _rssiStats.avg);
mfiore 0:09250cd371d2 271 }
mfiore 0:09250cd371d2 272
mfiore 4:36e214ebfa56 273 // in the 868 (EU) frequency band, we need to wait until another channel is available before transmitting again
Mehrad 5:bd93324bc2a9 274 //osDelay(std::max((uint32_t)50, (uint32_t)dot->getNextTxMs()));
Mehrad 5:bd93324bc2a9 275 //osDelay(std::max((uint32_t)2000, (uint32_t)dot->getNextTxMs()));
Mehrad 5:bd93324bc2a9 276 wait(1);
Mehrad 5:bd93324bc2a9 277
Mehrad 5:bd93324bc2a9 278 ss.str("");
Mehrad 5:bd93324bc2a9 279 err = dht.readData();
Mehrad 5:bd93324bc2a9 280
Mehrad 5:bd93324bc2a9 281 //int temp = dht11->readTemperature();
Mehrad 5:bd93324bc2a9 282 if (err == 0) {
Mehrad 5:bd93324bc2a9 283 float temp = dht.ReadTemperature(CELCIUS);
Mehrad 5:bd93324bc2a9 284 float rh = dht.ReadHumidity();
Mehrad 5:bd93324bc2a9 285 _serial.writef(" Temp: %f Rh: %f \r\n", temp, rh);
Mehrad 5:bd93324bc2a9 286 ss << (temp);
Mehrad 5:bd93324bc2a9 287 ss << ',';
Mehrad 5:bd93324bc2a9 288 ss << rh;
Mehrad 5:bd93324bc2a9 289 } else {
Mehrad 5:bd93324bc2a9 290 ss.str(" :err ");
Mehrad 5:bd93324bc2a9 291 ss << err;
Mehrad 5:bd93324bc2a9 292 }
Mehrad 5:bd93324bc2a9 293
Mehrad 5:bd93324bc2a9 294 data.clear();
Mehrad 5:bd93324bc2a9 295 // Converting int to string in C++ using <sstream>
Mehrad 5:bd93324bc2a9 296 data_str = ss.str();
mfiore 0:09250cd371d2 297 }
mfiore 0:09250cd371d2 298
mfiore 0:09250cd371d2 299 return 0;
mfiore 0:09250cd371d2 300 }