测量仪表
流程图:
基础逻辑功能的实现
Aht10测温模块:
采用例程中的aht10模块代码(aht10软件包已配置好无需再配),并以此为“根据地”,将后续其他功能加入到此main.c的工程文件中。
调用函数读取当前的温度值,并根据温度区间(<30,30-32,>32)给控制参数crl赋值(0,1,2),以备后续使用。
Led_matrix矩阵灯模块
枚举每个灯的名称,并对应地将Setcolor的函数加入不同温度区间的情况中去,即对crl使用switch语句,case0给矩阵灯赋绿色,1赋蓝色,2赋红色。
过程中要注意矩阵灯的驱动文件夹是否使能且参与编译。
蜂鸣器模块
将蜂鸣器的端口设置为输出模式后,对应地加入switch语句中,即0、1时beep_off,
2时调用beep_on。
Lcd显示屏模块
对lcd初始化后,对应不同的情况调用显示函数,分别显示rt-thread的logo,调用字符串显示函数显示实时温度和对应的工作状态(0,1为SAFE,2显示TEMPERATURE IS TOO HIGH!!!)。
过程中要注意lcd驱动文件夹是否使能且参与编译。
且要主要lcd的配置与led矩阵灯是否有冲突。
舵机
为了更加形象的模拟系统温度过高后的冷却功能,我们在板子上增加一个舵机外设,通过定时器输出pw波,控制舵机在aht10检测到温度过高时转动吹风来降温。为了不影响板载外设的正常功能,我们打开Stm32CubeMX,寻找空闲引脚PE5,配置成Tim9——CH1输出。
接着,对Timer进行相关配置。
配置完成后生成代码,删除掉不需要的文件夹。
点击rt setting,打开时钟和PWM驱动程序
系统设置完成后,开始编写代码。
窗体底端
为了观察PE5输出的PWM波形,使用逻辑分析仪连接相关引脚后,打开Pulse view软件,观测到波形如下
与代码设置的理想波形几乎一致,因此可以确定,PWM波设置完成。
接着查阅资料,了解到给360度舵机一个PWM信号,舵机会以一个特定的速度转动,类似与电机。但与电机不同的是,360舵机是闭环控制,速度控制稳定。设置PWM周期为20ms,高电平为0.5ms时,占空比符合正向最大速度转动的要求。对代码重新进行设置后,连接舵机,发现舵机正转,符合要求。至此舵机模块配置完成。
按键控制舵机功能
本次实训中,为了完善功能,使我们的仪器更为可靠,我们创新性地加入了当温度未达到警戒值(32℃)时,也能通过手动调节的方式使舵机转动强制降温的功能。
对key1键进行分配(四个按键中最上方的按键),当此按键未pin_up状态时,强行调用mg90main函数(舵机启动函数),对一些温度传感器检测不到的故障进行强制降温,确保器件不被烧坏。
void irq_callback(void *args)
{
rt_uint32_t sign = (rt_uint32_t) args;
switch (sign)
{
case PIN_WK_UP :
flag=1;
break;
case PIN_KEY1 :
flag=0;
break;
default:
LOG_E("error sign= %d !", sign);
break;
}
}
void self_sg90()
{
switch (flag)
{
case 1 :
mg90main1();
break;
case 0 :
if(temperature<30)
{
mg90mainstop();
}
break;
default:
LOG_E("error flag= %d !", flag);
break;
}}
Onenet物联网传输数据
Abstract:该开发板基于RW007 WiFi模块的在RT-Thread studio进行开发,在联网之后,再连接到ONENet,即可将本地传感器信息上传至云端
一、代码软件包的设计与使用
(1)WiFi联网(下载rw007安装包),
该软件包使用rw007是通过SPI协议进行传输,所以在配置项中要使能SPI,并在SPI项目下配置引脚
(2)通过MQTT协议连接onenet(下载onenet软件包)
基于Mqtt协议,软件包中通过板载publish topic,代码如下:
该函数在我们串口中初始化onenet时即调用
(3)数据上传
使用板载示例程序中的函数将注册周期上传任务到 MSH,并通过终端指令调用该函数,将数据publish到物联网中对应话题当中
static void onenet_upload_entry(void *parameter)
{
int value = 0;
while (1)
{
value = rand() % 100;
if (onenet_mqtt_upload_digit("temperature", value) < 0)
{
LOG_E("upload has an error, stop uploading");
break;
}
else
{
LOG_D("buffer : {"temperature":%d}", value);
}
rt_thread_delay(rt_tick_from_millisecond(5 * 1000));
}
}
int onenet_upload_cycle(void)
{
rt_thread_t tid;
tid = rt_thread_create("onenet_send",onenet_upload_entry,RT_NULL,2 * 1024,
RT_THREAD_PRIORITY_MAX / 3 - 1,5);
if (tid)
{
rt_thread_startup(tid);
}
return 0;
}
MSH_CMD_EXPORT(onenet_upload_cycle, send data to OneNET cloud cycle);
二、指令调用
通过板载的rw7000连接到局域网WiFi,再通过Mqtt协议将板载传感器测量得到的数据传输到物联网,从onenet官网注册设备并接收数据
三、物联网可视化显示
在onenet官网注册并创建一个设备和项目,并将设备ID与API key绑定到软件包的配置项中
我们在可视化项目中创建新项目,规划文本和图表显示,并通过API绑定数据流进行显示。
最终效果图
温度低于30度led矩阵为绿色
温度介于30度与32度之间led矩阵为蓝色
温度高于32度led矩阵为红色
物联网温度数据上传效果图
全部0条评论
快来发表一下你的评论吧 !