1、 資源介紹
可以看到,AB32VG1擁有三個全雙工串口
資源分配:
UART0 -> 上位機通訊
UART1 -> ESP8266無線網(wǎng)絡
UART2 -> 待分配
UART1所對應的引腳為PA3和PA4,其中PA3為RX1,PA4為TX1
2、ESP8266介紹:
3、連接圖
單片機與ESP8266采用串口通訊(AT指令),功能:獲取網(wǎng)絡數(shù)據(jù)及設備聯(lián)網(wǎng)
坑1、在程序?qū)崿F(xiàn)之前,需要注意的點,在配置中需要打開“硬件”下的UART1功能,要注意配置截圖中有沒有SDK軟件包,如果沒有打開UART1口編譯不通過。(升級軟件版本2.1.2)
坑2、還有一個坑的地方,例程中:搞不明白為什么要錯位,錯位后收到的數(shù)據(jù)為亂碼
坑3、波特率顯示問題(要么整體改)
要么單獨定義判斷i的值
4、AT指令
1、 AT+RST
功能:重啟模塊
2、AT+CWMODE=
功能:mode=1 :Station模式(接收模式)
mode=2:AP模式(發(fā)送模式)
mode=3:AP+Station模式
3、AT+ CWSAP= ,,,
功能:配置AP參數(shù)(指令只有在AP模式開啟后有效)
ssid:接入點名稱
pwd:密碼
chl:通道號
ecn:加密方式:(0-OPEN, 1-WEP, 2-WPA_PSK, 3-WPA2_PSK, 4-WPA_WPA2_PSK)
注意:此設置完成后,連接網(wǎng)絡會可能出現(xiàn)連接不上的情況,請發(fā)送 AT+RST 命令并等待幾分鐘之
后再連接。
4、AT+CWLIF
功能:查看已接入設備的 IP
5、AT+CIFSR
功能:查看本模塊的 IP 地址
注意: AP 模式下無效!會造成死機現(xiàn)象!
6、AT+CWMODE?
功能:查看本機配置模式
7、AT+CIPMUX?
功能:查詢本模塊是否建立多連接
說明: :0-單路連接模式, 1-多路連接模式
8、AT+CIPMODE?
功能:查詢本模塊的傳輸模式
說明: :0-非透傳模式, 1-透傳模式
9、AT+CIPSTO?
功能:查詢本模塊的服務器超時時間
10、AT+CIPMUX=1
功能:開啟多連接模式
11、AT+CIPSERVER=1,8080
功能:創(chuàng)建服務器
關閉 server 服務如下圖所示:
說明: :0-關閉 server 模式, 1-開啟 server 模式
:端口號,缺省值為 333
說明: (1) AT+ CIPMUX=1 時才能開啟服務器;關閉 server 模式需要重啟
(2)開啟 server 后自動建立 server 監(jiān)聽,當有 client 接入會自動按順序占用一個連
接。
12、AT+CIPSTO=2880
功能:設置服務器超時時間
13、AT+CIPSTATUS
功能:查看當前連接
說明: :連接的 id 號 0-4
:字符串參數(shù),類型 TCP 或 UDP
:字符串參數(shù), IP 地址
:端口號
: 0-本模塊做 client 的連接, 1-本模塊做 server 的連接
14、AT+CIPSEND=1,6
功能:向某個連接發(fā)送數(shù)據(jù)
指令: 1)單路連接時(+CIPMUX=0),指令為: AT+CIPSEND=
2)多路連接時(+CIPMUX=1) ,指令為: AT+CIPSEND= ,
響應:收到此命令后先換行返回”>”,然后開始接收串口數(shù)據(jù)
當數(shù)據(jù)長度滿 length 時發(fā)送數(shù)據(jù)。
如果未建立連接或連接被斷開,返回 ERROR
如果數(shù)據(jù)發(fā)送成功,返回 SEND OK
說明: :需要用于傳輸連接的 id 號
:數(shù)字參數(shù),表明發(fā)送數(shù)據(jù)的長度,最大長度為 2048
15、AT+CIPSERVER=0
功能:關閉 server 服務
指令: AT+CIPSERVER=[,]
說明: :0-關閉 server 模式, 1-開啟 server 模式
:端口號,缺省值為 333
響應: OK
說明: (1) AT+ CIPMUX=1 時才能開啟服務器;關閉 server 模式需要重啟
(2)開啟 server 后自動建立 server 監(jiān)聽,當有 client 接入會自動按順序占用一個連
接。
16、AT+CIPSTART=2,"TCP","192.168.4.101",8080
功能:建立 TCP 連接
指令: 1)單路連接時(+CIPMUX=0),指令為: AT+CIPSTART= ,,
2)多路連接時(+CIPMUX=1),指令為: AT+CIPSTART=,,,
響應:如果格式正確且連接成功,返回 OK,否則返回 ERROR
如果連接已經(jīng)存在,返回 ALREAY CONNECT
說明: :0-4,連接的 id 號
:字符串參數(shù),表明連接類型, ”TCP”-建立 tcp 連接, ”UDP”-建立 UDP 連接
:字符串參數(shù),遠程服務器 IP 地址
:遠程服務器端口號
17、AT+CIPSEND=2,8
指令: 1)單路連接時(+CIPMUX=0),指令為: AT+CIPSEND=
2)多路連接時(+CIPMUX=1) ,指令為: AT+CIPSEND= ,
響應:收到此命令后先換行返回”>”,然后開始接收串口數(shù)據(jù)
當數(shù)據(jù)長度滿 length 時發(fā)送數(shù)據(jù)。
如果未建立連接或連接被斷開,返回 ERROR
如果數(shù)據(jù)發(fā)送成功,返回 SEND OK
說明: :需要用于傳輸連接的 id 號
:數(shù)字參數(shù),表明發(fā)送數(shù)據(jù)的長度,最大長度為 2048
18、AT+CWLAP
功能:查看當前無線路由器列表
響應:正確: (終端返回AP列表)
+ CWLAP: ,,
OK
錯誤: ERROR
說明: < ecn >:0-OPEN, 1-WEP, 2-WPA_PSK, 3-WPA2_PSK, 4-WPA_WPA2_PSK
:字符串參數(shù),接入點名稱
:信號強度
19、AT+CWJAP=”MERSAIN”,”XXXXXXXX”
功能:加入當前無線網(wǎng)絡
指令: AT+CWJAP=,< pwd >
說明: :字符串參數(shù),接入點名稱
:字符串參數(shù),密碼,最長64字節(jié)ASCII
響應:正確: OK
錯誤: ERROR
20、AT+CWJAP?
功能:檢測是否真的連上該路線網(wǎng)絡
指令: AT+CWJAP?
響應:返回當前選擇的AP
+ CWJAP:
OK
說明: :字符串參數(shù),接入點名稱
21、AT+CIFSR
功能:查看模塊 IP 地址
指令: AT+CIFSR
響應:正確: + CIFSR:
OK
錯誤: ERROR
說明: :字符串參數(shù),接入點名稱
5、程序?qū)崿F(xiàn)
myuart.c文件
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-11-04 Administrator the first version
*/
#include
#include "string.h"
#include "applications\myuart\myuart.h"
/* 用于接收消息的信號量 */
static struct rt_semaphore rx_sem;
static rt_device_t serial;
/* 接收數(shù)據(jù)回調(diào)函數(shù) */
static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
{
/* 串口接收到數(shù)據(jù)后產(chǎn)生中斷,調(diào)用此回調(diào)函數(shù),然后發(fā)送接收信號量 */
rt_sem_release(&rx_sem);
return RT_EOK;
}
static void serial_thread_entry(void *parameter)
{
char ch;
while (1)
{
/* 從串口讀取一個字節(jié)的數(shù)據(jù),沒有讀取到則等待接收信號量 */
while (rt_device_read(serial, -1, &ch, 1) != 1)
{
/* 阻塞等待接收信號量,等到信號量后再次讀取數(shù)據(jù) */
rt_sem_take(&rx_sem, RT_WAITING_FOREVER);
}
/* 讀取到的數(shù)據(jù)通過串口錯位輸出 */
//ch = ch + 1;
//rt_device_write(serial, 0, &ch, 1);
rt_kprintf("%c",ch);
} }
static int uart_sample(int argc, char *argv[])
{
rt_err_t ret = RT_EOK;
char uart_name[RT_NAME_MAX];
char str[] = "hello RT-Thread!\r\n";
if (argc == 2)
{
rt_strncpy(uart_name, argv[1], RT_NAME_MAX);
}
else
{
rt_strncpy(uart_name, SAMPLE_UART_NAME, RT_NAME_MAX);
}
/* 查找系統(tǒng)中的串口設備 */
serial = rt_device_find(uart_name);
if (!serial)
{
rt_kprintf("find %s failed!\n", uart_name);
return RT_ERROR;
}
/* 初始化信號量 */
rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);
/* 以中斷接收及輪詢發(fā)送模式打開串口設備 */
rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
/* 設置接收回調(diào)函數(shù) */
rt_device_set_rx_indicate(serial, uart_input);
/* 發(fā)送字符串 */
rt_device_write(serial, 0, str, (sizeof(str) - 1));
/* 創(chuàng)建 serial 線程 */
rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10);
/* 創(chuàng)建成功則啟動線程 */
if (thread != RT_NULL)
{
rt_thread_startup(thread);
}
else
{
ret = RT_ERROR;
}
return ret;
}
/* 導出到 msh 命令列表中 */
MSH_CMD_EXPORT(uart_sample, uart device sample);
/*自定義的函數(shù)*/
/*初始化函數(shù)*/
int uart_init(char *port)
{
rt_err_t ret = RT_EOK;
char uart_name[RT_NAME_MAX];
char str[] = "hello RT-Thread!\r\n";
rt_strncpy(uart_name, port, RT_NAME_MAX);
/* 查找系統(tǒng)中的串口設備 */
serial = rt_device_find(uart_name);
if (!serial)
{
rt_kprintf("find %s failed!\n", uart_name);
return RT_ERROR;
}
/* 初始化信號量 */
rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);
/* 以中斷接收及輪詢發(fā)送模式打開串口設備 */
rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
/* 設置接收回調(diào)函數(shù) */
rt_device_set_rx_indicate(serial, uart_input);
/* 發(fā)送字符串 */
rt_device_write(serial, 0, str, (sizeof(str) - 1));
/* 創(chuàng)建 serial 線程 */
rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10);
/* 創(chuàng)建成功則啟動線程 */
if (thread != RT_NULL)
{
rt_thread_startup(thread);
}
else
{
ret = RT_ERROR;
}
return ret;
}
/*結(jié)束*/
/*發(fā)送字符串*/
int uart_sendstring(char *str) {
rt_device_write(serial, 0, str, (strlen(str) - 1));
}
/*結(jié)束*/
myuart.h文件
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-11-04 Administrator the first version
*/
#ifndef APPLICATIONS_MYUART_MYUART_H_
#define APPLICATIONS_MYUART_MYUART_H_
/*默認串口*/
#define SAMPLE_UART_NAME "uart1"
int uart_init(char *port);
int uart_sendstring(char *str);
#endif /* APPLICATIONS_MYUART_MYUART_H_ */
main文件
/*
* Copyright (c) 2020-2021, Bluetrum Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2020/12/10 greedyhao The first version
*/
/**
* Notice!
* All functions or data that are called during an interrupt need to be in RAM.
* You can do it the way exception_isr() does.
*/
#include
#include "board.h"
#include "applications\myuart\myuart.h"
int main(void)
{
uint8_t pin = rt_pin_get("PE.1");
uart_init("uart1");
rt_pin_mode(pin, PIN_MODE_OUTPUT);
rt_kprintf("Hello, world\n");
while (1)
{
uart_sendstring("AT\r\n");
rt_pin_write(pin, PIN_LOW);
rt_thread_mdelay(500);
rt_pin_write(pin, PIN_HIGH);
rt_thread_mdelay(500);
}
}
6、效果展示
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
國產(chǎn)單片機
+關注
關注
1文章
20瀏覽量
3988 -
中科藍訊
+關注
關注
9文章
57瀏覽量
9909
發(fā)布評論請先 登錄
相關推薦
無線橋接設置教程
在現(xiàn)代家庭和辦公環(huán)境中,無線網(wǎng)絡已成為連接設備和訪問互聯(lián)網(wǎng)的基本需求。然而,由于墻壁、家具和其他障礙物的影響,單一無線路由器的信號覆蓋范圍可能有限。為了解決這個問題,無線橋
wds和傳統(tǒng)無線網(wǎng)絡的區(qū)別
)是一種無線網(wǎng)絡技術,它允許多個無線接入點(AP)通過無線方式連接起來,形成一個更大的無線網(wǎng)絡。這種技術主要用于擴展
無線網(wǎng)關和路由器的區(qū)別
在現(xiàn)代家庭和企業(yè)網(wǎng)絡中,無線網(wǎng)關和路由器是兩個不可或缺的設備。它們都扮演著連接互聯(lián)網(wǎng)和內(nèi)部網(wǎng)絡的關鍵角色,但各自有著不同的功能和應用場景。 無線網(wǎng)關(Wireless Gateway) 無線網(wǎng)
無線網(wǎng)解碼器怎么連接
無線網(wǎng)解碼器的連接方式可能因設備型號、品牌以及應用場景的不同而有所差異。以下提供的是一種較為通用的連接步驟,但請注意,在實際操作中應參考具體設備的說明書或官方指導進行操作。 一、設備準備 無線
無線網(wǎng)解碼器怎么用
無線網(wǎng)解碼器通常指的是能夠解析無線網(wǎng)絡信號中的編碼信息,將其還原成原始信號或數(shù)據(jù)流的電子設備。然而,需要強調(diào)的是,未經(jīng)授權的無線網(wǎng)絡解碼行為可能涉及法律問題,因為它可能侵犯了他人的隱私和網(wǎng)絡安全
無線網(wǎng)解碼器哪個好用
無線網(wǎng)解碼器,通常指的是能夠解析、識別或甚至破解無線網(wǎng)絡信號的工具或設備。然而,需要明確的是,未經(jīng)授權擅自解碼或破解他人無線網(wǎng)絡是非法行為,可能侵犯他人的隱私和網(wǎng)絡安全。因此,我不能提供關于如何非法
無線網(wǎng)橋接路由器怎么接
無線網(wǎng)橋接路由器的連接過程相對復雜,但按照以下步驟操作,可以確保連接的成功和網(wǎng)絡的穩(wěn)定性。 一、準備工作 設備檢查 : 確保有兩個支持無線橋
無線網(wǎng)橋的工作原理和特點是什么
無線網(wǎng)橋(Wireless Bridge)是一種在無線網(wǎng)絡中連接兩個或多個網(wǎng)絡段的設備,它允許數(shù)據(jù)在不同的網(wǎng)絡之間傳輸。無線網(wǎng)橋通常用于連接
無線網(wǎng)橋可以當wifi用嗎
無線網(wǎng)橋(Wireless Bridge)是一種無線通信設備,它主要用于連接兩個或多個網(wǎng)絡,實現(xiàn)數(shù)據(jù)的傳輸。無線網(wǎng)橋可以在不同的網(wǎng)絡之間建立連接
無線網(wǎng)橋可以用來上網(wǎng)嗎?無線網(wǎng)橋能當wifi用嗎?
無線網(wǎng)橋可以用來上網(wǎng),但具體是否可行還取決于無線網(wǎng)橋的功能和配置以及實際使用場景。
無線網(wǎng)橋的連接與調(diào)試方法
無線網(wǎng)橋的連接與調(diào)試方法主要涉及設備的配置、網(wǎng)絡參數(shù)的設定以及通信質(zhì)量的優(yōu)化。以下是詳細的步驟和注意事項:
wds無線橋接怎么設置
無線分布式系統(tǒng)(Wireless Distribution System,簡稱WDS)是一種允許無線網(wǎng)絡設備之間進行橋接的技術。通過WDS,可以將多個無線設備
plc數(shù)采無線網(wǎng)關是什么
。 具體來說,PLC數(shù)采無線網(wǎng)關具有以下幾個特點: 1. 無線通信:通過Wi-Fi、藍牙、ZigBee、LoRa、NB-IoT等多種無線通信方式之一或幾種的組合,實現(xiàn)與PLC或其他傳感
有線網(wǎng)卡和無線網(wǎng)卡分別指的是什么
有線網(wǎng)卡和無線網(wǎng)卡是計算機或網(wǎng)絡設備中用于連接網(wǎng)絡的兩種不同類型的網(wǎng)絡接口卡。它們的主要區(qū)別在于傳輸媒介和連接方式。
無線網(wǎng)橋的工作原理 無線網(wǎng)橋的安裝注意事項
無線網(wǎng)橋的工作原理 無線網(wǎng)橋的安裝注意事項? 無線網(wǎng)橋是一種用于擴充無線網(wǎng)絡覆蓋范圍的設備,它可以通過無線信號來
評論