当前位置: 首页 > news >正文

通过网络调试,上位机电脑控制下位机单片机板载灯的亮灭

单片机先说:“你好,我在!”
电脑听到后,才愿意说:“那好,开灯吧!”
单片机收到“开灯”命令,就把 LED 灯点亮。

为什么必须发送温湿度“伪数据”(比如 "t:21.5 h:32.0"),WiFi 模块(ESP8266)才能正常接收 LEDA_ON / LEDA_OF 指令并控制 LED?

while(1)
{DHT11_TEST();if(ucharT_data_H !=0) {sprintf(buf, "t:%d.%d h:%d.%d", ...);HAL_UART_Transmit(&huart2, (uint8_t*)buf, 13, 2000);  // 发真实数据(可能失败)}HAL_UART_Transmit(&huart2, (uint8_t*)"t:21.5 h:32.0", 13, 2000); // 固定发“伪数据”if(UsartType2.receive_flag) {// 处理 LEDA_ON / LEDA_OF}
}

mian函数具体代码

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** <h2><center>&copy; Copyright (c) 2023 STMicroelectronics.* All rights reserved.</center></h2>** This software component is licensed by ST under BSD 3-Clause license,* the "License"; You may not use this file except in compliance with the* License. You may obtain a copy of the License at:*                        opensource.org/licenses/BSD-3-Clause********************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "dma.h"
#include "usart.h"
#include "gpio.h"
#include "adc.h"
#include "lcd.h"   
#include "esp8266.h"
#include "dht11.h"
#include "bsp.h"
#include "stm32f0xx_hal.h"
#include "key.h"
/**/
//音频对照
#define H7 262        //高音 xi           //音乐的高低频率 做成了一个宏。
#define H6 286        //高音 la
#define H5 311
#define H4 349
#define H3 392
#define H2 440
#define H1 494
#define Z7 523        //中音xi
#define Z6 587        //中音la
#define Z5 659
#define Z4 698
#define Z3 784
#define Z2 880
#define Z1 987
#define L7 1046      //低音xi
#define L6 1174     // 低音la
#define L5 1318
#define L4 1396
#define L3 1567
#define L2 1760
/**/uint8_t revData[100];
uint8_t esp8266RevData[200];  //存储接收的数据void SystemClock_Config(void);
int rectangle(int x, int y, int l, int w, int color);
void beep_init();
void beep(int freq, int ms);
void WIFI_Init();
void Light_Init();/*** @brief  The application entry point.* @retval int*/
int main(void)
{char buf[50]={0};// 硬件初始化HAL_Init();//设置系统时钟 SystemClock_Config();//GPIO初始化MX_GPIO_Init();//GPIO写入函数   引脚组  引脚号  值HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7,GPIO_PIN_SET);//屏幕Lcd_Init();//清除屏幕 rgba//Lcd_Clear(0xf000);Lcd_Clear(YELLOW);//wifi初始化WIFI_Init();//连接wifi	 如果成功 在屏幕上 显示ip地址if(initEsp8266()){Gui_DrawFont_GBK16(10,10,BLACK,YELLOW,StationIPV4);}while(1){//收集温度湿度数据DHT11_TEST();if(ucharT_data_H !=0){//将收集到的数据 存放到字符串当中sprintf(buf,"t:%d.%d h:%d.%d",ucharT_data_H,ucharT_data_L,ucharRH_data_H,ucharRH_data_L);//Gui_DrawFont_GBK16(10,10,BLACK,YELLOW,buf);//发送数据   位置     数据                长度  最大延时HAL_UART_Transmit(&huart2,(uint8_t*)buf,13,2000);}HAL_UART_Transmit(&huart2,(uint8_t*)"t:21.5 h:32.0",13,2000);//如果单片机接收到了消息if(UsartType2.receive_flag){Gui_DrawFont_GBK16(10,70,RED,YELLOW,UsartType2.usartDMA_rxBuf);if(strstr(UsartType2.usartDMA_rxBuf,"LEDA_ON")!=0)HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2,GPIO_PIN_RESET);if(strstr(UsartType2.usartDMA_rxBuf,"LEDA_OF")!=0)HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2,GPIO_PIN_SET);//清空消息以便下次接收memset(UsartType2.usartDMA_rxBuf,0,sizeof(UsartType2.usartDMA_rxBuf));UsartType2.Usart_rx_len=0;}}
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};/** Initializes the CPU, AHB and APB busses clocks */RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB busses clocks */RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK){Error_Handler();}PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
}
void Light_Init()
{MX_DMA_Init();		//ADC数据读取用到了DMAMX_ADC_Init();		//初始化ADCHAL_ADC_Start_DMA(&hadc,(uint32_t*)ADC_DMA_Value,ADC_NUM);//开始转换ADC 
}
void Error_Handler(void)
{/* USER CODE END Error_Handler_Debug */
}
void WIFI_Init()
{MX_DMA_Init();	MX_USART1_UART_Init();MX_USART2_UART_Init();MX_ADC_Init();	HAL_ADC_Start_DMA(&hadc,(uint32_t*)ADC_DMA_Value,ADC_NUM);UsartType1.dmaSend_flag =0;UsartType2.dmaSend_flag =0;__HAL_UART_ENABLE_IT(&huart2,UART_IT_IDLE); HAL_UART_Receive_DMA(&huart2,a_Usart2_RxBuffer,RXLENGHT); }
void beep_init()
{GPIO_InitTypeDef GPIO_InitStruct = {0};	GPIO_InitStruct.Pin = GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void myDelay(int n)
{int i, j;for(i = 0; i < n; i++){for(j = 0; j < 5; j++){;}}
}
void beep(int freq, int ms)     //freq 频率   ms 声音播放时间
{int i;for(i = 0; i < ms * 1000 / freq / 2; i++){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7, GPIO_PIN_RESET);myDelay(freq);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7, GPIO_PIN_SET);myDelay(freq);	   }
}
#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{ /* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

先在keil中设置好port

图1.1 esp8266.h文件的设置

使用网络调试助手检测是否可以正常开闭板载小灯,如图显示,在发送LEDA_ON的数据时,小灯打开,在发送LEDA_OF的数据时,小灯熄灭

                    图  发送数据LEDA_ON                   图1.1 发送数据LEDA_OF

3.3 实物整体测试

在上位机qt中点击开灯,则板载灯亮起,点击关灯,则板载灯熄灭

  

                

http://www.dtcms.com/a/601724.html

相关文章:

  • 学习笔记八:对数几率回归
  • Linux如何从docker hub下载arm镜像
  • 分析仪器数据处理软件开发
  • LASSO框架(Belloni高维估计微课笔记)
  • 自己开发一款游戏怎么做明港seo公司
  • 公司做二手网站的用意微帮推广平台有哪些
  • 小迪安全v2023学习笔记(一百四十七讲)—— C2远控篇CC++ShellCode定性分析生成提取Loader加载模式编译执行
  • .NET 10发布和它的新增功能
  • (Spring)Spring Boot 自动装配原理总结
  • 网站没有备案做竞价吗浙江企业响应式网站建设设计
  • 若依部署Nginx和Tomcat
  • flash网站报价电子商务seo名词解释
  • 宁德网站开发seo排名优化方式
  • 实时大数据计算中,Flink的滑动窗口,乱序,允许消息迟到机制
  • 李飞飞联合杨立昆发表最新论文:超感知AI模型从视频中“看懂”并“预见”三维世界
  • GSV1016/ACP#HDMI2.0 HDCP1.4 发射器(TTL/LVDS 输入 + 音频插入)技术解析
  • 一级a做爰片免费网站中国片落实二十条优化措施
  • Dell笔记本电脑怎么连接无线网络 详细教程分享
  • 龙华网站建设哪家好我的世界做视频封面的网站
  • 男女做羞羞漫画网站南昌企业网站建设公司
  • 【学习笔记】多智能体系统
  • openeuler-24.3欧拉系统mysql开机自启报错
  • Versatile英文单词学习
  • 【OCP考试喜报】2025.11月 ORACLE OCP 考试通过
  • 【NCCL】NCCL 中的channel 是什么概念?
  • 工业自动化系统使用的高边驱动IC
  • 云南安宁做网站的公司皖icp备 网站建设
  • 做百度移动网站点击电脑有网
  • 如何高效设置机器学习超参数?——借鉴成熟AutoML框架的实践
  • python学习之路(七)