MQTTを介してAlibabaCloudに接続するためのSTM32 + ESP8266の使用の概要

この実験では、人体を感知する熱電センサーを例として取り上げ、MQTTプロトコルを介してSTM32 + ESP8266をAlibabaCloudIoTプラットフォームに接続する方法を紹介します。

1.予備準備

ハードウェア:Wildfire Guide STM32F103VET6開発ボード、HC-SR501熱電センサー

ソフトウェア:Keil5

プラットフォーム:Alibaba Cloud


2.具体操作

アリババクラウドIoTプラットフォーム構成

製品を作成する

ここに写真の説明を挿入

テスト信号は、熱電センサーAliクラウドプラットフォームで受信されるため、ブール赤外線検出状態の製品モデルを選択すると、需要を満たすことができます。

デバイスを作成する

ここに写真の説明を挿入

作成したばかりの製品選択デモで、新しいデバイスをクリックします。

トリプレットを取得

ここに写真の説明を挿入

システムは、トリプレットと呼ばれる、ProductKey、DeviceName、および機器のセットアップが完了したDeviceSecretを自動的に生成します。

通信Topic

ここに写真の説明を挿入

実験は通信し、MQTTプロトコルはMQTT(V3.1.1)プラットフォームに基づいています。プラットフォームは代理店の「公開/サブスクライブ」メッセージングプロトコルモードとの合意に基づいています。このプロトコルには、パブリッシャー、サブスクライバー、エージェント(ブローカー)の3種類があります。役割、メッセージはトピックを通じて発行者によって発行され、サブスクライバーは関心のあるトピックにサブスクライブします.1つの発行者が複数のサブスクライバーに対応できます。

通信デバイストピックのポストオブジェクトモデルで選択されたサフィックストピックのセット、公開およびサブスクライブは、もちろん、通信トピックをカスタマイズすることも可能です。トリプレットとコミュニケーショントピックを取得したら、後で使用するためにテキストに保存できます。このようにして、IoTプラットフォームの構成は基本的に完了します。


ハードウェア構成

ここに写真の説明を挿入

HC-SR501パイロエレクトリックセンサーはSTM32を比較的単純に接続し、GNDを接地し、VCC電源を3.3V-5Vに接続し、OUTをI / Oポートに接続しました。左のノブは感度を調整するために使用され、時計回りの感度は高く、反時計回りの感度は低くなります。右のノブは遅延誘導を調整するために使用され、時計回りの遅延は増加し、反時計回りの遅延は減少します。


ソフトウェア構成

熱電センサー構成

#include "sensor.h"
void HCSR501_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(HCSR501_INT_GPIO_CLK ,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin = HCSR501_INT_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(HCSR501_INT_GPIO_PORT, &GPIO_InitStructure);
}

uint8_t HCSR501_Statue(void)
{
	if(GPIO_ReadInputDataBit(HCSR501_INT_GPIO_PORT, HCSR501_INT_GPIO_PIN)==Bit_SET)
		return 1;
	else return 0;
}		

ESP8266はWiFiに接続します

  • AT + CWMODE = 1:動作モードの設定(STAモード)

    bool ESP8266_Net_Mode_Choose ( ENUM_Net_ModeTypeDef enumMode )
    {
    	switch ( enumMode )
    	{
    		case STA:
    		  return ESP8266_Cmd ( "AT+CWMODE=1", "OK", "no change", 10); 
    		
    	  case AP:
    		  return ESP8266_Cmd ( "AT+CWMODE=2", "OK", "no change", 10); 
    		
    		case STA_AP:
    		  return ESP8266_Cmd ( "AT+CWMODE=3", "OK", "no change", 10); 
    		
    	  default:
    		  return false;
      }
    	
    }
    
  • AT + CWJAP = "SSID"、 "PASSWORD":現在の環境のWIFIホットスポットに接続します(ホットスポット名、パスワード)

    bool ESP8266_JoinAP ( char * pSSID, char * pPassWord )
    {
    	char cCmd [120];
    	sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", pSSID, pPassWord );	
    	return ESP8266_Cmd ( cCmd, "OK", NULL, 150 );
    }
    
  • AT + CIPMODE = 1:透過送信モードをオンにします

    bool ESP8266_UnvarnishSend ( void )
    {
    	if ( ! ESP8266_Cmd ( "AT+CIPMODE=1", "OK", NULL, 100 ) )
    		return false;
    	
    	return 
    	  ESP8266_Cmd ( "AT+CIPSEND", "OK", ">", 100 );
    	
    }
    

MQTTポーティング

Github GithubCodeリンクでpahomqttオープンソースコードをダウンロードし、MQTTソースのpaho.mqtt.embedded-c-master \ MQTTPacket \ srcとpaho.mqtt.embedded-c-master \ MQTTPacket \トランスポートサンプルを解凍します。ファイルを自分のプロジェクトにコピーします。transport.cファイルのtransport_sendPacketBuffer()関数とtransport_getdata()関数を変更して、TCPデータを送受信します。

ここに写真の説明を挿入

MQTTプロトコル関連のパラメーターを変更する

#define   HOST_NAME       "a12Dg3Gsw50.iot-as-mqtt.cn-shanghai.aliyuncs.com"     //服务器域名
#else
#define   HOST_NAME       "139.196.135.135"     //服务器IP地址
#endif


#define   HOST_PORT     1883    //由于是TCP连接,端口必须是1883

#define   CLIENT_ID     "test01|securemode=3,signmethod=hmacsha1|"       //ID
#define   USER_NAME     "test01&a12Dg3Gsw50"     //用户名
#define   PASSWORD      "ce046a566db6047561024d89b99b898f98c39648"  //秘钥

#define   TOPIC         "/sys/a12Dg3Gsw50/test01/thing/service/property/set"      //订阅的主题
#define   PUBTOPIC      "/sys/a12Dg3Gsw50/test01/thing/event/property/post"      //发布的主题
HOST_NAME 固定形式:{YourProductKey} .iot-as-mqtt。{YourRegionId} .aliyuncs.com。{YourProductKey}は、デバイスのProductKeyです。{YourRegionId}はリージョンIDです。
HOST_PORT 1883年
クライアントID 固定形式:{YourDeviceName} | securemode = 3、signmethod = hmacsha1 |。{YourDeviceName}は、トリプレットのDeviceNameです。
ユーザー名 固定形式:{YourDeviceName}&{YourProductKey}。{YourDeviceName}と{YourProductKey}は、それぞれトリプレットのDeviceNameとProductKeyです。
パスワード 形式:clientId {YourDeviceName} deviceName {YourDeviceName} productKey {YourProductKey} {YourDeviceName}と{YourProductKey}は、それぞれトリプレットのDeviceNameとProductKeyです。暗号化方法はHmacSHA1、暗号化キー:DeviceSecret hmacsha1暗号化Webサイト:http ://encode.chahuo.com/

ここに写真の説明を挿入

データをアップロードする

if(HCSR501_Statue()==1)
				{
					sprintf(mqtt_message,"{\"method\":\"thing.event.property.post\",\"id\":\"0000000001\",\"params\":{\"MotionAlarmState\":1},\"version\":\"1.0.0\"}");
					MQTTMsgPublish(PUBTOPIC,QOS0,mqtt_message);
					printf( "\r\nsomeone inside\r\n");
				}
				else	
				{
					sprintf(mqtt_message,"{\"method\":\"thing.event.property.post\",\"id\":\"0000000001\",\"params\":{\"MotionAlarmState\":0},\"version\":\"1.0.0\"}");
					MQTTMsgPublish(PUBTOPIC,QOS0,mqtt_message);
					printf( "\r\nnoone inside\r\n");
				}								 
パラメータ の種類 説明
方法 ストリング リクエストメソッド。値はthing.event.property.postです。
id ストリング メッセージID番号。文字列タイプ番号、値の範囲は0〜4294967295で、各メッセージIDは現在のデバイスで一意です。
パラメータ ブール MotionAlarmState状態識別子。値は0または1です。
バージョン ストリング プロトコルバージョン番号。現在のプロトコルバージョン番号は1.0.0です。

総括する

ESP8266順次接続されたaliyunは、次の手順に分けることができます。STAモードに接続された構成モジュール➡➡ホットスポット接続TCP➡構成された送信モードから透過モード➡➡キー認証ユーザー名とサブスクリプショントピックハートビートパケットが送信されます➡➡データの送受信

プログラムのサインイン形式MQTT、ID、およびパスワード、メッセージの送信形式はMQTTを実行するための合意に厳密に従う必要があり、複数のスペースがAliクラウドに接続できない可能性があります。メッセージIDの送信パラメーター値は固定されていません。範囲内の値を取得するのは簡単ですが、IDの長さを保証する必要があります。QOSは通信の品質を意味します。メッセージの送信プロセスでデータが失われる可能性があるため、最も直接的な解決策は、AlibabaCloudなどのメッセージを再送信することです。ほとんどのネットワーキングプラットフォームはQOS2をサポートしておらず、実際の開発プロセスでQOS0を使用することで、ほとんどのニーズを満たすことができます。

3.結果表示

ここに写真の説明を挿入
ここに写真の説明を挿入

データを視覚化した後、ディスプレイシリアルポート内の誰かが誰かに対してプラットフォームインターフェイスを赤で表示すると、逆に、シリアルディスプレイ内に誰もいない場合、プラットフォームインターフェイスは誰に対しても緑で表示されないことがわかります。

おすすめ

転載: blog.csdn.net/weixin_44355637/article/details/109261348