Vali Abdrakhmanov
/
mbed-os-example_2threads_RAK811
mbed-os-example_2threads_RAK811
main.cpp@0:3b743e0d0126, 2022-03-03 (annotated)
- Committer:
- awali
- Date:
- Thu Mar 03 12:23:47 2022 +0000
- Revision:
- 0:3b743e0d0126
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
awali | 0:3b743e0d0126 | 1 | /* mbed Microcontroller Library |
awali | 0:3b743e0d0126 | 2 | * Copyright (c) 2019 ARM Limited |
awali | 0:3b743e0d0126 | 3 | * SPDX-License-Identifier: Apache-2.0 |
awali | 0:3b743e0d0126 | 4 | */ |
awali | 0:3b743e0d0126 | 5 | #include "mbed.h" |
awali | 0:3b743e0d0126 | 6 | //#include "platform/mbed_thread.h" |
awali | 0:3b743e0d0126 | 7 | #include "Sht31.h" |
awali | 0:3b743e0d0126 | 8 | #define MAXIMUM_BUFFER_SIZE |
awali | 0:3b743e0d0126 | 9 | using namespace std; |
awali | 0:3b743e0d0126 | 10 | //sda, scl |
awali | 0:3b743e0d0126 | 11 | Sht31 temp_sensor(I2C_SDA, I2C_SCL); |
awali | 0:3b743e0d0126 | 12 | float t; |
awali | 0:3b743e0d0126 | 13 | float h; |
awali | 0:3b743e0d0126 | 14 | |
awali | 0:3b743e0d0126 | 15 | Thread thread1; |
awali | 0:3b743e0d0126 | 16 | Thread thread2; |
awali | 0:3b743e0d0126 | 17 | DigitalOut led1(LED1); |
awali | 0:3b743e0d0126 | 18 | |
awali | 0:3b743e0d0126 | 19 | UnbufferedSerial pc(USBTX, USBRX); |
awali | 0:3b743e0d0126 | 20 | UnbufferedSerial dev(D8, D2); |
awali | 0:3b743e0d0126 | 21 | |
awali | 0:3b743e0d0126 | 22 | |
awali | 0:3b743e0d0126 | 23 | int dev_RxLen=0; |
awali | 0:3b743e0d0126 | 24 | int pc_RxLen=0; |
awali | 0:3b743e0d0126 | 25 | int hh,tt; |
awali | 0:3b743e0d0126 | 26 | |
awali | 0:3b743e0d0126 | 27 | char dev_RxBuf[64] = {0}; |
awali | 0:3b743e0d0126 | 28 | char pc_RxBuf[64] = {0}; |
awali | 0:3b743e0d0126 | 29 | char buf4[64] = {0}; |
awali | 0:3b743e0d0126 | 30 | char buf_datchik[64] = {0}; |
awali | 0:3b743e0d0126 | 31 | |
awali | 0:3b743e0d0126 | 32 | |
awali | 0:3b743e0d0126 | 33 | // обработчики прерываний по приему байта с устройства и с компа- просто заполняют буферы свои- при достижении 64 байта в буфере -начинают заполнять снова с нуля |
awali | 0:3b743e0d0126 | 34 | // нужны только для отладки - в рабочем режиме- тключить для экономии энергии |
awali | 0:3b743e0d0126 | 35 | void dev_recv() |
awali | 0:3b743e0d0126 | 36 | { |
awali | 0:3b743e0d0126 | 37 | if (dev_RxLen<63){ |
awali | 0:3b743e0d0126 | 38 | |
awali | 0:3b743e0d0126 | 39 | dev.read(&dev_RxBuf[dev_RxLen], sizeof(dev_RxBuf[dev_RxLen])); // Got 1 char |
awali | 0:3b743e0d0126 | 40 | |
awali | 0:3b743e0d0126 | 41 | dev_RxLen++; |
awali | 0:3b743e0d0126 | 42 | } |
awali | 0:3b743e0d0126 | 43 | else dev_RxLen=0; |
awali | 0:3b743e0d0126 | 44 | } |
awali | 0:3b743e0d0126 | 45 | |
awali | 0:3b743e0d0126 | 46 | |
awali | 0:3b743e0d0126 | 47 | |
awali | 0:3b743e0d0126 | 48 | void pc_recv() |
awali | 0:3b743e0d0126 | 49 | { |
awali | 0:3b743e0d0126 | 50 | if (pc_RxLen<63){ |
awali | 0:3b743e0d0126 | 51 | pc.read(&pc_RxBuf[pc_RxLen], sizeof(pc_RxBuf[pc_RxLen])); // Got 1 char |
awali | 0:3b743e0d0126 | 52 | pc_RxLen++; |
awali | 0:3b743e0d0126 | 53 | } |
awali | 0:3b743e0d0126 | 54 | else pc_RxLen=0; |
awali | 0:3b743e0d0126 | 55 | } |
awali | 0:3b743e0d0126 | 56 | |
awali | 0:3b743e0d0126 | 57 | |
awali | 0:3b743e0d0126 | 58 | void connect_to_server_lora_and_recieve_otvety() |
awali | 0:3b743e0d0126 | 59 | { |
awali | 0:3b743e0d0126 | 60 | sprintf(buf4,"at+join\r\n"); |
awali | 0:3b743e0d0126 | 61 | for (uint8_t i = 0; i < 9; i++) { |
awali | 0:3b743e0d0126 | 62 | dev.write(&buf4[i], sizeof(buf4[i])); |
awali | 0:3b743e0d0126 | 63 | //распечатать на консоль то что послано на рак811 |
awali | 0:3b743e0d0126 | 64 | // pc.write(&buf4[i], sizeof(buf4[i])); |
awali | 0:3b743e0d0126 | 65 | } |
awali | 0:3b743e0d0126 | 66 | ThisThread::sleep_for(4s); |
awali | 0:3b743e0d0126 | 67 | |
awali | 0:3b743e0d0126 | 68 | |
awali | 0:3b743e0d0126 | 69 | while (1) { |
awali | 0:3b743e0d0126 | 70 | //нужно только для отладки -можно убрать |
awali | 0:3b743e0d0126 | 71 | //распечатать на консоль то что пришло с рак811 |
awali | 0:3b743e0d0126 | 72 | // for (uint8_t i = 0; i < dev_RxLen; i++) { |
awali | 0:3b743e0d0126 | 73 | // pc.write(&dev_RxBuf[i], sizeof(dev_RxBuf[i]));} |
awali | 0:3b743e0d0126 | 74 | |
awali | 0:3b743e0d0126 | 75 | //распечатать на консоль то что пришло с компа |
awali | 0:3b743e0d0126 | 76 | // for (uint8_t i = 0; i < pc_RxLen; i++) { |
awali | 0:3b743e0d0126 | 77 | // pc.write(&pc_RxBuf[i], sizeof(pc_RxBuf[i]));} |
awali | 0:3b743e0d0126 | 78 | |
awali | 0:3b743e0d0126 | 79 | |
awali | 0:3b743e0d0126 | 80 | ThisThread::sleep_for(1s); |
awali | 0:3b743e0d0126 | 81 | } |
awali | 0:3b743e0d0126 | 82 | } |
awali | 0:3b743e0d0126 | 83 | |
awali | 0:3b743e0d0126 | 84 | |
awali | 0:3b743e0d0126 | 85 | void read_datchik_and_send_to_server_lora() |
awali | 0:3b743e0d0126 | 86 | { |
awali | 0:3b743e0d0126 | 87 | while (true) { |
awali | 0:3b743e0d0126 | 88 | t = temp_sensor.readTemperature(); |
awali | 0:3b743e0d0126 | 89 | h = temp_sensor.readHumidity(); |
awali | 0:3b743e0d0126 | 90 | int tt=round(t); //из-за того что %f не работает пришлось посылать округленные показания датчиков |
awali | 0:3b743e0d0126 | 91 | sprintf(buf_datchik,"temp= %d",tt); |
awali | 0:3b743e0d0126 | 92 | for (uint8_t i = 0; i < 8; i++) { |
awali | 0:3b743e0d0126 | 93 | pc.write(&buf_datchik[i], sizeof(buf_datchik[i]));} |
awali | 0:3b743e0d0126 | 94 | int hh=round(h); |
awali | 0:3b743e0d0126 | 95 | sprintf(buf_datchik,"himi= %d",hh); |
awali | 0:3b743e0d0126 | 96 | for (uint8_t i = 0; i < 8; i++) { |
awali | 0:3b743e0d0126 | 97 | pc.write(&buf_datchik[i], sizeof(buf_datchik[i]));} |
awali | 0:3b743e0d0126 | 98 | |
awali | 0:3b743e0d0126 | 99 | |
awali | 0:3b743e0d0126 | 100 | |
awali | 0:3b743e0d0126 | 101 | //послать округленные до целого данные с датчика темп-ры и без пробела с датчика влажности на рак811 |
awali | 0:3b743e0d0126 | 102 | // sprintf(buf4,"at+send=lora:1:%d %d\r\n",tt,hh); |
awali | 0:3b743e0d0126 | 103 | sprintf(buf4,"at+send=lora:1:%d%d\r\n",tt,hh); |
awali | 0:3b743e0d0126 | 104 | for (uint8_t i = 0; i < 21; i++) { |
awali | 0:3b743e0d0126 | 105 | dev.write(&buf4[i], sizeof(buf4[i])); |
awali | 0:3b743e0d0126 | 106 | //продублировать это в консоль |
awali | 0:3b743e0d0126 | 107 | pc.write(&buf4[i], sizeof(buf4[i]));} |
awali | 0:3b743e0d0126 | 108 | |
awali | 0:3b743e0d0126 | 109 | //послать округленные до целого данные с датчика влажности на рак811 - попытка послать наканал 0 - так не работает |
awali | 0:3b743e0d0126 | 110 | //это можно убрать |
awali | 0:3b743e0d0126 | 111 | // sprintf(buf4,"at+send=lora:0:%d\r\n",hh); |
awali | 0:3b743e0d0126 | 112 | // for (uint8_t i = 0; i < 19; i++) { |
awali | 0:3b743e0d0126 | 113 | // dev.write(&buf4[i], sizeof(buf4[i])); |
awali | 0:3b743e0d0126 | 114 | //продублировать это в консоль |
awali | 0:3b743e0d0126 | 115 | // pc.write(&buf4[i], sizeof(buf4[i]));} |
awali | 0:3b743e0d0126 | 116 | |
awali | 0:3b743e0d0126 | 117 | |
awali | 0:3b743e0d0126 | 118 | |
awali | 0:3b743e0d0126 | 119 | ThisThread::sleep_for(20s); |
awali | 0:3b743e0d0126 | 120 | } |
awali | 0:3b743e0d0126 | 121 | } |
awali | 0:3b743e0d0126 | 122 | |
awali | 0:3b743e0d0126 | 123 | |
awali | 0:3b743e0d0126 | 124 | |
awali | 0:3b743e0d0126 | 125 | |
awali | 0:3b743e0d0126 | 126 | int main() |
awali | 0:3b743e0d0126 | 127 | { |
awali | 0:3b743e0d0126 | 128 | pc.attach(&pc_recv, UnbufferedSerial::RxIrq); |
awali | 0:3b743e0d0126 | 129 | dev.attach(&dev_recv, UnbufferedSerial::RxIrq); |
awali | 0:3b743e0d0126 | 130 | |
awali | 0:3b743e0d0126 | 131 | pc.baud(115200); |
awali | 0:3b743e0d0126 | 132 | dev.baud(115200); |
awali | 0:3b743e0d0126 | 133 | |
awali | 0:3b743e0d0126 | 134 | //фориат передачи -по умолчанию - поэтому не нужно |
awali | 0:3b743e0d0126 | 135 | // pc.format(8, BufferedSerial::None, 1 ); |
awali | 0:3b743e0d0126 | 136 | // dev.format(8, BufferedSerial::None, 1 ); |
awali | 0:3b743e0d0126 | 137 | |
awali | 0:3b743e0d0126 | 138 | thread1.start(read_datchik_and_send_to_server_lora); |
awali | 0:3b743e0d0126 | 139 | thread2.start(connect_to_server_lora_and_recieve_otvety); |
awali | 0:3b743e0d0126 | 140 | |
awali | 0:3b743e0d0126 | 141 | } |
awali | 0:3b743e0d0126 | 142 | |
awali | 0:3b743e0d0126 | 143 | |
awali | 0:3b743e0d0126 | 144 | |
awali | 0:3b743e0d0126 | 145 |