基于STM32和Linux的远程智控项目

项目要求

  1. SHT20检测温湿度, 将温湿度的数值上传到OLCD屏
  2. 当湿度高于设置阈值, 控制风扇排风
  3. 当湿度低于设置阈值, 控制马达震动模拟加湿过程
  4. 通过按键,可以修改阈值(阈值信息在OLCD显示)
  5. STM32 与 ESP8266 基于 TCP通信
  6. 实现TCP服务器(Linux端)控制加湿器, 当STM32接收到:
    FAN_ON, 控制风扇旋转
    FAN_OFF,控制风扇停止
    MOTOR_ON, 控制马达震动
    MOTOR_OFF,停止马达震动
    HUM:(阈值), TCP服务器修改湿度阈值
    TUM:(阈值), TCP服务器修改湿度阈值
  7. STM32 每隔2s 将SHT20数据 上传到 TCP服务器(Linux端), Linux端可以将SHT20数据上传的Sqlite数据库中
  8. STM32可以向ESP8266发送指令 "CLEAR" : 清除TCP服务器SQLITE数据库中的数据
    代码
cpp 复制代码
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* Configure the System Power */
  SystemPower_Config();

  /* USER CODE BEGIN SysInit */


  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_USART1_UART_Init();
  MX_SPI1_Init();
  MX_UART5_Init();
  MX_TIM3_Init();
  /* USER CODE BEGIN 2 */
	float tep,hum;
	uint32_t val;
	
	char distephum_str[50];

	char hummax_str[20];
	
	HAL_TIM_Base_Start_IT(&htim3);
	
	//开启接受中断
	HAL_UART_Receive_IT(&huart5,buf,sizeof(buf));

	//开启空闲中断
	__HAL_UART_ENABLE_IT(&huart5,UART_IT_IDLE);
	
	
	

	
	//wifi模式
	uint32_t ret =wifi_config("AT",100);
	if(ret == -1)
	{
			u1_printf("AT is err\n");
	
	
	}
	
	
	ret =wifi_config("AT+CWMOD=1",100);
	if(ret == -1)
	{
			u1_printf("CWMOD is err\n");
	
	
	}
	
	ret =wifi_connect("HQYJ-SCB-2.4","hqyj666666");
	if(ret == -1)
	{
			u1_printf("wifi is err\n");
	
	
	}
	
	ret =wifi_connect_tcp("192.168.0.103",1111);
	if(ret == -1)
	{
			u1_printf("tcp is err\n");
	
	
	}
	
	
	ret =wifi_config("AT+CIPMODE=1",10);
	if(ret == -1)
	{
			u1_printf("CIPMODE is err\n");
	
	
	}
	ret =wifi_config("AT+CIPSEND",10);
	if(ret == -1)
	{
			u1_printf("CIPSEND is err\n");
	
	
	}


	
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
	/* 外设初始化 */
	
	
	ILI9341_Init();
	ILI9341_Clear(RED);
	
	
	uint32_t max;
	
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		//TCP_send("hello\n");
		HAL_Delay(50);
		
		Recv_FromTCP();//接收指令并控制
		
		//读取温湿度
		val= SHT20_Read_huntep(&tep,&hum);
		sprintf(hummax_str, "hum_max = %.2f ",(float)hum_max);
		
		// 将浮点数转换为字符串
		sprintf(distephum_str, "tep = %.2f , hum =%.2f", tep,hum);
		if(hummax_plus_flag ==1)
		{
				hummax_plus_flag=0;
				hum_max+=2;
		
		
		}
		if(hummax_minus_flag ==1)
		{
				hummax_minus_flag=0;
				hum_max-=2;
		
		
		}
		
		//1.将温湿度的数值发送给服务器
		if(sendtoTCP_flag ==1)
		{
					sendtoTCP_flag=0;
					TCP_send(distephum_str);
				
		}
		//1.将温湿度的数值上传到OLCD屏
		
		Gui_DrawFont_GBK16(0, 0, BLUE, RED,(unsigned char*)hummax_str);	
		
		Gui_DrawFont_GBK16(0, 20, BLUE, RED,(unsigned char*)distephum_str);	
		
		//当2当湿度高于设置阈值, 控制风扇排风
		//3.当湿度低于设置阈值, 控制马达震动模拟加湿过程
		if(hum>=hum_max)
		{
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,1);
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,0);
		
		}else
		{
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,0);
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,1);
		
		}
		
		
		HAL_Delay(1000);
  }
	
	
  /* USER CODE END 3 */
}
相关推荐
van叶~7 分钟前
Linux探秘坊-------4.进度条小程序
linux·运维·小程序
秋风&萧瑟8 分钟前
【数据结构】顺序队列与链式队列
linux·数据结构·windows
我科绝伦(Huanhuan Zhou)15 分钟前
Linux 系统服务开机自启动指导手册
java·linux·服务器
hunter2062062 小时前
ubuntu终端当一段时间内没有程序运行时,自动关闭终端。
linux·chrome·ubuntu
代码讲故事4 小时前
从Windows通过XRDP远程访问和控制银河麒麟ukey v10服务器,以及多次连接后黑屏的问题
linux·运维·服务器·windows·远程连接·远程桌面·xrdp
andylauren5 小时前
(5)STM32 USB设备开发-USB键盘
stm32·嵌入式硬件·计算机外设
qq_243050796 小时前
irpas:互联网路由协议攻击套件!全参数详细教程!Kali Linux入门教程!黑客渗透测试!
linux·网络·web安全·网络安全·黑客·渗透测试·系统安全
Ronin-Lotus6 小时前
嵌入式硬件篇---ADC模拟-数字转换
笔记·stm32·单片机·嵌入式硬件·学习·低代码·模块测试
IT北辰6 小时前
Linux下 date时间应该与系统的 RTC(硬件时钟)同步
linux·运维·实时音视频
Jason Yan7 小时前
【经验分享】ARM Linux-RT内核实时系统性能评估工具
linux·arm开发·经验分享