mbed-os-example_2threads_RAK811

Dependencies:   Sht31

Committer:
awali
Date:
Thu Mar 03 12:23:47 2022 +0000
Revision:
0:3b743e0d0126
1

Who changed what in which revision?

UserRevisionLine numberNew 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