国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

動手實(shí)踐丨手把手教你用STM32做一個智能魚缸

這篇具有很好參考價值的文章主要介紹了動手實(shí)踐丨手把手教你用STM32做一個智能魚缸。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

摘要:本文基于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)殖中不成問題。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

?

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎ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)信息。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

2.2 杜邦線

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

2.3 PCB板

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

2.4 步進(jìn)電機(jī)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

2.5 抽水馬達(dá)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

2.6 水溫檢測傳感器

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

測溫采用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檢測儀了、輕松檢測水的潔凈程度。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

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間距排針與外部連接

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

3. 華為云IOT產(chǎn)品與設(shè)備創(chuàng)建

3.1 創(chuàng)建產(chǎn)品

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)


鏈接:設(shè)備接入_IoTDA_IoT_物聯(lián)網(wǎng)IoT平臺-華為云

點(diǎn)擊右上角窗口創(chuàng)建產(chǎn)品。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

填入產(chǎn)品信息。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

接下來創(chuàng)建模型文件:
創(chuàng)建服務(wù)。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

創(chuàng)建屬性。根據(jù)魚缸設(shè)備的傳感器屬性來添加屬性。

(1)LED氛圍燈
(2)抽水電機(jī)
(3)水質(zhì)傳感器
(4)水溫溫度計(jì)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

?

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

3.2 創(chuàng)建設(shè)備

地址:?https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/device/all-device

點(diǎn)擊右上角創(chuàng)建設(shè)備。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

按照設(shè)備的情況進(jìn)行填寫信息。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

設(shè)備創(chuàng)建后保存信息:

{
    "device_id": "62cd6da66b9813541d510f64_dev1",
    "secret": "12345678"
}

創(chuàng)建成功。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

3.3 設(shè)備模擬調(diào)試

為了測試設(shè)備通信的過程,在設(shè)備頁面點(diǎn)擊調(diào)試。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

選擇設(shè)備調(diào)試:

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

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ù)都是加密的,具有一定的安全性。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

采用MQTT協(xié)議接入物聯(lián)網(wǎng)平臺的設(shè)備,設(shè)備與物聯(lián)網(wǎng)平臺之間的通信過程,數(shù)據(jù)沒有加密,如果要保證數(shù)據(jù)的私密性可以使用MQTTS協(xié)議。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

在這里可以使用華為云提供的工具快速得到MQTT三元組進(jìn)行登錄。
使用MQTT.fx調(diào)測_設(shè)備接入 IoTDA_開發(fā)指南_設(shè)備側(cè)開發(fā)_使用MQTT Demo接入_華為云

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

工具的頁面地址:
Huaweicloud IoTDA Mqtt ClientId Generator

根據(jù)提示填入信息,然后生成三元組信息即可。 這里填入的信息就是在創(chuàng)建設(shè)備的時候生成的信息。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

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

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

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)行登錄測試。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

數(shù)據(jù)發(fā)送之后,在設(shè)備頁面上可以看到設(shè)備已經(jīng)在線了,并且收到了上傳的數(shù)據(jù)。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

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 硬件原理圖

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

4.3 漢字取模

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

4.4 程序下載

下載軟件在資料包里。點(diǎn)擊開始編程之后,點(diǎn)擊開發(fā)板的復(fù)位鍵即可下載程序進(jìn)去。

stm32控制電缸,技術(shù)交流,stm32,單片機(jī),IoTDA,華為云,物聯(lián)網(wǎng)

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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 手把手教你用AirtestIDE無線連接手機(jī)

    手把手教你用AirtestIDE無線連接手機(jī)

    一直以來,我們發(fā)現(xiàn)同學(xué)們都挺喜歡用無線的方式連接手機(jī),正好安卓11出了個無線連接的新姿勢,我們今天就一起來看看,如何用AirtestIDE無線連接你的Android設(shè)備~ 當(dāng) 手機(jī)與電腦處在同一個wifi 下,即可嘗試無線連接手機(jī)了,但是這種方式受限于網(wǎng)絡(luò)連接的穩(wěn)定性,可能會出

    2023年04月18日
    瀏覽(27)
  • 手把手教你用jmeter做壓力測試(詳圖)

    手把手教你用jmeter做壓力測試(詳圖)

    壓力測試是每一個Web應(yīng)用程序上線之前都需要做的一個測試,他可以幫助我們發(fā)現(xiàn)系統(tǒng)中的瓶頸問題,減少發(fā)布到生產(chǎn)環(huán)境后出問題的幾率;預(yù)估系統(tǒng)的承載能力,使我們能根據(jù)其做出一些應(yīng)對措施。所以壓力測試是一個非常重要的步驟,下面我?guī)Т蠹襾硎褂靡豢顗毫y試工

    2024年02月02日
    瀏覽(29)
  • 手把手教你用video實(shí)現(xiàn)視頻播放功能

    手把手教你用video實(shí)現(xiàn)視頻播放功能

    哈嘍。大家好啊 今天需要做一個視頻播放列表,讓我想到了video的屬性 下面讓我們先看看實(shí)現(xiàn)效果 這里是我的代碼 width是當(dāng)前播放頁面的寬度 height是當(dāng)前播放頁面的高度 Controls屬性用就是控制欄那些了 比如播放按鈕 暫停按鈕 autoplay是指的是自動播放 poster是指的是初始化進(jìn)

    2024年02月12日
    瀏覽(32)
  • 手把手教你用Python編寫郵箱腳本引擎

    手把手教你用Python編寫郵箱腳本引擎

    版權(quán)聲明:原創(chuàng)不易,本文禁止抄襲、轉(zhuǎn)載需附上鏈接,侵權(quán)必究! 郵箱是傳輸信息方式之一,個人,企業(yè)等都在使用,朋友之間發(fā)消息,注冊/登錄信息驗(yàn)證,訂閱郵箱,企業(yè)招聘,向客戶發(fā)送消息等都是郵箱的使用場景;郵箱有兩個較重要的協(xié)議:SMTP和POP3,均位于OSI7層

    2024年02月06日
    瀏覽(104)
  • 手把手教你用 Jenkins 自動部署 SpringBoot

    手把手教你用 Jenkins 自動部署 SpringBoot

    CI/CD 是一種通過在應(yīng)用開發(fā)階段引入自動化來頻繁向客戶交付應(yīng)用的方法。 CI/CD 的核心概念可以總結(jié)為三點(diǎn): 持續(xù)集成 持續(xù)交付 持續(xù)部署 CI/CD 主要針對在集成新代碼時所引發(fā)的問題(俗稱\\\"集成地獄\\\")。 為什么會有集成地獄這個“雅稱”呢?大家想想我們一個項(xiàng)目部署的

    2024年02月02日
    瀏覽(30)
  • 手把手教你寫stm32f103智能風(fēng)扇

    手把手教你寫stm32f103智能風(fēng)扇

    本系統(tǒng)可以分為兩個模式來進(jìn)行運(yùn)行,分別為手動模式和自動模式,同時,在上電進(jìn)入系統(tǒng)后,還會有一個模式選擇的界面產(chǎn)生。 模式選擇:在此界面中,可以通過按鍵K1來控制模式選擇,兩個模式分別為手動模式和自動模式;通過按鍵K2可以進(jìn)入模式。 手動模式:在手動模

    2023年04月17日
    瀏覽(93)
  • 手把手教你用Git——詳解git merge

    關(guān)于本教程的編寫環(huán)境 本文基于 Windows10系統(tǒng) , Mac 系統(tǒng)的小伙伴可以嘗試 Homebrew 。由于本人手里并沒有搭載 MacOS 的電腦,因此 Homebrew 相關(guān)的使用請自行嘗試。 對于使用 Windows11系統(tǒng) 的小伙伴,本文的教程是通用的,不過一些細(xì)節(jié)可能略有不同,這點(diǎn)希望小伙伴們注意一下

    2024年02月05日
    瀏覽(27)
  • 手把手教你用UNet做醫(yī)學(xué)圖像分割系統(tǒng)

    手把手教你用UNet做醫(yī)學(xué)圖像分割系統(tǒng)

    兄弟們好呀,這里是肆十二,這轉(zhuǎn)眼間寒假就要過完了,相信大家的畢設(shè)也要準(zhǔn)備動手了吧,作為一名大作業(yè)區(qū)的UP主,也該蹭波熱度了,之前關(guān)于圖像分類和目標(biāo)檢測我們都出了相應(yīng)的教程,所以這期內(nèi)容我們搞波新的,我們用Unet來做醫(yī)學(xué)圖像分割。我們將會以皮膚病的數(shù)

    2024年02月03日
    瀏覽(92)
  • 手把手教你用MindSpore訓(xùn)練一個AI模型!

    手把手教你用MindSpore訓(xùn)練一個AI模型!

    首先我們要先了解深度學(xué)習(xí)的概念和AI計(jì)算框架的角色( https://zhuanlan.zhihu.com/p/463019160 ),本篇文章將演示怎么利用MindSpore來訓(xùn)練一個AI模型。和上一章的場景一致,我們要訓(xùn)練的模型是用來對手寫數(shù)字圖片進(jìn)行分類的LeNet5模型 請參考( http://yann.lecun.com/exdb/lenet/ )。 圖1 M

    2024年02月04日
    瀏覽(34)
  • 手把手教你用git上傳項(xiàng)目到GitHub

    手把手教你用git上傳項(xiàng)目到GitHub

    github的官方網(wǎng)址:https://github.com?,如果沒有賬號,趕緊注冊一個。 點(diǎn)擊Sign in進(jìn)入登錄界面,輸入賬號和密碼登入github。 創(chuàng)建成功可以看到自己的倉庫地址,如此,我的遠(yuǎn)程免費(fèi)的倉庫就創(chuàng)建了。它還介紹了github倉庫的常用指令。這個指令需要在本地安裝git客戶端。 Git是目

    2024年01月18日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包