加一个风扇,状态选择,mqtt接收,暴力反复连接mqtt

This commit is contained in:
dgjames 2025-03-15 09:40:38 +08:00
parent 6a572b6e05
commit 40961a85ea
9 changed files with 94 additions and 66 deletions

View File

@ -33,7 +33,8 @@
"at.h": "c",
"ADC.C": "cpp",
"PM2.5.C": "cpp",
"sensor.h": "c"
"sensor.h": "c",
"status.h": "c"
},
// "cortex-debug.openocdPath": "d:/Develop/"
}

View File

@ -6,6 +6,9 @@ ADC传感器
PA1 pm25
PA5 空气质量
PA6 压力
风扇
PA8
PB2
# 红外遥控贪吃蛇/显示+上传温度等数据

View File

@ -4,10 +4,11 @@
* uart_dma_sample uart1
* 使使
* "hello RT-Thread!"
*/
*/
#include <rtthread.h>
#include <rtdevice.h>
#include "status.h"
#define SAMPLE_UART_NAME "uart3" /* 串口设备名称 */
@ -51,13 +52,35 @@ static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
}
return result;
}
void assist_control(char *rx_buffer)
{
if (rt_strstr(rx_buffer, "cc")!=RT_NULL)
{
fan_on();
rt_kprintf("加大抽风\n");
}
else if (rt_strstr(rx_buffer, "dd")!=RT_NULL)
{
fan_off();
rt_kprintf("关闭抽风\n");
}
else if (rt_strstr(rx_buffer, "ee")!=RT_NULL)
{
light_on();
rt_kprintf("开灯\n");
}
else if (rt_strstr(rx_buffer, "ff")!=RT_NULL)
{
light_off();
rt_kprintf("关灯\n");
}
}
static void serial_thread_entry(void *parameter)
{
struct rx_msg msg;
rt_err_t result;
rt_uint32_t rx_length;
static char rx_buffer[BSP_UART3_RX_BUFSIZE+ 1];
static char rx_buffer[BSP_UART3_RX_BUFSIZE + 1];
while (1)
{
@ -69,32 +92,15 @@ static void serial_thread_entry(void *parameter)
/* 从串口读取数据 */
rx_length = rt_device_read(msg.dev, 0, rx_buffer, msg.size);
rx_buffer[rx_length] = '\0';
if(!rt_strcasecmp(rx_buffer, "cc"))
{
rt_kprintf("加大抽风\n");
}
else if(!rt_strcasecmp(rx_buffer, "dd"))
{
rt_kprintf("关闭抽风\n");
}
else if(!rt_strcasecmp(rx_buffer, "ee"))
{
rt_kprintf("开灯\n");
}
else if(!rt_strcasecmp(rx_buffer, "ff"))
{
rt_kprintf("关灯\n");
}
assist_control(rx_buffer);
/* 通过串口设备 serial 输出读取到的消息 */
// rt_device_write(serial, 0, rx_buffer, rx_length);
/* 打印数据 */
rt_kprintf("%s\n",rx_buffer);
rt_kprintf("%s\n", rx_buffer);
}
}
}
void serial_send(char *str)
{
rt_device_write(serial, 0, str, (sizeof(str) - 1));
@ -147,4 +153,4 @@ int aiv_init(void)
return ret;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(aiv_init,siri start);
MSH_CMD_EXPORT(aiv_init, siri start);

View File

@ -1 +1,2 @@
void serial_send(char *str);
void assist_control(char *rx_buffer);

View File

@ -24,8 +24,13 @@
struct rt_device_pwm *motor_dev; // pwm设备句柄
rt_uint32_t period = 1000000000; // 单位us 向左6位变毫秒 1s
rt_uint32_t pulse = 1000000;
rt_uint32_t period = 100000000; // 单位us 向左6位变毫秒 10s
// rt_uint32_t pulse = 1000000;
#define PIN_MOTOR2 GET_PIN(B, 2)
int motor1=PIN_HIGH;
/**
@ -36,20 +41,16 @@ rt_uint32_t pulse = 1000000;
*/
void motor_speed(int num)
{
rt_pwm_set(motor_dev, MOTOR_PWM_DEV_CHANNEL, period, 100-(num * period / 100));
rt_pwm_set(motor_dev, MOTOR_PWM_DEV_CHANNEL, period, (100-num)/ 100 * period );
rt_pin_write(PIN_MOTOR2, num>0?PIN_LOW:PIN_HIGH);
}
#define PIN_MOTOR1 GET_PIN(B, 2)
int motor1=PIN_HIGH;
int mot_init(void)
{
// rt_pin_mode(PIN_MOTOR1, PIN_MODE_OUTPUT);
// rt_pin_write(PIN_MOTOR1, PIN_HIGH);
rt_pin_mode(PIN_MOTOR2, PIN_MODE_OUTPUT);
rt_pin_write(PIN_MOTOR2, PIN_HIGH);
motor_dev = (struct rt_device_pwm *)rt_device_find(MOTOR_PWM_DEV_NAME);
if (motor_dev == RT_NULL)
{
@ -57,7 +58,8 @@ int mot_init(void)
return RT_ERROR;
}
/* 设置PWM周期和脉冲宽度默认值 */
motor_speed(100);
motor_speed(0);
rt_pwm_enable(motor_dev, MOTOR_PWM_DEV_CHANNEL);
LOG1("motor init success!");
}
void motor_set(int argc, char **argv)

View File

@ -17,6 +17,7 @@
#include "my_func.h"
#include "indicator_led.h"
#include "sensor.h"
#include "assistant.h"
#define THREAD_PRIORITY 25
#define THREAD_STACK_SIZE 4096
#define THREAD_TIMESLICE 5
@ -119,6 +120,12 @@ static void example_message_arrive(void *pcontext, void *pclient, iotx_mqtt_even
EXAMPLE_TRACE("Topic : %.*s", topic_info->topic_len, topic_info->ptopic);
EXAMPLE_TRACE("Payload: %.*s", topic_info->payload_len, topic_info->payload);
EXAMPLE_TRACE("\n");
// topic_info->payload[strlen(topic_info->payload)] = '\0';
char str_tmp[32];
rt_strncpy(str_tmp, topic_info->payload, topic_info->payload_len);
str_tmp[topic_info->payload_len] = '\0';
assist_control(str_tmp);
break;
default:
break;
@ -172,9 +179,12 @@ void show_lcd()
{
lcd_y = 10;
easy_show_lcd("Temperature:", Temp);
easy_show_lcd("Humidity:", Humi);
easy_show_lcd("Brightness:(lux)", brightness);
easy_show_lcd("Ps data:", (float)ps_data);
// easy_show_lcd("Humidity:", Humi);
// easy_show_lcd("Brightness:(lux)", brightness);
// easy_show_lcd("Ps data:", (float)ps_data);
easy_show_lcd("Air quality:", ADC_air);
easy_show_lcd("PM2.5:", ADC_PM25);
easy_show_lcd("Pressure:",ADC_pressure);
// lcd_show_string(10, plus_lcd_y(10), 24, "Temperature:");
// rt_sprintf(tmp, "%f", Temp);
// lcd_show_string(10, plus_lcd_y(24), 32, tmp);
@ -394,7 +404,6 @@ static void mqtt_example_main(void *parameter)
res = example_subscribe(pclient);
if (res < 0)
{
wlan_connected = RT_FALSE;
IOT_MQTT_Destroy(&pclient);
return;
}
@ -436,33 +445,35 @@ void wlan_connect_thread(void *parameter)
{
(void *)parameter;
wlan_connected=RT_FALSE;
// rt_wlan_connect(WLAN_NAME,WLAN_PASSWORD);
while(rt_wlan_connect(WLAN_NAME,WLAN_PASSWORD)!= RT_EOK)
{
rt_thread_mdelay(2000);
}
rt_wlan_connect(WLAN_NAME,WLAN_PASSWORD);
rt_wlan_connect(WLAN_NAME,WLAN_PASSWORD);
// while(rt_wlan_connect(WLAN_NAME,WLAN_PASSWORD)!= RT_EOK)
// {
// rt_thread_mdelay(2000);
// }
rt_wlan_config_autoreconnect(RT_TRUE);
while (1)
{
if (rt_wlan_is_connected() == RT_TRUE)
{
if(!wlan_connected)
// if(!wlan_connected)
{
wlan_connected = RT_TRUE;
rt_thread_mdelay(10000);
// rt_wlan_connect(WLAN_NAME,WLAN_PASSWORD);
rt_thread_mdelay(5000);
mqt_init();
}
}
else
{
if(wlan_connected)
{
wlan_connected = RT_FALSE;
IOT_MQTT_Destroy(&pclient);
rt_thread_delete(MQTT_Thread);
}
}
rt_thread_mdelay(500);
// else
// {
// if(wlan_connected)
// {
// wlan_connected = RT_FALSE;
// IOT_MQTT_Destroy(&pclient);
// rt_thread_delete(MQTT_Thread);
// }
// }
rt_thread_mdelay(5000);
}
}
// /* 用于接收消息的信号量 */

View File

@ -169,7 +169,7 @@ static void sensor_thread(void *parameter)
warning_range("air", ADC_air, 0, 4095);
warning_range("PM25", ADC_PM25, 0, 500);
warning_range("pressure", ADC_pressure, 0, 4095);
rt_thread_mdelay(1000);
rt_thread_mdelay(2000);
}
}
void sensor_init(void)

View File

@ -45,7 +45,7 @@ void fan_on(void)
void fan_off(void)
{
LOG3("fan off!");
motor_speed(20);
motor_speed(0);
}
void light_on(void)
@ -59,5 +59,5 @@ void light_off(void)
{
LOG3("light off!");
rt_pin_mode(PIN_LED_B, PIN_MODE_OUTPUT);
rt_pin_write(PIN_LED_B, PIN_LOW);
rt_pin_write(PIN_LED_B, PIN_HIGH);
}

View File

@ -1 +1,5 @@
void danger_status(void);
void fan_on(void);
void fan_off(void);
void light_on(void);
void light_off(void);