项目完善、改进程序【7天物联网 DAY7笔记】

学习笔记:百问网 7天物联网智能家居实战训练营

总结

学完课程后感觉挺不错的,但自己对HAL库开发不够熟悉,代码用的很粗糙

只看了基础课,等学完库函数/寄存器版本,了解RTOS后再去学提高班吧

基础班的内容

嵌入式的基础概念和开发流程【7天物联网 DAY1笔记】

上手思路_stm32CubeMX创建工程【7天物联网 DAY2笔记】

时钟系统、GPIO【7天物联网 DAY3笔记】

中断系统、串口通信【7天物联网 DAY4笔记】

AT指令,通信步骤【7天物联网 DAY5笔记】

初步实现项目【7天物联网 DAY6笔记】

完善后的代码

利用串口输入WIFI的账号密码

上节的代码是直接设置了WIFI的账号密码
在手机上我们可以很轻松的完成更换连接的wifi和密码,但是在STM32F103_MINI开发板上,因为外设有限,所以选择使用串口输入,用计算机来输入WIFI的账号密码,并通过串口传输到开发板上。

 // 0.检测是否更新WIFI信息
  Key_Update_WIFI((char *)wifi_data, 2000);
  
  // 1.启动串口2接收(中断方式)
  USART2_StartRx();
  
  // 2.串口2发送AT指令,启动TCP服务
  //USART2_Transmit(tx_data, sizeof(tx_data), 500);
  ESP8266_SendCommand("AT+RST", "OK", 500);
  HAL_Delay(1000);
  ESP8266_SendCommand("AT+CWMODE=1", "OK", 500);
  ESP8266_SendCommand((char *)wifi_data, "OK", 5000);
  //ESP8266_SendCommand("AT+CWJAP=\"100ask\",\"100ask100ask\"", "OK", 5000);
  //ESP8266_SendCommand("AT+CIPMUX=1", "OK", 500);
  //ESP8266_SendCommand("AT+CIPSERVER=1,9999", "OK", 500);
  ESP8266_SendCommand("AT+CIPSTART=\"UDP\",\"192.168.1.1\",9999,9999,2", "OK", 500);
  ESP8266_SendCommand("AT+CIFSR", "OK", 500);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	// 3.1 按键按下,发送门铃信号
	if (Key_GetFlag() == 1)
	{
		//ESP8266_Send_TCP("{\"data\":\"doorbell\",\"status\":\"1\"}");
		ESP8266_Send_UDP("{\"data\":\"doorbell\",\"status\":\"1\"}");
	}
	
	
	// 3.2 收到数据,控制灯
	if (USART2_Receive(rx_data)) //接收到数据
	{
		if (strstr((char *)rx_data, "\"dev\":\"led\",\"status\":\"0\""))
		{
			printf("led off\n\r");
			HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
			USART2_ClearBuf();
			memset(rx_data, 0, 200);
		}
		else if (strstr((char *)rx_data, "\"dev\":\"led\",\"status\":\"1\""))
		{
			printf("led on\n\r");
			HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
			USART2_ClearBuf();
			memset(rx_data, 0, 200);
		}
	}
  }

获取WIFI账号密码:

while(ch != 'r'):判断是否输入完成,当我们输入完成时,默认是通过按下键盘上的回车键来结束本次输入,Windows的回车键代表的数据是\r\n,其中\r是回车,\n代表换行,因此我们可以根据获取的数据中是否有\r来判断。

getchar():用于从串口获取数据,每次获取一个字符。

if(ch > ' '):通过判断是否大于空格,除去非法输入。

​ reason:我们输入的内容是以ASCII码的形式来表示的,并且不止是我们输入的A、B、C等是ASCII码表示,而且像方向键,回车键等一些控制字符,也是如此,而在ASCII码表上,空格之前的字符都是一些控制字符,大于空格的则是我们常见的数据字符,因此我们使用这个方法来除去非法输入。

printf("%c",ch):输入回显。


笔记参考:百问网 物联网智能家居 DAY7的学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值