一:回顧
??????? 上一節(jié)我們簡述了智能家居項目,實現(xiàn)了點燈的相關(guān)代碼編寫,還有WIFI模塊的固件燒錄。
二:連接平臺
連接什么平臺:
??????? 我們想要遠程控制家具的開關(guān)和獲取家中的狀態(tài),少不了一個可以傳輸數(shù)據(jù)的云平臺。我認為易監(jiān)控是一個簡單好用的云平臺。
怎么連接平臺:
微信搜索“易監(jiān)控”小程序
點擊舊版入口
綁定賬號
????????對話框發(fā)送:綁定賬號+賬號+密碼,例如:綁定賬號+YIGEJIE+123456789
??????? 這樣就可以通過賬號登錄易監(jiān)控了。
測試連接
使用網(wǎng)絡(luò)調(diào)試助手
??????? 這里順便說一下,易監(jiān)控的IP是114.215.65.250,客戶端的端口號有兩個,為4508和4509。
在調(diào)試助手中輸入IP和端口號
?????????然后在對話框中輸入你剛剛綁定的賬號,格式為:KEY:賬號+密碼,點擊發(fā)送即可。當然了,你要先點擊上面的連接哈。
登錄成功顯示
????????4508顯示???????
?
??????? 4509顯示
發(fā)送測試命令
??????? 在4508端口:發(fā)送格式為:DATA:xxxx+xxxxx\r\n。
????????在4509端口:發(fā)送格式為:ORDER:xxxx+xxxxx\r\n。
??????? 觀察兩邊是否能夠接收到數(shù)據(jù)。如果能夠接收到數(shù)據(jù),那么你的WIFI模塊基本上成功一般了。
三:WIFI模塊基礎(chǔ)知識
????????到了這里,我們在了解一些WIFI模塊的基礎(chǔ)知識就應(yīng)該開始著手書寫代碼了,首先我們先來了解一些基礎(chǔ)知識。
WIFI模塊的三種工作模式
?? ???? 1,STA 站點,在此模式下,可以去連接路由器,連接互聯(lián)網(wǎng)
?? ??? ?2,AP? 路由,在此模式下,可以產(chǎn)生熱點,讓其他設(shè)備連接
?? ??? ?3,STA + AP 既可以去連接路由器,也可以產(chǎn)生熱點
??????? 我們這里沒有別的設(shè)備連接就設(shè)置為STA模式。
WIFI模塊登陸服務(wù)器步驟
//測試指令
AT
//恢復(fù)出廠設(shè)置
AT+RESTORE
// 設(shè)置成STA模式
AT+CWMODE_CUR=1
//連接路由器
AT+CWJAP="sss","123456"
//建立TCP連接
AT+CIPSTART="TCP","114.215.65.250",4508
//發(fā)送前需要說明發(fā)送的長度,冒號和加號也算在內(nèi)哦
AT+CIPSEND=21
//賬號和密碼
KEY:YIGEJIE+123456789
延時函數(shù)
delay.c
#include "delay.h"
void Delay_us(uint32_t xus)
{
SysTick->LOAD = 72 * xus; //設(shè)置定時器重裝值
SysTick->VAL = 0x00; //清空當前計數(shù)值
SysTick->CTRL = 0x00000005; //設(shè)置時鐘源為HCLK,啟動定時器
while(!(SysTick->CTRL & 0x00010000)); //等待計數(shù)到0
SysTick->CTRL = 0x00000004; //關(guān)閉定時器
}
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
??????? 延時函數(shù)呢,我在這里就不過多講解了,因為我們的重點并不在這個上面,想要完全了解延時函數(shù)是怎么寫的話,推薦你去B站看江協(xié)科技哈,說得很好。在下面我會說明為什么要用到延時函數(shù)。
四:WIFI模塊代碼編寫
??????? 如果說想要實現(xiàn)在手機上發(fā)送命令控制開發(fā)板上的設(shè)備的開啟和關(guān)閉的話,還需要配置串口和寫中斷服務(wù)函數(shù)才行,代碼量較大,我會在下一節(jié)來書寫串口,并詳細解釋為什么這樣寫。
WIFI模塊代碼
wifi.c
#include "wifi.h"
//數(shù)據(jù)發(fā)送函數(shù)
void SendData_String(USART_TypeDef* USARTx, char *data, int len)
{
int i;
for(i=0; i < len; i++){
//等待發(fā)送數(shù)據(jù)寄存器空標準位失效
while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE)==RESET);
USART_SendData(USARTx, *data);
data++;
}
}
//WIFI初始化函數(shù)
void Wifi_Config(void)
{
//測試指令
SendData_String(USART2,"AT\r\n",strlen("AT\r\n"));
Delay_ms(200);
//恢復(fù)出廠設(shè)置
SendData_String(USART2,"AT+RESTORE\r\n",strlen("AT+RESTORE\r\n"));
Delay_ms(400);
//設(shè)置成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);
//發(fā)送前先告知字節(jié)數(shù)
SendData_String(USART2,"AT+CIPSEND=21\r\n",strlen("AT+CIPSEND=21\r\n"));
Delay_ms(300);
//發(fā)送賬號和密碼
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中的第一個函數(shù)是串口發(fā)送數(shù)據(jù)函數(shù),可以將data里面的數(shù)據(jù)全部發(fā)送出去,而不是一位一位的發(fā)送。wifi.c中的第二個函數(shù)是WIFI初始化函數(shù),根據(jù)我們上面的指令來進行設(shè)置,根據(jù)我的實測,有沒有_CUR的影響其實不大,所以可加可不加。
????????至于為什么要用延時函數(shù)來初始化WIFI而不用strcmp函數(shù)去比對AT指令響應(yīng)的值,這是因為用strcmp函數(shù)去比對AT指令響應(yīng)的值是可以加快WIFI初始化的速度,但是你要在函數(shù)中寫很多以下代碼:
while((strcmp(us2_buf,"OK")) != 0);//buf為接收的值
若是你的程序一直卡在某個while循環(huán)中的時候,你要不斷的用USB轉(zhuǎn)TTL設(shè)備去查看串口發(fā)送指令情況,所以為了省事,這樣是一個不錯的方法。
五:總結(jié)
??????? 本篇描述了云平臺的使用方法,簡述了WIFI模塊的基礎(chǔ)知識,還有延時函數(shù),WIFI模塊代碼的編寫。文章來源:http://www.zghlxwxcb.cn/news/detail-830240.html
??????? 下節(jié)更精彩......文章來源地址http://www.zghlxwxcb.cn/news/detail-830240.html
到了這里,關(guān)于基于STM32F103RCT6之手把手教你寫智能家居項目(2)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!