stm32f373利用esp8266連接onenet平臺
- 學習目標:
- 一、注冊onenet平臺
- 二、esp8266引腳連接
- 三、代碼撰寫
- 1.串口配置
- 2.代碼移植
- 3.主函式撰寫
- 附上原始碼
學習目標:
1.注冊onenet平臺
2.esp8266引腳連接
3.stm32373代碼移植撰寫
提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助檔案
文章目錄
- 學習目標:
- 一、注冊onenet平臺
- 二、esp8266引腳連接
- 三、代碼撰寫
- 1.串口配置
- 2.代碼移植
- 3.主函式撰寫
- 附上原始碼
一、注冊onenet平臺
示例:pandas 是基于NumPy 的一種工具,該工具是為了解決資料分析任務而創建的,
注冊進入onenet平臺
點擊右上方控制臺
再點擊進入多協議接入,進入產品創建界面,
//鏈接: link.
點擊進入添加產品
創建按心情填寫,但接入協議選MQTT(舊版)!!!

接著在產品下創建設備,
進入產品后,左上方點擊設備串列之后,開始添加設備,
添加設備名和鑒權資訊,
記錄如下資料

二、esp8266引腳連接
3v3和EN接電源3.3V
GND接地
RX和TX連接至stm32373配置的串口

三、代碼撰寫
1.串口配置
單片機需配置兩個串口,串口1列印至串口助手,顯示連接狀態,串口2用來發送資訊至esp8266.
串口1配置代碼如下:
373系列配置和103系列配置不同點在于I/O口上拉和推挽配置略有不同,
//USART1_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //復用推挽輸出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
//USART1_RX GPIOA.10初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//浮空輸入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10
串口1列印代碼如下:
void UsartPrintf(USART_TypeDef *USARTx, char *fmt,...) //串口列印,相當于printf
{
unsigned char UsartPrintfBuf[296];
va_list ap;
unsigned char *pStr = UsartPrintfBuf;
va_start(ap, fmt);
vsnprintf((char *)UsartPrintfBuf, sizeof(UsartPrintfBuf), fmt, ap); //格式化
va_end(ap);
while(*pStr != 0)
{
USART_SendData(USARTx, *pStr++);
while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
}
}
串口2配置代碼如下:
//USART3_TX PD8
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //PD8
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //復用推挽輸出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化PD8
//USART3_RX PB9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//浮空輸入
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB9
串口2發送代碼如下:
_Bool ESP8266_SendCmd(char *cmd, char *res)
{
unsigned char timeOut = 200;
Usart_SendString(USART3, (unsigned char *)cmd, strlen((const char *)cmd));
while(timeOut--)
{
if(ESP8266_WaitRecive() == REV_OK) //如果收到資料
{
if(strstr((const char *)esp8266_buf, res) != NULL) //如果檢索到關鍵詞
{
ESP8266_Clear(); //清空快取
return 0;
}
}
delay_ms(10);
}
return 1;
}
2.代碼移植
從onenet官方網站上下載物聯網程式,
移植出
esp8266.c
onenet.c
MqttKit.c檔案
更改esp8266.c中的串口發送函式
代碼如下:
void ESP8266_Init(void)
{
ESP8266_Clear();
UsartPrintf(USART1, "0. AT\r\n");
while(ESP8266_SendCmd("AT\r\n", "OK"))
delay_ms(500);
UsartPrintf(USART1, "1. RST\r\n");
ESP8266_SendCmd("AT+RST\r\n", "");
delay_ms(500);
ESP8266_SendCmd("AT+CIPCLOSE\r\n", "");
delay_ms(500);
UsartPrintf(USART1, "2. CWMODE\r\n");
while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))
delay_ms(500);
UsartPrintf(USART1, "3. AT+CWDHCP\r\n");
while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))
delay_ms(500);
UsartPrintf(USART1, "4. CWJAP\r\n");
while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))
delay_ms(500);
UsartPrintf(USART1, "5. CIPSTART\r\n");
while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
delay_ms(500);
UsartPrintf(USART1, "6. ESP8266 Init OK\r\n");
}
更改esp8266.c中的wifi賬號密碼、ip、埠號
代碼如下:
#define ESP8266_WIFI_INFO "AT+CWJAP=\"wifi名\",\"密碼\"\r\n"
#define ESP8266_ONENET_INFO "AT+CIPSTART=\"TCP\",\"183.230.40.39\",6002\r\n"
更改onenet.c中的產品ID 、鑒權資訊、設備ID
代碼如下:
#define PROID "77247"
#define AUTH_INFO "test"
#define DEVID "5616839"
3.主函式撰寫
代碼如下:
int main(void)
{
const char *devSubTopic[] = {"/mysmarthome/sub"};
const char devPubTopic[]="/mysmarthome/pub";
unsigned short timeCount = 0; //發送間隔變數
unsigned char *dataPtr = NULL;
delay_init(); //延時函式初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設定NVIC中斷分組2:2位搶占優先級,2位回應優先級
uart_init(115200); //串口初始化為115200
UsartPrintf(USART1,"\n\rbegin \n\r");
usart3_init(115200); //串口初始化為115200
ESP8266_Init();
while(OneNet_DevLink()) //接入OneNET
delay_ms(500);
while (1)
{
if(++timeCount >= 500) //發送間隔5s
{
UsartPrintf(USART1, "OneNet_Publish\r\n");
OneNet_Publish(devPubTopic, "MQTT Publish Test");
timeCount = 0;
ESP8266_Clear();
}
dataPtr = ESP8266_GetIPD(3);
if(dataPtr != NULL)
OneNet_RevPro(dataPtr);
delay_ms(10);
}
}
附上原始碼
stm32f373通過esp8266連接onenet平臺
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/355405.html
標籤:其他
