get humidity data and send to LoRa gateway
Dependencies: mbed X_NUCLEO_IKS01A2
main.cpp@4:4a012fc4ecc4, 2020-04-22 (annotated)
- Committer:
- reversi
- Date:
- Wed Apr 22 15:00:19 2020 +0000
- Revision:
- 4:4a012fc4ecc4
- Parent:
- 3:24204ec0bc36
- Child:
- 5:90900ae27136
last one
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
reversi | 0:5b9fdd76a7d6 | 1 | #include "mbed.h" |
reversi | 0:5b9fdd76a7d6 | 2 | #include "XNucleoIKS01A2.h" |
reversi | 1:73299b677405 | 3 | #include <string> |
reversi | 1:73299b677405 | 4 | #include <sstream> |
reversi | 0:5b9fdd76a7d6 | 5 | |
reversi | 1:73299b677405 | 6 | #define CR 0x0D |
reversi | 1:73299b677405 | 7 | |
reversi | 1:73299b677405 | 8 | using namespace std; |
reversi | 1:73299b677405 | 9 | |
reversi | 1:73299b677405 | 10 | void modem_at_cmd(string); |
reversi | 1:73299b677405 | 11 | void wait4join(void); |
reversi | 1:73299b677405 | 12 | |
reversi | 1:73299b677405 | 13 | Serial pc(D1, D0, 115200); |
reversi | 1:73299b677405 | 14 | Serial lora(PB_6, PA_10, 115200); |
reversi | 1:73299b677405 | 15 | |
reversi | 1:73299b677405 | 16 | static XNucleoIKS01A2* board = XNucleoIKS01A2::instance(D14, D15, D4, D5); |
reversi | 1:73299b677405 | 17 | static HTS221Sensor *ht_sensor = board->ht_sensor; |
reversi | 0:5b9fdd76a7d6 | 18 | |
reversi | 1:73299b677405 | 19 | void join_lora_gateway(string eui = "0000000000000001", string ak = "00000000000000000000000000000001", string join_method = "1") { |
reversi | 1:73299b677405 | 20 | pc.printf("Test seriale no pc\r\n"); |
reversi | 1:73299b677405 | 21 | modem_at_cmd("AT"); |
reversi | 1:73299b677405 | 22 | pc.printf("Inviato AT\r\n"); |
reversi | 1:73299b677405 | 23 | wait(1); |
reversi | 1:73299b677405 | 24 | modem_at_cmd("AT+APPEUI="+eui); |
reversi | 1:73299b677405 | 25 | pc.printf("Inviato EUI\r\n"); |
reversi | 1:73299b677405 | 26 | wait(1); |
reversi | 1:73299b677405 | 27 | modem_at_cmd("AT+AK="+ak); |
reversi | 1:73299b677405 | 28 | pc.printf("Inviato AK\r\n"); |
reversi | 1:73299b677405 | 29 | wait(1); |
reversi | 1:73299b677405 | 30 | modem_at_cmd("AT+JOIN="+join_method); |
reversi | 1:73299b677405 | 31 | pc.printf("Inviato JOIN\r\n"); |
reversi | 1:73299b677405 | 32 | wait4join(); |
reversi | 1:73299b677405 | 33 | modem_at_cmd("AT+DC=0"); |
reversi | 1:73299b677405 | 34 | pc.printf("Disabled DC\r\n"); |
reversi | 1:73299b677405 | 35 | wait(1); |
reversi | 1:73299b677405 | 36 | modem_at_cmd("AT+ADR=1"); |
reversi | 1:73299b677405 | 37 | pc.printf("Enabled ADR\r\n"); |
reversi | 1:73299b677405 | 38 | wait(1); |
reversi | 1:73299b677405 | 39 | } |
reversi | 1:73299b677405 | 40 | |
reversi | 2:0b1cbb0060bc | 41 | string string_to_hex(string input) |
reversi | 2:0b1cbb0060bc | 42 | { |
reversi | 2:0b1cbb0060bc | 43 | static const char hex_digits[] = "0123456789ABCDEF"; |
reversi | 2:0b1cbb0060bc | 44 | |
reversi | 2:0b1cbb0060bc | 45 | std::string output; |
reversi | 2:0b1cbb0060bc | 46 | output.reserve(input.length() * 2); |
reversi | 2:0b1cbb0060bc | 47 | for (int i = 0; i < input.length(); i++) |
reversi | 2:0b1cbb0060bc | 48 | { |
reversi | 2:0b1cbb0060bc | 49 | output[2*i] = hex_digits[input[i] >> 4]; |
reversi | 2:0b1cbb0060bc | 50 | output[2*i+1] = (hex_digits[input[i] & 15]); |
reversi | 2:0b1cbb0060bc | 51 | } |
reversi | 2:0b1cbb0060bc | 52 | return output; |
reversi | 2:0b1cbb0060bc | 53 | } |
reversi | 1:73299b677405 | 54 | |
reversi | 1:73299b677405 | 55 | int init() { |
reversi | 0:5b9fdd76a7d6 | 56 | pc.printf("Initialization..\r\n"); |
reversi | 0:5b9fdd76a7d6 | 57 | |
reversi | 0:5b9fdd76a7d6 | 58 | uint8_t id; |
reversi | 0:5b9fdd76a7d6 | 59 | int error_code = ht_sensor->read_id(&id); |
reversi | 0:5b9fdd76a7d6 | 60 | if (error_code != 0) { |
reversi | 0:5b9fdd76a7d6 | 61 | pc.printf("Error %d reading sensor ID\r\n", error_code); |
reversi | 0:5b9fdd76a7d6 | 62 | return 1; |
reversi | 0:5b9fdd76a7d6 | 63 | } |
reversi | 0:5b9fdd76a7d6 | 64 | pc.printf("Connected to sensor with ID 0x%x\r\n", id); |
reversi | 0:5b9fdd76a7d6 | 65 | |
reversi | 0:5b9fdd76a7d6 | 66 | if (ht_sensor->enable() != 0) { |
reversi | 0:5b9fdd76a7d6 | 67 | pc.printf("Error enabling the ht sensor\r\n"); |
reversi | 0:5b9fdd76a7d6 | 68 | return 2; |
reversi | 0:5b9fdd76a7d6 | 69 | } |
reversi | 0:5b9fdd76a7d6 | 70 | |
reversi | 0:5b9fdd76a7d6 | 71 | if (ht_sensor->set_odr(1.0f) != 0) { |
reversi | 0:5b9fdd76a7d6 | 72 | pc.printf("Error setting ODR\r\n"); |
reversi | 0:5b9fdd76a7d6 | 73 | return 3; |
reversi | 0:5b9fdd76a7d6 | 74 | } |
reversi | 0:5b9fdd76a7d6 | 75 | |
reversi | 1:73299b677405 | 76 | join_lora_gateway(); |
reversi | 1:73299b677405 | 77 | |
reversi | 1:73299b677405 | 78 | return 0; |
reversi | 1:73299b677405 | 79 | } |
reversi | 1:73299b677405 | 80 | |
reversi | 1:73299b677405 | 81 | void at_send(string port, string msg, string ack = "0") { |
reversi | 1:73299b677405 | 82 | modem_at_cmd("AT+SEND=" +port+ "," +msg+ "," +ack); |
reversi | 1:73299b677405 | 83 | } |
reversi | 1:73299b677405 | 84 | |
reversi | 1:73299b677405 | 85 | int main() { |
reversi | 1:73299b677405 | 86 | |
reversi | 1:73299b677405 | 87 | if (init() != 0) { |
reversi | 1:73299b677405 | 88 | pc.printf("Init failed"); |
reversi | 1:73299b677405 | 89 | return 1; |
reversi | 1:73299b677405 | 90 | } |
reversi | 1:73299b677405 | 91 | |
reversi | 0:5b9fdd76a7d6 | 92 | while(1) { |
reversi | 1:73299b677405 | 93 | float humidity = 0; |
reversi | 0:5b9fdd76a7d6 | 94 | |
reversi | 0:5b9fdd76a7d6 | 95 | if (ht_sensor->get_humidity(&humidity) != 0) |
reversi | 0:5b9fdd76a7d6 | 96 | pc.printf("Error reading humidity\r\n"); |
reversi | 1:73299b677405 | 97 | else { |
reversi | 1:73299b677405 | 98 | pc.printf("Humidity [%%]\t%f\r\n", humidity); |
reversi | 1:73299b677405 | 99 | |
reversi | 1:73299b677405 | 100 | std::ostringstream ss; |
reversi | 1:73299b677405 | 101 | ss << humidity; |
reversi | 3:24204ec0bc36 | 102 | |
reversi | 3:24204ec0bc36 | 103 | string val = ss.str(); |
reversi | 3:24204ec0bc36 | 104 | for(int i=0; i < val.length(); i++) |
reversi | 3:24204ec0bc36 | 105 | { |
reversi | 4:4a012fc4ecc4 | 106 | sprintf(&val[2*i],"%X", val[i]); |
reversi | 3:24204ec0bc36 | 107 | } |
reversi | 3:24204ec0bc36 | 108 | |
reversi | 3:24204ec0bc36 | 109 | at_send("1515", val); |
reversi | 3:24204ec0bc36 | 110 | |
reversi | 1:73299b677405 | 111 | } |
reversi | 2:0b1cbb0060bc | 112 | wait(5); |
reversi | 0:5b9fdd76a7d6 | 113 | } |
reversi | 0:5b9fdd76a7d6 | 114 | } |
reversi | 1:73299b677405 | 115 | |
reversi | 1:73299b677405 | 116 | |
reversi | 1:73299b677405 | 117 | void modem_at_cmd(string buffer){ |
reversi | 1:73299b677405 | 118 | for(uint16_t i = 0; i < buffer.length(); i++) { |
reversi | 1:73299b677405 | 119 | lora.putc(buffer[i]); |
reversi | 1:73299b677405 | 120 | pc.putc(buffer[i]); |
reversi | 1:73299b677405 | 121 | } |
reversi | 1:73299b677405 | 122 | lora.putc(CR); |
reversi | 1:73299b677405 | 123 | pc.putc(CR); |
reversi | 1:73299b677405 | 124 | pc.printf("\n"); |
reversi | 1:73299b677405 | 125 | |
reversi | 1:73299b677405 | 126 | char c = 0; |
reversi | 1:73299b677405 | 127 | do { |
reversi | 1:73299b677405 | 128 | if (lora.readable()) { |
reversi | 1:73299b677405 | 129 | c = lora.getc(); |
reversi | 1:73299b677405 | 130 | pc.putc(c); |
reversi | 1:73299b677405 | 131 | } |
reversi | 1:73299b677405 | 132 | } while(c != ' '); |
reversi | 1:73299b677405 | 133 | } |
reversi | 1:73299b677405 | 134 | |
reversi | 1:73299b677405 | 135 | void wait4join(){ |
reversi | 1:73299b677405 | 136 | char c = 0; |
reversi | 1:73299b677405 | 137 | do { |
reversi | 1:73299b677405 | 138 | if (lora.readable()) { |
reversi | 1:73299b677405 | 139 | c = lora.getc(); |
reversi | 1:73299b677405 | 140 | pc.putc(c); |
reversi | 1:73299b677405 | 141 | } |
reversi | 1:73299b677405 | 142 | } while(c != 'd'); |
reversi | 1:73299b677405 | 143 | } |