1.采集超声波测距传感器的距离数据,合并到串口输出;
2.采集温湿度传感器的温湿度数据,合并到串口输出;

输出方式(串口 波特率:115200):1秒左右输出一次
1.通过主控ESP8266板卡的CP2102芯片,直接通过USB线(供电+串口通信),接收串口数据;
2.通过外接供电的CH340芯片,通过USB接收串口数据;
3.直接连接板卡的串口引脚RX(绿线)/TX(黄线),和接收串口数据板卡的TX/RX反接,再通过串口不定长接收,以换行符区分来接收字段;
串口输出格式:
串口助手获取的数据:
Distance:174.20(cm);Humidity:46.00(%);Temperature:26.80(*C);

python serial模块读取readline:
[22:25:52] b'Distance:174.45(cm);Humidity:45.00(%);Temperature:26.80(*C);\r\n'

图片展示:
CH340:

超声波测距模块:

DHT11温湿度传感器:

ESP8266 arduino源码:
- #include "DHT.h"
- #include
-
- float distance;
- #define echo 15 //echO接D8脚
- #define trig 13 //echO接D7脚
- #define LEDOUT 2 //D4
- #define DHTPIN 0
- #define DHTTYPE DHT11
-
- DHT dht(DHTPIN, DHTTYPE, 15);
-
- void setup() {
- // put your setup code here, to run once:
- // Start Serial
- Serial.begin(115200);
- dht.begin();
- pinMode(LEDOUT,OUTPUT);
- digitalWrite(LEDOUT,HIGH);
- pinMode(echo,INPUT); //设置echo为输入脚
- pinMode(trig,OUTPUT); //设置trig为输出脚
- Serial.print("GET_DATA_");
- Serial.println("BEGIN:");
- }
-
- void loop() {
-
- // put your main code here, to run repeatedly:
- digitalWrite(trig,HIGH);
- delayMicroseconds(1);
- digitalWrite(trig,LOW);
- distance = pulseIn(echo,HIGH); //计数接收高电平时间
- distance = distance*340/2/10000; //计算距离 1:声速:340M/S 2:实际距离为1/2声速距离 3:计数时钟为1US//温补公式:c=(331.45+0.61t/℃)m•s-1 (其中331.45是在0度)
- delay(130); //单次测离完成后加30mS的延时再进行下次测量。防止近距离测量时,测量到上次余波,导致测量不准确。
-
- // Reading temperature and humidity
- float h = dht.readHumidity();
- float t = dht.readTemperature();
-
- // Display data
- Serial.print("Distance:");
- Serial.print(distance);
- Serial.print("(cm);");
- Serial.print("Humidity:");
- Serial.print(h);
- Serial.print("(%);");
- Serial.print("Temperature:");
- Serial.print(t);
- Serial.println("(*C);");
-
- delay(670);
-
- digitalWrite(LEDOUT,LOW);
- // Wait a few seconds between measurements.
- delay(70);
- digitalWrite(LEDOUT,HIGH);
- delay(100);
- digitalWrite(LEDOUT,LOW);
- delay(30);
- digitalWrite(LEDOUT,HIGH);
-
- }
python串口读取源码:
- import serial#导入模块
- import time
-
- if __name__ == '__main__':
- ser = serial.Serial('COM4', 115200) #来设置波特率,当然还有专门的函数
- print(ser.isOpen()) #看看这个串口是否已经被打开
- while 1:
- data = ser.readline() #是读一行,以/n结束,要是没有/n就一直读,阻塞。
- time1 = "[" + time.strftime('%H:%M:%S', time.localtime(time.time())) + "] "
- print(time1 + str(data))