基于STM32F103RCT6之手把手教你写智能家居项目(2)

这篇具有很好参考价值的文章主要介绍了基于STM32F103RCT6之手把手教你写智能家居项目(2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一:回顾

        上一节我们简述了智能家居项目,实现了点灯的相关代码编写,还有WIFI模块的固件烧录。

二:连接平台

连接什么平台:

        我们想要远程控制家具的开关和获取家中的状态,少不了一个可以传输数据的云平台。我认为易监控是一个简单好用的云平台。

怎么连接平台:

微信搜索“易监控”小程序

基于STM32F103RCT6之手把手教你写智能家居项目(2),STM32智能家居项目,stm32,智能家居,嵌入式硬件

点击旧版入口

基于STM32F103RCT6之手把手教你写智能家居项目(2),STM32智能家居项目,stm32,智能家居,嵌入式硬件

绑定账号

        对话框发送:绑定账号+账号+密码,例如:绑定账号+YIGEJIE+123456789

基于STM32F103RCT6之手把手教你写智能家居项目(2),STM32智能家居项目,stm32,智能家居,嵌入式硬件

        这样就可以通过账号登录易监控了。

测试连接

使用网络调试助手 基于STM32F103RCT6之手把手教你写智能家居项目(2),STM32智能家居项目,stm32,智能家居,嵌入式硬件

        这里顺便说一下,易监控的IP是114.215.65.250,客户端的端口号有两个,为4508和4509。

在调试助手中输入IP和端口号

基于STM32F103RCT6之手把手教你写智能家居项目(2),STM32智能家居项目,stm32,智能家居,嵌入式硬件

         然后在对话框中输入你刚刚绑定的账号,格式为:KEY:账号+密码,点击发送即可。当然了,你要先点击上面的连接哈。

登录成功显示

        4508显示       

基于STM32F103RCT6之手把手教你写智能家居项目(2),STM32智能家居项目,stm32,智能家居,嵌入式硬件 

        4509显示

基于STM32F103RCT6之手把手教你写智能家居项目(2),STM32智能家居项目,stm32,智能家居,嵌入式硬件

发送测试命令

        在4508端口:发送格式为:DATA:xxxx+xxxxx\r\n。

        在4509端口:发送格式为:ORDER:xxxx+xxxxx\r\n。

        观察两边是否能够接收到数据。如果能够接收到数据,那么你的WIFI模块基本上成功一般了。

三:WIFI模块基础知识

        到了这里,我们在了解一些WIFI模块的基础知识就应该开始着手书写代码了,首先我们先来了解一些基础知识。

WIFI模块的三种工作模式

        1,STA 站点,在此模式下,可以去连接路由器,连接互联网
        2,AP  路由,在此模式下,可以产生热点,让其他设备连接
        3,STA + AP 既可以去连接路由器,也可以产生热点

        我们这里没有别的设备连接就设置为STA模式。

WIFI模块登陆服务器步骤

    //测试指令
    AT
    //恢复出厂设置
    AT+RESTORE   
    // 设置成STA模式
	AT+CWMODE_CUR=1
    //连接路由器  
	AT+CWJAP="sss","123456" 
    //建立TCP连接
	AT+CIPSTART="TCP","114.215.65.250",4508 
    //发送前需要说明发送的长度,冒号和加号也算在内哦
	AT+CIPSEND=21
    //账号和密码
	KEY:YIGEJIE+123456789
	

延时函数

delay.c
#include "delay.h"


void Delay_us(uint32_t xus)
{
	SysTick->LOAD = 72 * xus;				//设置定时器重装值
	SysTick->VAL = 0x00;					//清空当前计数值
	SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器
	while(!(SysTick->CTRL & 0x00010000));	//等待计数到0
	SysTick->CTRL = 0x00000004;				//关闭定时器
}


void Delay_ms(uint32_t xms)
{
	while(xms--)
	{
		Delay_us(1000);
	}
}
 

void Delay_s(uint32_t xs)
{
	while(xs--)
	{
		Delay_ms(1000);
	}
} 
delay.h
#ifndef __DELAY_H
#define __DELAY_H

include "stm32f10x.h"

void Delay_us(uint32_t us);
void Delay_ms(uint32_t ms);
void Delay_s(uint32_t s);

#endif

        延时函数呢,我在这里就不过多讲解了,因为我们的重点并不在这个上面,想要完全了解延时函数是怎么写的话,推荐你去B站看江协科技哈,说得很好。在下面我会说明为什么要用到延时函数。

四:WIFI模块代码编写

        如果说想要实现在手机上发送命令控制开发板上的设备的开启和关闭的话,还需要配置串口和写中断服务函数才行,代码量较大,我会在下一节来书写串口,并详细解释为什么这样写。

WIFI模块代码

wifi.c
#include "wifi.h"

//数据发送函数
void SendData_String(USART_TypeDef* USARTx, char *data, int len)
{
	int i;
	for(i=0; i < len; i++){	
		//等待发送数据寄存器空标准位失效
		while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE)==RESET);
		USART_SendData(USARTx, *data);
		data++;
	}
}

//WIFI初始化函数
void Wifi_Config(void)
{
    //测试指令
	SendData_String(USART2,"AT\r\n",strlen("AT\r\n"));
	Delay_ms(200);

	//恢复出厂设置
	SendData_String(USART2,"AT+RESTORE\r\n",strlen("AT+RESTORE\r\n"));
	Delay_ms(400);

	//设置成STA模式
	SendData_String(USART2,"AT+CWMODE_CUR=1\r\n",strlen("AT+CWMODE_CUR=1\r\n"));
	Delay_ms(400);

    //连接路由器
	SendData_String(USART2,"AT+CWJAP_CUR=\"sss\"\"123456789\"\r\n",strlen("AT+CWJAP=\"WJJGAME\",\"66666666\"\r\n"));
	Delay_ms(8000);
	
    //建立TCP连接
    SendData_String(USART2,"AT+CIPSTART=\"TCP\",\"114.215.65.250\"4508\r\n",strlen("AT+CIPSTART=\"TCP\",\"114.215.65.250\",4508\r\n"));
    Delay_ms(7000);

    //发送前先告知字节数
    SendData_String(USART2,"AT+CIPSEND=21\r\n",strlen("AT+CIPSEND=21\r\n"));
	Delay_ms(300);

    //发送账号和密码
	SendData_String(USART2,"KEY:YIGEJIE+123456789\r\n",strlen("KEY:YIGEJIE+123456789\r\n"));
	Delay_ms(900);
wifi.h
#ifndef  __WIFI_H_
#define  __WIFI_H_

#include "stm32f10x.h"

void SendData_String(USART_TypeDef* USARTx, char *data, int len);

void Wifi_Config(void);

#endif

代码解析

        我们可以看到,wifi.c中的第一个函数是串口发送数据函数,可以将data里面的数据全部发送出去,而不是一位一位的发送。wifi.c中的第二个函数是WIFI初始化函数,根据我们上面的指令来进行设置,根据我的实测,有没有_CUR的影响其实不大,所以可加可不加。

        至于为什么要用延时函数来初始化WIFI而不用strcmp函数去比对AT指令响应的值,这是因为用strcmp函数去比对AT指令响应的值是可以加快WIFI初始化的速度,但是你要在函数中写很多以下代码:

while((strcmp(us2_buf,"OK")) != 0);//buf为接收的值

若是你的程序一直卡在某个while循环中的时候,你要不断的用USB转TTL设备去查看串口发送指令情况,所以为了省事,这样是一个不错的方法。

五:总结

        本篇描述了云平台的使用方法,简述了WIFI模块的基础知识,还有延时函数,WIFI模块代码的编写。

        下节更精彩......文章来源地址https://www.toymoban.com/news/detail-830240.html

到了这里,关于基于STM32F103RCT6之手把手教你写智能家居项目(2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RFID课程设计--基于STM32F103RCT6的智能门禁系统,STM32RCT6+RC522+OLED+DHT11+4*4矩阵键盘

      本次课程设计要求如下,我们团队两人完成了90%的功能。   其中我们设置的是刷卡错误3次不报警,密码输入错3次报警(原理相同,大家根据需要自行修改)   然后暂时只能显示卡号和卡是第几个录入到系统中的,想到身份证号和电话(身份信息)输进去有点长就没

    2024年01月16日
    浏览(81)
  • stm32f103rct6引脚功能表格

    脚号 引脚名称 主功能 默认复用 重定义 备注 1             VBAT VBAT -- -- 说明1 2             PC13-TAMPER-RTC PC13 TAMPER-RTC -- 说明3 3             PC14-OSC32_IN PC14 OSC32_IN -- 说明3 4             PC15-OSC32_OUT PC15 OSC32_OUT -- 说明3 5             OSC_IN OSC_IN -- CAN_RX 晶振

    2024年02月06日
    浏览(48)
  • 手把手教你写stm32f103智能风扇

    本系统可以分为两个模式来进行运行,分别为手动模式和自动模式,同时,在上电进入系统后,还会有一个模式选择的界面产生。 模式选择:在此界面中,可以通过按键K1来控制模式选择,两个模式分别为手动模式和自动模式;通过按键K2可以进入模式。 手动模式:在手动模

    2023年04月17日
    浏览(66)
  • STM32F103RCT6——定时器简单用法

    STM32F10xx参考手册英文和中文版 百度网盘:https://pan.baidu.com/s/1Z2nB0WVJIxvm3VOI9MQiiw 提取码:lxlx STM32F103RCT6数据手册 链接:https://pan.baidu.com/s/1tRchgf-5C1MN4W58vQ9zPg 提取码:lxlx STM32F103RCT6包括,高级控制定时器TIM1和TIM8,通用定时器TIM2-5,基本定时器TIM6和TIM7. 高级控制定时器TIM1,TI

    2024年02月08日
    浏览(61)
  • 从零开始制作STM32F103RCT6小车(一)

            仅以此系列给实验室的学弟学妹作为小车制作教程来使用,后续的内容我会在这个暑假陆续更新出来,本篇的内容是新建一个适用于STM32F103RCT6的工程         接下来的操作几乎是基于STM32F1xx系列的固件库,这里我给大家列出链接 STM32F1xx系列固件库               

    2023年04月08日
    浏览(63)
  • stm32f103rct6使用内部晶振作为时钟源

    stm32f103rct6(库函数版例程)使用内部晶振8M,倍频64M 参考 https://blog.csdn.net/oHuanCheng/article/details/105112884 http://www.openedv.com/forum.php?mod=viewthreadtid=286233 https://blog.csdn.net/ll148305879/article/details/106138302 修改system_stm32f10x.c文件中的void SystemInit(void)函数 内部时钟用到了FLASH,需要添加s

    2024年02月07日
    浏览(186)
  • stm32F103RCT6使用FFT运算分析波形详解(细致教学)

    最近学校电赛队伍招新,出的招新题就是低频示波器的。之前一直没有弄懂FFT,借着这次机会实现了一下,做了一个小示波器 FFT原理简述 FFT,就是快速傅里叶变换,这个操作能够将时域信号转化成频域信号,然后对信号进行分析 这样说可能有点抽象。讲细点就是指能够直观

    2024年02月14日
    浏览(52)
  • STM32F103RCT6驱动SG90舵机-完成正反转角度控制

    SG90是一种微型舵机,也被称为伺服电机。它是一种小型、低成本的直流电机,通常用于模型和机器人控制等应用中。SG90舵机可以通过电子信号来控制其精确的位置和速度。它具有体积小、重量轻、响应快等特点,因此在各种小型机械设备上得到了广泛应用。 SG90舵机通常用于

    2024年02月03日
    浏览(66)
  • STM32F103RCT6电路设计及绘制方法和学习体会

    目录 1电路图各部分原理分析 1.1通信-下载板块接口电路 1.1.1 通信模块 1.1.2 显示灯 1.2电源转化电路 1.2.1 电源转化 1.3晶振电路 1.4 OLED显示屏接口电路 1.5 独立按键电路 1.6 JTAG/SWD调试接口电路 1.7 STM32微控制器电路 1.7.1 副芯片原理 1.7.2 主芯片原理 1.8 外扩引脚 1.9 显示灯 2图纸的

    2024年02月14日
    浏览(62)
  • 设计分享 | STM32F103RCT6利用ULN2003驱动步进电机正反转

    https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==mid=2247484170idx=1sn=3fa68d0fbf30cf614e8779abf38c3e2bchksm=cf430652f8348f44e4b95bb7b22ce7f9f5a86e13f421741aefd08cedb169708309c79566ab1ftoken=1923877603lang=zh_CN#rd https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==mid=2247484170idx=1sn=3fa68d0fbf30cf614e8779abf38c3e2bchksm=cf430652f8348f44e4b95bb7b22ce7f9f5a8

    2023年04月17日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包