STM 32 ESP 8266ブラシファームウェア-モード設定-HALライブラリマイグレーションMQTT
38185 ワード
ESP 8266ブラシファームウェア、モード設定、STM 32 HALライブラリマイグレーションMQTT
参照先:http://www.piaoyi.org/iot/espressif-ESP8266-MQTT-AT.html
(一)モード設定
ESP 8266には、APとStationの2つのモードがあります.AP、Station、AP&Stationの3つの動作モードに設定できます.APモード:ルータなどのワイヤレスアクセスポイント.Station:APのClientモード、例えば携帯電話はルータに接続して、携帯電話はStationモードです.
1、APモード設定
APモードに設定:
2、Stationモードと透過
Stationモードに設定:
楽鑫ESP 8266ブラシソフトとファームウェアはここでダウンロードできます.https://www.espressif.com/zh-hans/products/hardware/esp8266ex/resources
ESP 8266-01 Sピン説明:だからESP 8266-01 Sブラシ機はGPIO 0を低くする必要があり、配線図は以下の通りである:
ブラシMQTTファームウェア構成:
(三)STM 32移植MQTT
プラットフォーム:戦艦miniボード(stm 32 f 03 rb)ソフトウェアバージョン:STM 32 C UBEMX V 5.3、TrueSTUDIO V9.3 MQTTサーバ:emqx効果:stm 32サブスクリプショントピックled_コントロール、データはonとoffで、miniボードのledランプを制御します.
参照先:http://sun2y.me/2017/05/12/MQTT%E5%8D%8F%E8%AE%AE%E5%9C%A8STM32%E4%B8%8A%E7%9A%84%E7%A7%BB%E6%A4%8D/MQTTソースパッケージダウンロードアドレス:https://github.com/eclipse/paho.mqtt.embedded-c
完全なコードのダウンロードアドレス:https://download.csdn.net/download/qq153471503/11970249
組み込み型移植は比較的簡単で、transportファイルのハードウェア駆動読み書き関数を変更するだけで、関数を開いたり閉じたりする必要はありません.MQTTClient.cとMQTTClient.hファイルは私が自分で作成したもので、必要に応じて自分で修正することができます.完全ディレクトリは下図の通りです:
transport.c
MQTTClient.c
main.c
ends…
参照先:http://www.piaoyi.org/iot/espressif-ESP8266-MQTT-AT.html
(一)モード設定
ESP 8266には、APとStationの2つのモードがあります.AP、Station、AP&Stationの3つの動作モードに設定できます.APモード:ルータなどのワイヤレスアクセスポイント.Station:APのClientモード、例えば携帯電話はルータに接続して、携帯電話はStationモードです.
1、APモード設定
APモードに設定:
AT+AT+CWMODE_DEF=2
WIFI名、パスワード、チャネル、暗号化方式、最大接続数を設定する:AT+CWSAP_DEF="esp8266-ap","1234567890",5,3,1
WIFIのIPアドレス、ゲートウェイ、マスクを設定する:AT+CIPAP_DEF="192.168.166.4.1","192.168.4.1","255.255.255.0"
再起動して構成を有効にします(選択してください.コマンドにDEFがない場合は、この手順は必要ありません):AT+RST
WIFIマルチコネクションを開く:AT+CIPMUX=1
WIFIサーバーを開く:AT+CIPSERVER=1
APモードESP 8266データ受信及び解析:void WIFI_APModeRecvHanler(void)
{
if (WIFI_RX_STA & 0x8000)
{
char* start = NULL;
const char* header = "+IPD,0,";
if ((start = strstr((const char *) WIFI_RX_BUF, header)) != NULL)
{
if ((start = strstr((const char *) start, ":")) != NULL)
{
uint32_t datalen = WIFI_RX_STA & 0x3FFF;
const uint8_t* dataptr = (uint8_t *) (start + 1);
WIFI_RX_BUF[datalen] = '\0';
printf("tcp:%s\r
", dataptr);
}
}
WIFI_RX_STA = 0;
}
}
2、Stationモードと透過
Stationモードに設定:
AT+CWMODE_DEF=1
加入ルータ:AT+CWJAP_DEF=" WIFI "," "
再起動構成が有効になります(DEFなし、このステップは必要ありません)AT+RST
マルチコネクションをオフにする(マルチコネクションモードをオフにすると透過をオンにする):AT+CIPMUX=0
透過モードに設定:AT+CIPMODE=1
サーバへの接続:AT+CIPSTART="TCP"," IP ",
透過モードに入る:AT+CIPSEND
透過モードを終了する(車を戻さない):+++
(二)ファームウェアの更新楽鑫ESP 8266ブラシソフトとファームウェアはここでダウンロードできます.https://www.espressif.com/zh-hans/products/hardware/esp8266ex/resources
ESP 8266-01 Sピン説明:だからESP 8266-01 Sブラシ機はGPIO 0を低くする必要があり、配線図は以下の通りである:
: start , , , 。
ブラシATファームウェア構成:ブラシMQTTファームウェア構成:
(三)STM 32移植MQTT
プラットフォーム:戦艦miniボード(stm 32 f 03 rb)ソフトウェアバージョン:STM 32 C UBEMX V 5.3、TrueSTUDIO V9.3 MQTTサーバ:emqx効果:stm 32サブスクリプショントピックled_コントロール、データはonとoffで、miniボードのledランプを制御します.
参照先:http://sun2y.me/2017/05/12/MQTT%E5%8D%8F%E8%AE%AE%E5%9C%A8STM32%E4%B8%8A%E7%9A%84%E7%A7%BB%E6%A4%8D/MQTTソースパッケージダウンロードアドレス:https://github.com/eclipse/paho.mqtt.embedded-c
完全なコードのダウンロードアドレス:https://download.csdn.net/download/qq153471503/11970249
:ESP8266 Station 。
組み込み型移植は比較的簡単で、transportファイルのハードウェア駆動読み書き関数を変更するだけで、関数を開いたり閉じたりする必要はありません.MQTTClient.cとMQTTClient.hファイルは私が自分で作成したもので、必要に応じて自分で修正することができます.完全ディレクトリは下図の通りです:
transport.c
#include "../inc/transport.h"
#include "../Inc/usart.h"
#include "../Inc/main.h"
#include "../Inc/app.h"
int transport_sendPacketBuffer(unsigned char* buf, int buflen)
{
if (HAL_UART_Transmit(&huart3, (uint8_t *) buf, buflen, 0xFFFF) == HAL_OK)
return buflen;
return 0;
}
int transport_getdata(unsigned char* buf, int count)
{
static uint32_t index = 0;
uint32_t datalen = WIFI_RX_STA & 0x3FFF;
if (WIFI_RX_STA & 0x8000)
{
if(datalen >= count)
{
memcpy(buf, WIFI_RX_BUF + index, count);
index += count;
if(index == datalen)
{
WIFI_RX_STA = 0;
index = 0;
}
return count;
}
}
return 0;
}
MQTTClient.c
/*
* MQTTClient.c
*
* Created on:
* Author:
*/
#include "../inc/MQTTClient.h"
#include "../Inc/app.h"
uint8_t MQTT_ClientConnect(const void* clientId, const void* username, const void* password, uint16_t keepalive, bool cleansession)
{
int len = 0;
int buflen = 256;
uint8_t buf[256];
uint8_t sessionPresent, connack_rc;
MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
data.clientID.cstring = (char *) clientId;
data.keepAliveInterval = keepalive;
data.cleansession = cleansession;
data.username.cstring = (char *) username;
data.password.cstring = (char *) password;
data.MQTTVersion = 4;
if ((len = MQTTSerialize_connect((unsigned char *) buf, buflen, &data)) <= 0)
return 1;
WIFI_RX_STA = 0;
if (transport_sendPacketBuffer(buf, len) != len)
return 2;
delay_ms(1000);
if (MQTTPacket_read(buf, buflen, transport_getdata) != CONNACK)
return 3;
if (MQTTDeserialize_connack(&sessionPresent, &connack_rc, buf, buflen) != 1 || connack_rc != 0)
return 4;
return 0;
}
uint8_t MQTT_ClientPublish(const void* topic, const void* data)
{
uint8_t buf[256];
MQTTString topicString = MQTTString_initializer;
int len = 0;
topicString.cstring = (char *) topic;
if ((len = MQTTSerialize_publish((uint8_t *) buf, sizeof(buf), 0, 0, 0, 0,
topicString, (uint8_t*) data, strlen((const char*) data))) <= 0)
return 1;
if (transport_sendPacketBuffer(buf, len) != len)
return 2;
return 0;
}
uint8_t MQTT_ClientSubscribe(const void* topic, int qos)
{
uint8_t buf[200] =
{ 0 };
uint32_t buflen = sizeof(buf);
uint32_t len = 0;
uint16_t packetid;
int maxcount = 1;
int count;
int grantedQoSs;
MQTTString topicString = MQTTString_initializer;
topicString.cstring = (char *) topic;
if ((len = MQTTSerialize_subscribe(buf, buflen, 0, 1, 1, &topicString, &qos)) <= 0)
return 1;
WIFI_RX_STA = 0;
if (transport_sendPacketBuffer(buf, len) != len)
return 2;
delay_ms(1000);
if (MQTTPacket_read(buf, buflen, transport_getdata) != SUBACK)
return 3;
if (MQTTDeserialize_suback(&packetid, maxcount, &count, &grantedQoSs, buf, buflen) == 0)
return 4;
return 0;
}
extern bool G_isConnected;
void MQTT_RecvParser(void)
{
size_t topiclen = 0;
size_t datalen = 0;
static uint8_t topic[0xFF];
static uint8_t message[0xFF];
static const uint8_t* buf = WIFI_RX_BUF;
if(G_isConnected == true)
{
if (WIFI_RX_STA & 0x8000)
{
WIFI_RX_BUF[WIFI_RX_STA & 0x3FFF] = '\0';
if(strstr((char *)WIFI_RX_BUF, "CLOSED") != 0)
{
G_isConnected = false;
WIFI_RX_STA = 0;
return;
}
topiclen = buf[3];
datalen = buf[1] - buf[3] - 2;
memcpy((char *) topic, (const char *) (buf + 4), topiclen);
memcpy((char *) message, (const char *) (buf + 4 + topiclen), datalen);
topic[topiclen] = '\0';
message[datalen] = '\0';
if(strncmp(TOPIC_LED, (const char *)topic, strlen(TOPIC_LED)) == 0)
{
if(strncmp(MSG_LED_ON, (const char *)message, strlen(MSG_LED_ON)) == 0)
{
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
}else if(strncmp(MSG_LED_OFF, (const char *)message, strlen(MSG_LED_OFF)) == 0){
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
}
}
printf("\r
");
printf("topic:%s\r
dara:%s\r
", (char *) topic, (char *) message);
WIFI_RX_STA = 0;
}
}
}
main.c
ends…