摘要:本文基于STM32單片機(jī)設(shè)計(jì)了一款基于物聯(lián)網(wǎng)的智能魚缸。
本文分享自華為云社區(qū)《基于STM32+華為云IOT設(shè)計(jì)的物聯(lián)網(wǎng)魚缸【玩轉(zhuǎn)華為云】》,作者: DS小龍哥 。
1. 前言
為了緩解學(xué)習(xí)、生活、工作帶來的壓力,提升生活品質(zhì),許多人喜歡在家中、辦公室等場所養(yǎng)魚。為節(jié)省魚友時間、勞力、增加養(yǎng)魚樂趣;為此,本文基于STM32單片機(jī)設(shè)計(jì)了一款基于物聯(lián)網(wǎng)的智能魚缸。該魚缸可以實(shí)現(xiàn)水溫檢測、水質(zhì)檢測、自動或手動換水、氛圍燈燈光變換和自動或手動喂食等功能為一體的控制系統(tǒng),魚缸通過ESP8266連接華為云IOT物聯(lián)網(wǎng)平臺,并通過應(yīng)用側(cè)接口開發(fā)了上位機(jī)APP實(shí)現(xiàn)遠(yuǎn)程對魚缸參數(shù)檢測查看,并能遠(yuǎn)程控制。
從功能上分析,需要用到的硬件如下:
(1)STM32系統(tǒng)板
(2)水溫溫度檢測傳感器: 測量水溫
(3)水質(zhì)檢測傳感器: 測量水中的溶解性固體含量,反應(yīng)水質(zhì)。
(4)步進(jìn)電機(jī): 作為魚飼料投食器
(5)RGB氛圍燈: 采用RGB 3色燈,給魚缸照明。
(6)抽水電動馬達(dá): 用來給魚缸充氧,換水,加水等。
(7)ESP8266 WIFI:設(shè)置串口協(xié)議的WIFI,內(nèi)置了TCP/IP協(xié)議棧,完善的AT指令,通過簡單的指令就可以聯(lián)網(wǎng)通信,但是當(dāng)前采用的ESP8266沒有燒寫第三方固件,采用原本的原滋原味的官方固件,沒有內(nèi)置MQTT協(xié)議,代碼里連接華為云物聯(lián)網(wǎng)平臺需要使用MQTT協(xié)議,所以在STM32代碼里通過MQTT協(xié)議文檔的字段結(jié)構(gòu)自己實(shí)現(xiàn)了MQTT協(xié)議,在通過ESP8266的TCP相關(guān)的AT指令完成數(shù)據(jù)發(fā)送接收,完成與華為云IOT平臺交互。
水產(chǎn)養(yǎng)殖水質(zhì)常規(guī)檢測的傳感器有哪些?水產(chǎn)養(yǎng)殖水質(zhì)常規(guī)檢測的傳感器有水質(zhì)ph傳感器、溶解氧傳感器和溫度傳感器。
(1)水質(zhì)ph傳感器:
ph傳感器是高智能化在線連續(xù)監(jiān)測儀,由傳感器和二次表兩部分組成??膳淙龔?fù)合或兩復(fù)合電極,以滿足各種使用場所。配上純水和超純水電極,可適用于電導(dǎo)率小于3μs/cm的水質(zhì)(如化學(xué)補(bǔ)給水、飽和蒸氣、凝結(jié)水等)的pH值測量。
(2)溶解氧傳感器:
氧氣的消耗量與存在的氧含量成正比,而氧是通過可透膜擴(kuò)散進(jìn)來的。傳感器與專門設(shè)計(jì)的監(jiān)測溶氧的測量電路或電腦數(shù)據(jù)采集系統(tǒng)相連。 溶解氧傳感器能夠空氣校準(zhǔn),一般校準(zhǔn)所需時間較長,在使用后要注意保養(yǎng)。如果在養(yǎng)殖水中工作時間過長,就必須定期地清洗膜,對其進(jìn)行額外保養(yǎng)。
在很多水產(chǎn)養(yǎng)殖中,每天測幾次溶氧就可以了解溶氧情況。對池塘和許多水槽養(yǎng)殖系統(tǒng)。溶氧水平不會變化很快,池塘一般每天檢測2~3次。 對于較高密度養(yǎng)殖系統(tǒng),增氧泵故障發(fā)生可能不到1h就會造成魚蝦等大面積死亡。這些密度高的養(yǎng)殖系統(tǒng)要求有足夠多的裝備或每小時多次自動測量溶氧。
(3)溫度傳感器:
溫度傳感器有多種結(jié)構(gòu),包括熱電偶、電阻溫度傳感器和熱敏電阻。熱電偶技術(shù)成熟,應(yīng)用領(lǐng)域廣,貨源充足。選擇熱電偶必須滿足溫度范圍要求,且其材料與環(huán)境相容。 電阻溫度傳感器(RTDs)的原理為金屬的電阻隨溫度的改變而改變。大多電阻溫度傳感器(RTDs)由鉑、鎳或鎳合金制成,其線性度比熱電偶好,熱切更加穩(wěn)定,但容易破碎。 熱敏電阻是電阻與溫度具有負(fù)相關(guān)關(guān)系的半導(dǎo)體。熱敏電阻比RTD和熱電偶更靈敏,也更容易破碎,不能承受大的溫差,但這一點(diǎn)在水產(chǎn)養(yǎng)殖中不成問題。
?
2. 硬件選型
2.1 STM32開發(fā)板
主控CPU采用STM32F103RCT6,這顆芯片包括48 KB SRAM、256 KB Flash、2個基本定時器、4個通用定時器、2個高級定時器、51個通用IO口、5個串口、2個DMA控制器、3個SPI、2個I2C、1個USB、1個CAN、3個12位ADC、1個12位DAC、1個SDIO接口,芯片屬于大容量類型,配置較高,整體符合硬件選型設(shè)計(jì)。當(dāng)前選擇的這款開發(fā)板自帶了一個1.4寸的TFT-LCD彩屏,可以顯示當(dāng)前傳感器數(shù)據(jù)以及一些運(yùn)行狀態(tài)信息。
2.2 杜邦線
2.3 PCB板
2.4 步進(jìn)電機(jī)
2.5 抽水馬達(dá)
2.6 水溫檢測傳感器
測溫采用DS18B20,DS18B20是常用的數(shù)字溫度傳感器,其輸出的是數(shù)字信號,具有體積小,硬件開銷低,抗干擾能力強(qiáng),精度高的特點(diǎn)。
DS18B20數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式,型號多種多樣,有LTM8877,LTM8874等等。
主要根據(jù)應(yīng)用場合的不同而改變其外觀。封裝后的DS18B20可用于電纜溝測溫,高爐水循環(huán)測溫,鍋爐測溫,機(jī)房測溫,農(nóng)業(yè)大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測溫和控制領(lǐng)域。
2.7 水質(zhì)檢測傳感器
TDS (Total Dissolved Solids)、中文名總?cè)芙夤腆w、又稱溶解性固體、又稱溶解性固體總量、表明1升水腫容有多少毫克溶解性固體、一般來說、TDS值越高、表示水中含有溶解物越多、水就越不潔凈、雖然在特定情況下TDS并不能有效反映水質(zhì)的情況、但作為一種可快速檢測的參數(shù)、TDS目前還可以作為有效的在水質(zhì)情況反映參數(shù)來作為參考。常用的TDS檢測設(shè)備為TDS筆、雖然價格低廉、簡單易用、但不能把數(shù)據(jù)傳給控制系統(tǒng)、做長時間的在線監(jiān)測、并做水質(zhì)狀況分析、使用專門的儀器、雖然能傳數(shù)據(jù)、精度也高、但價格很貴、為此這款TDS傳感器模塊、即插即用、使用簡單方便、測量用的激勵源采用交流信號、可有效防止探頭極化、延長探頭壽命的同時、也增加了輸出信號的穩(wěn)定性、TDS探頭為防水探頭、可長期侵入水中測量、該產(chǎn)品可以應(yīng)用于生活用水、水培等領(lǐng)域的水質(zhì)檢測、有了這個傳感器、可輕松DIY–套TDS檢測儀了、輕松檢測水的潔凈程度。
2.8 ESP8266
■模塊采用串口(LVTTL) 與MCU (或其他串口設(shè)備) 通信,內(nèi)置TCP/IP協(xié)議棧,能夠?qū)崿F(xiàn)串口與WIFI之間的轉(zhuǎn)換
■模塊支持LVTTL串口, 兼容3…3V和5V單片機(jī)系統(tǒng)
■模塊支持串 口轉(zhuǎn)WIFI STA、串口轉(zhuǎn)AP和WIFI STA+WIFI AP的模式,從而快速構(gòu)建串口-WIFI數(shù)據(jù)傳輸方案
■模塊小巧(19mm*29mm), 通過6個2.54mm間距排針與外部連接
3. 華為云IOT產(chǎn)品與設(shè)備創(chuàng)建
3.1 創(chuàng)建產(chǎn)品
鏈接:設(shè)備接入_IoTDA_IoT_物聯(lián)網(wǎng)IoT平臺-華為云
點(diǎn)擊右上角窗口創(chuàng)建產(chǎn)品。
填入產(chǎn)品信息。
接下來創(chuàng)建模型文件:
創(chuàng)建服務(wù)。
創(chuàng)建屬性。根據(jù)魚缸設(shè)備的傳感器屬性來添加屬性。
(1)LED氛圍燈
(2)抽水電機(jī)
(3)水質(zhì)傳感器
(4)水溫溫度計(jì)
?
3.2 創(chuàng)建設(shè)備
地址:?https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/device/all-device
點(diǎn)擊右上角創(chuàng)建設(shè)備。
按照設(shè)備的情況進(jìn)行填寫信息。
設(shè)備創(chuàng)建后保存信息:
{
"device_id": "62cd6da66b9813541d510f64_dev1",
"secret": "12345678"
}
創(chuàng)建成功。
3.3 設(shè)備模擬調(diào)試
為了測試設(shè)備通信的過程,在設(shè)備頁面點(diǎn)擊調(diào)試。
選擇設(shè)備調(diào)試:
3.4 MQTT三元組
為了方便能夠以真實(shí)的設(shè)備登陸服務(wù)器進(jìn)行測試,接下來需要先了解MQTT協(xié)議登錄需要的參數(shù)如何獲取,得到這些參數(shù)才可以接著進(jìn)行下一步。
MQTT(Message Queuing Telemetry Transport)是一個基于客戶端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議,主要應(yīng)用于計(jì)算能力有限,且工作在低帶寬、不可靠的網(wǎng)絡(luò)的遠(yuǎn)程傳感器和控制設(shè)備,適合長連接的場景,如智能路燈等。
MQTTS是MQTT使用TLS加密的協(xié)議。采用MQTTS協(xié)議接入平臺的設(shè)備,設(shè)備與物聯(lián)網(wǎng)平臺之間的通信過程,數(shù)據(jù)都是加密的,具有一定的安全性。
采用MQTT協(xié)議接入物聯(lián)網(wǎng)平臺的設(shè)備,設(shè)備與物聯(lián)網(wǎng)平臺之間的通信過程,數(shù)據(jù)沒有加密,如果要保證數(shù)據(jù)的私密性可以使用MQTTS協(xié)議。
在這里可以使用華為云提供的工具快速得到MQTT三元組進(jìn)行登錄。
使用MQTT.fx調(diào)測_設(shè)備接入 IoTDA_開發(fā)指南_設(shè)備側(cè)開發(fā)_使用MQTT Demo接入_華為云
工具的頁面地址:
Huaweicloud IoTDA Mqtt ClientId Generator
根據(jù)提示填入信息,然后生成三元組信息即可。 這里填入的信息就是在創(chuàng)建設(shè)備的時候生成的信息。
DeviceId 62cd6da66b9813541d510f64_dev1
DeviceSecret 12345678
ClientId 62cd6da66b9813541d510f64_dev1_0_0_2022071609
Username 62cd6da66b9813541d510f64_dev1
Password a23fb6db6b5bc428971d5ccf64cc8f7767d15ca63bd5e6ac137ef75d175c77bf
3.5 平臺接入地址
華為云的物聯(lián)網(wǎng)服務(wù)器地址在這里可以獲取:
https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/home
MQTT (1883) a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com
對應(yīng)的IP地址是: 121.36.42.100
3.6 MQTT的主題訂閱與發(fā)布格式
得到三元組之后,就可以登錄MQTT服務(wù)器進(jìn)行下一步的主題發(fā)布與訂閱。
主題的格式詳情:
Topic定義_設(shè)備接入 IoTDA_API參考_設(shè)備側(cè)MQTT/MQTTS接口參考_華為云
上傳的數(shù)據(jù)格式詳情:
使用MQTT.fx調(diào)測_設(shè)備接入 IoTDA_開發(fā)指南_設(shè)備側(cè)開發(fā)_使用MQTT Demo接入_華為云
設(shè)備消息上報(bào) $oc/devices/{device_id}/sys/messages/up
平臺下發(fā)消息給設(shè)備 $oc/devices/{device_id}/sys/messages/down
上傳的消息格式:
{
"services": [{
"service_id": "Connectivity",
"properties": {
"dailyActivityTime": 57
},
"event_time": "20151212T121212Z"
},
{
"service_id": "Battery",
"properties": {
"batteryLevel": 80
},
"event_time": "20151212T121212Z"
}
]
}
根據(jù)當(dāng)前設(shè)備的格式總結(jié)如下:
ClientId 62cd6da66b9813541d510f64_dev1_0_0_2022071609
Username 62cd6da66b9813541d510f64_dev1
Password a23fb6db6b5bc428971d5ccf64cc8f7767d15ca63bd5e6ac137ef75d175c77bf
//訂閱主題: 平臺下發(fā)消息給設(shè)備
$oc/devices/62cd6da66b9813541d510f64_dev1/sys/messages/down
//設(shè)備上報(bào)數(shù)據(jù)
$oc/devices/62cd6da66b9813541d510f64_dev1/sys/properties/report
//上報(bào)的屬性消息 (一次可以上報(bào)多個屬性,在json里增加就行了)
{"services": [{"service_id": "fish","properties":{"LED":1}},{"service_id": "fish","properties":{"motor":1}},{"service_id": "fish","properties":{"水溫":36.2}}]}
3.7 MQTT客戶端模擬設(shè)備調(diào)試
得到信息之后,將參賽填入軟件進(jìn)行登錄測試。
數(shù)據(jù)發(fā)送之后,在設(shè)備頁面上可以看到設(shè)備已經(jīng)在線了,并且收到了上傳的數(shù)據(jù)。
4. STM32程序設(shè)計(jì)
4.1 硬件連線
硬件連接方式:
1. TFT 1.44 寸彩屏接線
GND 電源地
VCC 接5V或3.3v電源
SCL 接PC8(SCL)
SDA 接PC9(SDA)
RST 接PC10
DC 接PB7
CS 接PB8
BL 接PB11
2. 板載LED燈接線
LED1---PA8
LED2---PD2
3. 板載按鍵接線
K0---PA0
K1---PC5
K2---PA15
4. DS18B20溫度傳感器接線
DQ->PC6
+ : 3.3V
- : GND
5. 步進(jìn)電機(jī)
ULN2003控制28BYJ-48步進(jìn)電機(jī)接線:
ULN2003接線:
IN-D: PB15 d
IN-C: PB14 c
IN-B: PB13 b
IN-A: PB12 a
+ : 5V
- : GND
6. 抽水電機(jī)
GND---GND
VCC---5V
AO----PA4
7. 水質(zhì)檢測傳感器
AO->PA1
+ : 3.3V
- : GND
8. RGB燈
PC13--R
PC14--G
PC15--B
9. ATK-ESP8266 WIFI接線
PA2(TX)--RXD 模塊接收腳
PA3(RX)--TXD 模塊發(fā)送腳
GND---GND 地
VCC---VCC 電源(3.3V~5.0V)
4.2 硬件原理圖
4.3 漢字取模
4.4 程序下載
下載軟件在資料包里。點(diǎn)擊開始編程之后,點(diǎn)擊開發(fā)板的復(fù)位鍵即可下載程序進(jìn)去。
文章來源:http://www.zghlxwxcb.cn/news/detail-794263.html
4.5 主要的信息連接代碼
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include <string.h>
#include "timer.h"
#include "esp8266.h"
#include "mqtt.h"
#include "oled.h"
#include "fontdata.h"
#include "bh1750.h"
#include "iic.h"
#include "sht3x.h"
#define ESP8266_WIFI_AP_SSID "aaa" //將要連接的路由器名稱 --不要出現(xiàn)中文、空格等特殊字符
#define ESP8266_AP_PASSWORD "12345678" //將要連接的路由器密碼
//華為云服務(wù)器的設(shè)備信息
#define MQTT_ClientID "62cd6da66b9813541d510f64_dev1_0_0_2022071609"
#define MQTT_UserName "62cd6da66b9813541d510f64_dev1"
#define MQTT_PassWord "a23fb6db6b5bc428971d5ccf64cc8f7767d15ca63bd5e6ac137ef75d175c77bf"
//訂閱與發(fā)布的主題
#define SET_TOPIC "$oc/devices/62cd6da66b9813541d510f64_dev1/sys/messages/down" //訂閱
#define POST_TOPIC "$oc/devices/62cd6da66b9813541d510f64_dev1/sys/properties/report" //發(fā)布
4.6 ESP8266主要代碼
u8 ESP8266_IP_ADDR[16]; //255.255.255.255
u8 ESP8266_MAC_ADDR[18]; //硬件地址
/*
函數(shù)功能: ESP8266命令發(fā)送函數(shù)
函數(shù)返回值:0表示成功 1表示失敗
*/
u8 ESP8266_SendCmd(char *cmd)
{
int RX_CNT=0;
u8 i,j;
for(i=0;i<10;i++) //檢測的次數(shù)--發(fā)送指令的次數(shù)
{
USARTx_StringSend(USART3,cmd);
for(j=0;j<100;j++) //等待的時間
{
delay_ms(50);
if(USART3_RX_STA&0X8000)
{
RX_CNT=USART3_RX_STA&0x7FFF;
USART3_RX_BUF[RX_CNT]='\0';
USART3_RX_STA=0;
if(strstr((char*)USART3_RX_BUF,"OK"))
{
return 0;
}
}
}
}
return 1;
}
/*
函數(shù)功能: ESP8266硬件初始化檢測函數(shù)
函數(shù)返回值:0表示成功 1表示失敗
*/
u8 ESP8266_Init(void)
{
//退出透傳模式
USARTx_StringSend(USART3,"+++");
delay_ms(100);
//退出透傳模式
USARTx_StringSend(USART3,"+++");
delay_ms(100);
return ESP8266_SendCmd("AT\r\n");
}
/*
函數(shù)功能: 一鍵配置WIFI為AP+TCP服務(wù)器模式
函數(shù)參數(shù):
char *ssid 創(chuàng)建的熱點(diǎn)名稱
char *pass 創(chuàng)建的熱點(diǎn)密碼 (最少8位)
u16 port 創(chuàng)建的服務(wù)器端口號
函數(shù)返回值: 0表示成功 其他值表示對應(yīng)錯誤值
*/
u8 ESP8266_AP_TCP_Server_Mode(char *ssid,char *pass,u16 port)
{
char *p;
u8 i;
char ESP8266_SendCMD[100]; //組合發(fā)送過程中的命令
/*1. 測試硬件*/
if(ESP8266_SendCmd("AT\r\n"))return 1;
/*2. 關(guān)閉回顯*/
if(ESP8266_SendCmd("ATE0\r\n"))return 2;
/*3. 設(shè)置WIFI模式*/
if(ESP8266_SendCmd("AT+CWMODE=2\r\n"))return 3;
/*4. 復(fù)位*/
ESP8266_SendCmd("AT+RST\r\n");
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
/*5. 關(guān)閉回顯*/
if(ESP8266_SendCmd("ATE0\r\n"))return 5;
/*6. 設(shè)置WIFI的AP模式參數(shù)*/
sprintf(ESP8266_SendCMD,"AT+CWSAP=\"%s\",\"%s\",1,4\r\n",ssid,pass);
if(ESP8266_SendCmd(ESP8266_SendCMD))return 6;
/*7. 開啟多連接*/
if(ESP8266_SendCmd("AT+CIPMUX=1\r\n"))return 7;
/*8. 設(shè)置服務(wù)器端口號*/
sprintf(ESP8266_SendCMD,"AT+CIPSERVER=1,%d\r\n",port);
if(ESP8266_SendCmd(ESP8266_SendCMD))return 8;
/*9. 查詢本地IP地址*/
if(ESP8266_SendCmd("AT+CIFSR\r\n"))return 9;
//提取IP地址
p=strstr((char*)USART3_RX_BUF,"APIP");
if(p)
{
p+=6;
for(i=0;*p!='"';i++)
{
ESP8266_IP_ADDR[i]=*p++;
}
ESP8266_IP_ADDR[i]='\0';
}
//提取MAC地址
p=strstr((char*)USART3_RX_BUF,"APMAC");
if(p)
{
p+=7;
for(i=0;*p!='"';i++)
{
ESP8266_MAC_ADDR[i]=*p++;
}
ESP8266_MAC_ADDR[i]='\0';
}
//打印總體信息
printf("當(dāng)前WIFI模式:AP+TCP服務(wù)器\r\n");
printf("當(dāng)前WIFI熱點(diǎn)名稱:%s\r\n",ssid);
printf("當(dāng)前WIFI熱點(diǎn)密碼:%s\r\n",pass);
printf("當(dāng)前TCP服務(wù)器端口號:%d\r\n",port);
printf("當(dāng)前TCP服務(wù)器IP地址:%s\r\n",ESP8266_IP_ADDR);
printf("當(dāng)前TCP服務(wù)器MAC地址:%s\r\n",ESP8266_MAC_ADDR);
return 0;
}
/*
函數(shù)功能: TCP服務(wù)器模式下的發(fā)送函數(shù)
發(fā)送指令:
*/
u8 ESP8266_ServerSendData(u8 id,u8 *data,u16 len)
{
int RX_CNT=0;
u8 i,j,n;
char ESP8266_SendCMD[100]; //組合發(fā)送過程中的命令
for(i=0;i<10;i++)
{
sprintf(ESP8266_SendCMD,"AT+CIPSEND=%d,%d\r\n",id,len);
USARTx_StringSend(USART3,ESP8266_SendCMD);
for(j=0;j<10;j++)
{
delay_ms(50);
if(USART3_RX_STA&0X8000)
{
RX_CNT=USART3_RX_STA&0x7FFF;
USART3_RX_BUF[RX_CNT]='\0';
USART3_RX_STA=0;
if(strstr((char*)USART3_RX_BUF,">"))
{
//繼續(xù)發(fā)送數(shù)據(jù)
USARTx_DataSend(USART3,data,len);
//等待數(shù)據(jù)發(fā)送成功
for(n=0;n<200;n++)
{
delay_ms(50);
if(USART3_RX_STA&0X8000)
{
RX_CNT=USART3_RX_STA&0x7FFF;
USART3_RX_BUF[RX_CNT]='\0';
USART3_RX_STA=0;
if(strstr((char*)USART3_RX_BUF,"SEND OK"))
{
return 0;
}
}
}
}
}
}
}
return 1;
}
/*
函數(shù)功能: 配置WIFI為STA模式+TCP客戶端模式
函數(shù)參數(shù):
char *ssid 創(chuàng)建的熱點(diǎn)名稱
char *pass 創(chuàng)建的熱點(diǎn)密碼 (最少8位)
char *p 將要連接的服務(wù)器IP地址
u16 port 將要連接的服務(wù)器端口號
u8 flag 1表示開啟透傳模式 0表示關(guān)閉透傳模式
函數(shù)返回值:0表示成功 其他值表示對應(yīng)的錯誤
*/
u8 ESP8266_STA_TCP_Client_Mode(char *ssid,char *pass,char *ip,u16 port,u8 flag)
{
char ESP8266_SendCMD[100]; //組合發(fā)送過程中的命令
//退出透傳模式
//USARTx_StringSend(USART3,"+++");
//delay_ms(50);
/*1. 測試硬件*/
if(ESP8266_SendCmd("AT\r\n"))return 1;
/*2. 關(guān)閉回顯*/
if(ESP8266_SendCmd("ATE0\r\n"))return 2;
/*3. 設(shè)置WIFI模式*/
if(ESP8266_SendCmd("AT+CWMODE=1\r\n"))return 3;
/*4. 復(fù)位*/
ESP8266_SendCmd("AT+RST\r\n");
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
/*5. 關(guān)閉回顯*/
if(ESP8266_SendCmd("ATE0\r\n"))return 5;
/*6. 配置將要連接的WIFI熱點(diǎn)信息*/
sprintf(ESP8266_SendCMD,"AT+CWJAP=\"%s\",\"%s\"\r\n",ssid,pass);
if(ESP8266_SendCmd(ESP8266_SendCMD))return 6;
/*7. 設(shè)置單連接*/
if(ESP8266_SendCmd("AT+CIPMUX=0\r\n"))return 7;
/*8. 配置要連接的TCP服務(wù)器信息*/
sprintf(ESP8266_SendCMD,"AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",ip,port);
if(ESP8266_SendCmd(ESP8266_SendCMD))return 8;
/*9. 開啟透傳模式*/
if(flag)
{
if(ESP8266_SendCmd("AT+CIPMODE=1\r\n"))return 9; //開啟
if(ESP8266_SendCmd("AT+CIPSEND\r\n"))return 10; //開始透傳
if(!(strstr((char*)USART3_RX_BUF,">")))
{
return 11;
}
//如果想要退出發(fā)送: "+++"
}
printf("WIFI模式:STA+TCP客戶端\r\n");
printf("Connect_WIFI熱點(diǎn)名稱:%s\r\n",ssid);
printf("Connect_WIFI熱點(diǎn)密碼:%s\r\n",pass);
printf("TCP服務(wù)器端口號:%d\r\n",port);
printf("TCP服務(wù)器IP地址:%s\r\n",ip);
return 0;
}
/*
函數(shù)功能: TCP客戶端模式下的發(fā)送函數(shù)
發(fā)送指令:
*/
u8 ESP8266_ClientSendData(u8 *data,u16 len)
{
int RX_CNT=0;
u8 i,j,n;
char ESP8266_SendCMD[100]; //組合發(fā)送過程中的命令
for(i=0;i<10;i++)
{
sprintf(ESP8266_SendCMD,"AT+CIPSEND=%d\r\n",len);
USARTx_StringSend(USART3,ESP8266_SendCMD);
for(j=0;j<10;j++)
{
delay_ms(50);
if(USART3_RX_STA&0X8000)
{
RX_CNT=USART3_RX_STA&0x7FFF;
USART3_RX_BUF[RX_CNT]='\0';
USART3_RX_STA=0;
if(strstr((char*)USART3_RX_BUF,">"))
{
//繼續(xù)發(fā)送數(shù)據(jù)
USARTx_DataSend(USART3,data,len);
//等待數(shù)據(jù)發(fā)送成功
for(n=0;n<200;n++)
{
delay_ms(50);
if(USART3_RX_STA&0X8000)
{
RX_CNT=USART3_RX_STA&0x7FFF;
USART3_RX_BUF[RX_CNT]='\0';
USART3_RX_STA=0;
if(strstr((char*)USART3_RX_BUF,"SEND OK"))
{
return 0;
}
}
}
}
}
}
}
return 1;
}
點(diǎn)擊關(guān)注,第一時間了解華為云新鮮技術(shù)~?文章來源地址http://www.zghlxwxcb.cn/news/detail-794263.html
到了這里,關(guān)于動手實(shí)踐丨手把手教你用STM32做一個智能魚缸的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!