本系统以CH32V307VCT6单片机为控制核心,通过蓝牙模块把DHT11模块的温湿度、超声波模块的测距实时显示在自主开发的蓝牙APP上,通过AIR700E的4G模块把DHT11模块的温湿度、超声波模块的测距实时显示在啊里云平台上,同时在把DHT11模块的温湿度、超声波模块的测距实时显示在OLED屏上。
蓝牙技术是一种无线数据通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。蓝牙技术是一种非常有用的无线通信技术,已经广泛应用于现代社会的各个领域中。它实现了不同设备之间的无线连接和数据传输,提高了设备的便携性和灵活性,为人们的生活和工作带来了极大的便利。4G模块,又叫4G传输模块、4G通信模块、4G LTE模块。它是一种硬件加载到指定频段,软件支持标准的LTE协议,且软硬件高度集成模组化的产品,具有兼容性好、通信速度快、通信数据量大、网络频谱宽、通信灵活等特点,广泛应用于电力、环保、金融、工业自动化等领域。
方案一:采用蓝牙模块,蓝牙通信范围一般在10米以内,适合在个人和家庭范围内进行设备之间的无线连接和数据传输,蓝牙技术的应用范围非常广泛,涉及到通信、计算、消费电子等多个领域,HC-05 蓝牙模块是专为智能无线数据传输而打造,遵循 V20+EDR 蓝牙规范。
方案二:采用MIFI模块,ESP8266是一种强大的WIFI模块,它由ESPRESSIF SYSTEMS公司开发,可以实现与网络通信的功能。ESP8266在物联网中被广泛使用,可以通过串行通信接口连接到微控制器。
方案三:采用4G模块,Air700E内置丰富的网络协议, 集成多个工业标准接口, 并支持多种驱动和软件功能(如Windows 7/8/8.1/10, Linux,Android等 操作系统下的USB驱动等), 极大地拓展了其在M2M领域的应用范围。
方案四:采用2G模块,GPRS无线模块就是将串口通讯转为GPRS无线通讯的设备。利用du运营商网络为用户提供无线长距离数据传输功能,提供TTL串口接口。GPRS模块可以是在设备无网络或WIFI的野外环境下,与服务器进行数据交互。
方案选择:综上所述方案一使用简单,而且开发简单,价格便宜,方案三的4G模块是国产的,而且开发方式多样和简单,价格便宜。最终选择方案一和方案三。
要求 : 采集DHT11和HC-SR04显示在OLED屏、啊里云平台和蓝牙APP上。
图1:系统总原理图
图2:OLED屏电路图
0.96OLED(4Pin)模块采用SSD1306 为驱动芯片,模块带有稳压芯片,支持软件模拟IIC 通讯与硬件IIC 通讯,上电自动复位,功耗低,自发光自由视角。SSD1306 有3 中寻址模式:页寻址模式、水平寻址模式、垂直寻址模式。寻址方式决定了写入数据的方式。OLED模块是通过IIC协议驱动的, SCL:OLED 的D0 脚,在IIC 通信中为时钟管脚SDA:OLED 的D1 脚,在IIC 通信中为数据管脚。
图3:DHT11模块电路图
DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,内部由一个 8 位单片机控制一个电阻式感湿元件和一个 NTC 测温元件。DHT11 虽然也是采用单总线协议,但是该协议与 DS18B20 的单总线协议稍微有些不同之处。相比于 DS18B20 只能测量温度,DHT11 既能检测温度又能检测湿度,不过 DHT11 的精度和测量范围都要低于 DS18B20,其温度测量范围为 0~50℃,误差在±2℃;湿度的测量范围为 20%~90%RH(Relative Humidity 相对湿度—指空气中水汽压与饱和水汽压的百分比),误差在±5%RH。DHT11 电路很简单,只需要将 DATA 引脚连接单片机的一个 I/O 即可, DHT11 的供电电压为 3~5.5V。
图4:HC-05蓝牙模块电路图
HC-05通过TX和RX引脚,支持使用标准AT命令。在设备启动时进入特殊命令模式。启动进入数据模式,可以与其他设备进行无线通信HC-05的主要工作添加双向(全双工)无线功能。可用于两个具有串行功能的微控制器之间的通信,也可用于通过微控制器控制任何蓝牙设备。
图5:HC-SR04超声波模块电路图
超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波, 从而测出发射和接收回波的时间差Δt , 然后求出距离S 。在速度v 已知的情况下,距离S 的计算,公式如下:S = vΔt/ 2在空气中,常温下超声波的传播速度是334 米/秒,但其传播速度V 易受空气中温度、湿度、压强等因素的影响,其中受温度的影响较大,如温度每升高1 ℃, 声速增加约0. 6 米/ 秒。因此在测距精度要求很高的情况下, 应通过温度补偿的方法对传播速度加以校正。已知现场环境温度T 时, 超声波传播速度V 的计算公式如下:
V = 331. 5+0.607T
这样, 只要测得超声波发射和接收回波的时间差Δt 以及现场环境温度T,就可以精确计算出发射点到障碍物之间的距离。
图 6:基于CH32V307VCT6单片机啊里云和蓝牙的数据传输流程图
在主程序中,主要对控制系统中的各模块进行初始化的配置与子模块的调用。待各项配置和初始化完成后,进入While循环读取温湿度和距离显示在OLED屏,把数据通过串口通信发送到蓝牙APP和啊里云平台上。基于CH32V307VCT6单片机啊里云和蓝牙的数据传输流程图如上图6所示。
App Inventor是一款用来开发Android智能手机程序的工具,采用与Scratch类似拖拽方式编程。Android是Google发布的基于Linux平台的智能手机操作系统,是第一个完整、开源、免费的手机操作系统。
在工作界面中自由拖拽,把界面设计得相对美观点。设计后的工作面板、组件列表和逻辑设计如下图7和图8所示。
图 7:工作面板和组件列表图
图 8:逻辑设计图
生成的app扫码下载和下载到电脑,无需其他操作,极大便利了设计开发人员。生成的app截图如下图9所示。
图 9:app截图
Air 700E支持多种方式连接阿里云,使用指定的方式需要刷不同固件。AT指令是其中一种,方便,易懂,好操作。
使用AT固件连接阿里云有三种方式,分别为一机一密AT HTTP鉴权连接、一机一密AT直连MQTT、一型一密AT方式连接,本课程设计使用一机一密AT直连MQTT。创建阿里云后查看MQTT参数。
当设备属于公共实例,使用一型一密预注册认证方式时,动态注册参数如下:
mqttClientId: clientId+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|"
mqttUsername: deviceName+"&"+productKey
mqttPassword: sign_hmac(deviceSecret,content)
图 10:一机一密AT直连MQTT参数说明图
具体交互流程如下图11所示
图 11:一机一密AT直连MQTT交互图
蓝牙在连接前已经配置好,二次连接不需要配置,可直接连接,在自定义蓝牙app中点击“连接蓝牙”,可直接连接,连接后,屏幕显示实时温湿度和距离。
图 12:蓝牙APP数据显示图
4G传输测试前,需要单片机复位一次,运行连接阿里云的 AT指令,连接上阿里云,while循环发送数据的指令实时显示在啊里云平台上。
图 13:啊里云平台数据显示图
蓝牙测试能够实时把数据显示在自定义蓝牙APP上,AIR700E模块测试能够实时把数据显示在啊里云平台上,蓝牙模块和AIR700E模块都是方便,容易开发的模块,适合学生使用。
图 14:测试实物图
图 15:系统原理图
系统以CH32V307VCT6单片机为控制核心,通过蓝牙模块把DHT11模块的温湿度、超声波模块的测距实时显示在自主开发的蓝牙APP上,通过AIR700E的4G模块把DHT11模块的温湿度、超声波模块的测距实时显示在啊里云平台上,同时在把DHT11模块的温湿度、超声波模块的测距实时显示在OLED屏上。
int main(void)
{
char str1[250];
char str2[250];
char str3[250];
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
SystemCoreClockUpdate();// ʱ
Delay_Init();
USART2_Configuration();//USART2
USART3_Configuration();//USART3
//建立连接
Serial_SendString3("AT+MCONFIG=\"k0d4gGK3Niz.2000914ABCD|securemode=2,signmethod=hmacsha256,timestamp=1698077679288|\",\"2000914ABCD&k0d4gGK3Niz\",\"8adc1c4d2583d6b8ae698930ec0b8a0d2c102e2b836b33452ed461ead98af81a\"\r\n");
Delay_Ms(100);
//建立 TCP 连接
Serial_SendString3("AT+SSLMIPSTART=\"iot-06z00eojstjzgef.mqtt.iothub.aliyuncs.com\",1883\r\n");
Delay_Ms(2000);
//建立MQTT会话
Serial_SendString3("AT+MCONNECT=1,60\r\n");
Delay_Ms(1000);
USART_Printf_Init(115200);
printf("SystemClk:%d\r\n", SystemCoreClock);
oled_init();//OLED ʼ
oled_clear();//
OLED_ShowStr(28,0,"CH32V307!",16);
Input_Capture_Init(1000-1,72-1);// 2KHz Ƶ
OLED_ShowCHinese(0,4,9);
OLED_ShowCHinese(16,4,10);
OLED_ShowCHinese(32,4,11);
OLED_ShowCHinese(48,4,12);
oled_show_char(64,4,':',16);//
OLED_ShowCHinese(0,6,9);
OLED_ShowCHinese(16,6,10);
OLED_ShowCHinese(32,6,13);
OLED_ShowCHinese(48,6,12);
oled_show_char(64,6,':',16);//
OLED_ShowCHinese(0,2,14);
OLED_ShowCHinese(16,2,15);
OLED_ShowCHinese(32,2,16);
OLED_ShowCHinese(48,2,17);
oled_show_char(64,2,':',16);//
// GPIO_Configuration();
//LED_On();
while(DHT11_Init())
{
printf("DHT11 Error \r\n");
Delay_Ms(1000);
}
while(1)
{
DHT11_Read_Data(&temp,&humi);
printf("temp:%dC,humi:%d%RH ",temp,humi);
Delay_Ms(1000);//建议不要低于这个数值
wendu();//温度显示
shidu();//湿度显示
distance = Ultrasoniclength(); //
printf("DISTANCE:%dcm\r\n",distance);// ֵ
chaoshenbo();//超声波距离显示 ʾ
Serial_SendString("温度:");
Serial_SendNumber(temp, 2);//发送字符串,长度为2
Serial_SendString("C ");
Serial_SendString("湿度:");
Serial_SendNumber(humi, 2);//发送字符串,长度为2
Serial_SendString("%RH ");
Serial_SendString("距离:");
Serial_SendNumber(distance, 3);//发送字符串,长度为3
Serial_SendString("cm ");
Serial_SendString("\r\n");
sprintf(str1, "AT+MPUB=\"/sys/k0d4gGK3Niz/2000914ABCD/thing/event/property/post\",0,1,\"{\\22params\\22:{\\22long:DetectDistance\\22:%d}}\"\r\n",distance);
Serial_SendString3(str1);
Delay_Ms(300);//建议不要低于这个数值
sprintf(str2, "AT+MPUB=\"/sys/k0d4gGK3Niz/2000914ABCD/thing/event/property/post\",0,1,\"{\\22params\\22:{\\22long:IndoorTemperature\\22:%d}}\"\r\n",temp);
Serial_SendString3(str2);
Delay_Ms(300);//建议不要低于这个数值
sprintf(str3, "AT+MPUB=\"/sys/k0d4gGK3Niz/2000914ABCD/thing/event/property/post\",0,1,\"{\\22params\\22:{\\22long:CurrentHumidity\\22:%d}}\"\r\n",humi);
Serial_SendString3(str3);
Delay_Ms(300);//建议不要低于这个数值
}
}
我已发表在我的微信公众号:基于CH32V307VCT6单片机啊里云和蓝牙的数据传输 (qq.com)
电路设计在嘉立创:
代码:
【免费】基于CH32V307VCT6单片机啊里云和蓝牙的数据传输代码资源-CSDN文库