Lexin esp8266学習rtos3.0最初の5つの注意事項:MQTTフレームワークに基づくLexinのIDFフレームワーク、研究の貿易黒字の安定は、メモリリークの問題、サポートesp8266とesp32を解決するために、再接続するドロップ!(リンク付き)

免責事項:この記事は、オリジナル作品を血液にブロガーと半分の星ハート曲がっノックアウトされ、ご支援をありがとう許さブロガーなく複製してはなりません。https://blog.csdn.net/xh870189248/article/details/89533003

  • 非公式のブログの調査のこのシリーズ半の星の心はただの商業目的なしに、個人の技術交流と共有を行い、力によって書かれた骨の折れます。間違った場合は、メッセージを残してください、私は速やかに変更しました。

1、Esp8266構築するための開発環境は、「hellow世界」シリアルプリンタを開始します。2は、あなたの光にGPIO Esp8266]ボタンを使用して開始した「第1のランプを。」図3に示すように、使用Esp8266「ソフトウェアタイマー、」照明LEDのタイミングで点滅0.5秒。図4に示すように、PWM、LEDの輝度の変化に、より深さのPWM制御のEsp8266理解。ネイティブ5、Esp8266 Lexin SDKパッケージポストの高度利用及び取得要求雲、「天気予報情報」を得ました 6、理解SmartConfigとAirkissインターネットクラウドと8266への鍵配送ネットワークのEsp8266。名前にファームウェアにコードを記述することなく無線LAN。7、理解softAPホットスポット流通ネットワークモードの原則、模造「気の利いた雲」のEsp8266は、独自の流通網ホットスポットモードのプロトコルを定義します。8、Esp8266あなたはここで、UDP、TCPクライアントまたはサーバーの役割通信のよう8266を探しています。9、Esp8266高度道路パート1: [その小戦闘] MQTTローカルサーバ8266に設定Windowsシステム、LEDランプ点灯LAN。10、Esp8266高度道路セクション2: [次の小戦闘] Windowsシステムは、MQTTローカル・サーバ8266、LEDランプ点灯LANを設定します。11、Esp8266は高度な方法3: 8266インテリジェントアクセスアリはLynxのウィザード音声制御がパーティーに来ていない見て、LEDライトを点灯しました!12、Esp8266は4への道を進ん:イラストは、リモートLEDを制御するモバイルネットワークのために、8266MQTTアリクラウドホストサーバーを構築することを学びます。13、Esp8266は5への道を進みました。











8266完全小さい場合ハンズオン、smartConfig + MQTT契約LEDの簡単な遠隔制御するように設定。
14、Esp8266先進ウェイ6: 正しい姿勢------構築するための環境を学習FreeRTOSシステムesp8266、燃やします。
7の15、Esp8266高度道路: 物事esp8266まだ清流、8266 aliyunインターネットアクセス非アリSDSインテリジェントサービス、LEDを点灯します。
16、Esp8266高度道路8章: esp8266系グラフトNonos赤外線H1838、赤外線リモート配信ネットワーク、遠隔制御光を達成します。
17、Esp8266 9への道を進ん: 鍵配布ネットワークモードに8266をトリガする(スイッチ等)5 esp8266自己啓発を切り替える高速パワー、ノーボタン。18、Esp8266は10への道を進ん: esp8266ベースNONOSは、ファームウェアをアップグレードするためのリモートOTAアップグレード、無線「ホット・フィックス」を達成します。19、Esp8266は、道路11上に前進esp8266ドライブDS18B20、dht11温度及び湿度センサ、温湿度センサをサーバーを収集します。20、Esp8266は12への道を進んESP今esp8266モードの詳細な研究を、インタラクティブなデータ通信網を必要とすることなく、お互いに簡単に接続するために、少し模造ウィットクラウドゲートウェイを行います。21、Esp8266 13への道を進んesp8266で最大効率とローカルLANネットワーク環境でフロントエンドデータ交換を実現する方法。




22、Esp8266は14への道を進ん、それらの事についてのmakefile話を、サードパーティの静的ライブラリファイルを追加する方法、およびフォルダのカスタマイズ方法をesp8266プロジェクトを。
23は、Esp8266は15への道を進んesp8266の来波がベースfreeRtos専用のシステムは、リモートサーバの実装は、のlwIPの下で基本的な知識との接触をアップグレード太田接続しています。
24は、Esp8266先進道16検討中の浸透研究では、外部のSPIチップ25Qシリーズ、その分布内のコードのおなじみの8266ブロック、および便利な場所の画像やその他の情報をesp8266。
25は、Esp8266先進道17esp8266 UARTシリアル通信の下の深いチャットは、あなたがNONOSバージョンとRTOSシステムをファイルへの準備ができているシリアルポートドライバのためのプログラミングを中断します。
26、Esp8266は18への道を進んRTOS分析MQTT実装プロセスを移植MQTT契約esp8266のRTOSリアルタイムシステムを実現するために、再接続します。
27、Esp8266は19への道を進んメモリモジュール式の開発を保存し、VisualStudioをコード、IDF新しいフレームワークで開発esp8266のRTOS SDK v3.0のバージョンのペースを堅持します。
28、Esp8266は20への道を進んだどのように使用cJsonの容易さ、いくつかのJSONデータとどのようにいくつかのJSONデータLexinのesp8266を生成するを解析する方法を教えます。
29、Esp8266は21への道を進みましたLexinの自由なメッセージの数百万は、プライベートサーバは、より多くのaliyunルールエンジンをサポートするサポートするために、TCPプロトコルのアクセスMQTTアリクラウド物事プラットフォームを使用してダイレクトモードをesp8266。
30、Esp8266 22への道を進んLexin esp8266 SDKプログラミングをIICバスドライバ0.96インチOLEDスクリーンを使用して、天気予報情報を表示します。
31、Esp8266は23への道を進んesp8266がHTMLに遭遇した場合、内蔵のWebページ実装プロセスを整理し、かつ実現するためにビルトインWeb制御機器は、ルータ、携帯電話でもesp8266を制御することができる必要はありませんか。
32は、Esp8266は24への道を進ん世間話はセキュリティ暗号化方式HMACMD5とesp8266の練習、最大限の保護の情報送信処理の安全性をもたらします。
33は、Esp8266は高度な方法25優雅Lexin元のパッケージの論理的思考esp8266底レジスタと同様に、独自の静的ライブラリのライブラリファイルを作成する方法、人々は、サードパーティを使用してみましょうか?
34、Esp8266は、道路26上に前進SPIドライバチップに8つのデジタルMAX7219を用いLexin esp8266 NONOS SDK 3.0ベースのプログラミング、日付情報が表示されます。
35は、Esp8266高度ウェイ〜27商業用RGB電球色鮮やかな調整可能な総合的なプログラムを行うにはウィットのクラウドプラットフォームでLexinのesp8266チップはまだ明るい目を引く高さを投影します。
36は、Esp8266学習rtos3.0は、最初の1ノートesp8266 RTOS 3.0 SDKのエンジニアリング構造を理解し、どのようにesp8266近いコンパイル方法をヘッダファイルをカスタマイズするにはESP-IDFプロジェクト、するには?
2の37、Esp8266学習rtos3.0ノートあなたがここを見ているが、GPIO、PWMおよびUARTインターフェースなどの基本的な周辺機能、です。
38は、Esp8266はrtos3.0最初の3つの音学習整数、文字列、配列や構造体を保存NVSを使用する方法、ストレージ技術NVSのあなたがアップし、固定の理解と使用して記事を。
39、Esp8266学習rtos3.0最初の4つのノートスマートデバイスのマイクロチャネルパブリック数配信ネットワークは、市場でのストロークと結合装置のプロセスをesp8266、そして成功しesp8266 rtos3.1 SDKの移植あなたのストロークを取ります。
40は、Esp8266はrtos3.0最初の5つのノートを学習ベースのLexinのIDFフレームワーク、研究の貿易黒字の安定、MQTTフレームメモリリークの問題を解決するために再接続ドロップ!esp8266とesp32をサポートしています!


  • 多くの人々は、進行して、次の通知を私に連絡し、小さな呉服無料の共有を作成する方法を学びます:

楽しいesp8266あなたとは飛ぶ、プラスグループ支払わQQグループ、しきい値を高めるために、好きではない友人をスプレーしない追加しないでください:434 878 850
esp8266無料ソースコードの学習のまとめ(継続的に更新され、スターを歓迎):https://github.com/xuhongv/StudyInEsp8266
esp32概要を学ぶ無料のソースコード(継続的に更新され、スターを歓迎):https://github.com/xuhongv/StudyInEsp32


I.はじめに。


         この技術は、フィールドに到達するときは、小説の一見技術分野は非常に興味を持っていませんでした!これは、一般的な問題のプログラマすることができます!しかし、私はこの若い経験を持っています!

         我々はことを知ってMQTT、それは本当に速いので契約は、最初のものたちの通信されています!しかし、多くのクライアントに応じて、例数、およびサーバーのような、成熟しているemqので、ネットワーク環境に依存するだけでなく、私たち適切に接続された組込み機器での安定性を行い、アリのクラウドサーバーや他のもの同様に自分の問題として!

         以来、接続サーバ組み込み機器の良好な安定性を作ることができ、それは非常に必要です!


第二に、なぜフレームのですか?


          今日、インターネットの時代に、私たちは、資源の共有と相互運用性の万人を実現しました。多くのリソースは、オープンソースのそれですが、担当の誰もが無料!フロントフレームのうち、近年のようにvue.jsreact nativeというように、彼らは非常に私たちのプログラマーの開発サイクルを減らす非常に素晴らしいフレーム、ですが、公式サイトもメンテナンスされています。


          ある日、私が考えていた、なぜ埋め込まないC言語の枠組みまれ!そしてそれはほんの数であり、近年では、新たな導入aliosのシステムを。多くの場合、これらのシステムは、チップに向けられています。フロントエンドとは異なり、開発のためのフレームワークと、すべてのユーザーがアクセスし、非常にいくつかの制限することができます!だから、私は皆に仕上げ与え、国内のインターネットのためのDiudiuの犠牲をしたいMQTTフレームを!


         フレームワークにこの小さな問題の話以来、最も一般的な理解が理解することができるシステムが、この「システム」は、基盤となるシステムに依存しているということです!長いAPIインターフェイスが家を与える提供!私はすでに述べたように、組み込みデバイスの良好な安定性を作ったサーバーに接続し、いくつかの既存のコードと組み合わせて、その後、だけでなく、使用するのが最も簡単な使用方法を考えますか?私はLexin IDFフレームの上にパッケージ化MQTT接続枠組み合意、統合が容易である、のがより便利使用してみましょう!


第三に、統合する方法のためのフレームワーク?


  • Lexin idfベースのフレームワークRtosそのQuguanネットワークの特性を理解するためのフレームワークの下で!
  • 先に述べたように、このフレームワークをサポートesp8266 rtos3.0し、esp32 idfここでの声明は、このフレームワークのAPIインターフェイスコードに2つのはまったく同じです!しかし、それは根本的なコードが同じであることを意味しませんしかし、あなたは基礎となるコードを気にする必要はありません、私はすべての良いパッケージを持っています!あなただけのように自分の道を統合する必要があります!
  • 統合されたアプローチが同じで、このコンポーネントは、直接それが特定のサンプルコードを望んでいるプロジェクトで投げるために、私はあなたの記事の後の掲載あげます!

ここに画像を挿入説明


第四に、どのようにフレームワークを使用するには?


          私がIDFのプログラミングフレームワークとLexinおなじみの多くを知るために、以下のように、私はあなたが使用することは非常に簡単で提供します:


最初のステップは、最初の接続の設定パラメータを初期化します!

 xMQTT_CONFIG xMqttConfig =
        {
            .MQTTVersion = 4,
            .borkerHost = "www.helloworld.cn", //服务器名字
            .borkerPort = 1883,                  //端口
            .mqttCommandTimeout = 6000,
            .username = "admin",           //用户名
            .password = "xuhong2019",      //用户密码
            .clientID = (char *)deviceMac, //设备Id
            .keepAliveInterval = 60, //心跳 秒
            .cleansession = true,
        };
    xMqttInit(&xMqttConfig);

第二段階は、通知フレームワークのWiFi接続は成功です!

  • なぜ、このAPIはありますか?その理由は、サーバがより迅速に接続されていることで、切断フレームをAPが検出された場合でも、サーバーはすぐに再接続されます!Lexinが提供さesp_event_loop_init()から我々はできる、システムイベントコールバックメソッドを設定するSYSTEM_EVENT_STA_GOT_IP(AP正常に接続してIPアドレスを取得する)とSYSTEM_EVENT_STA_DISCONNECTEDフレーム(AP切断接続)をお知らせイベント!
  • 私は、インターフェイスメソッドが提供する呼び出しxMqttConnectWifiNotify()質量参加のために、WIFI_CONNECTEDそしてWIFI_DISCONNECTED文字通りとして理解!
static esp_err_t event_handler(void *ctx, system_event_t *event)
{
    switch (event->event_id)
    {
    case SYSTEM_EVENT_STA_GOT_IP:
        xMqttConnectWifiNotify(WIFI_CONNECTED); //通知框架 wifi热点连接成功!
        break;
    case SYSTEM_EVENT_STA_DISCONNECTED:
        xMqttConnectWifiNotify(WIFI_DISCONNECTED); //通知框架 wifi热点断开连接了!
        esp_wifi_connect();
        break;
    }
    return ESP_OK;
}

第3のステップは、マスタータスクを作成することですTaskMainMqtt

  • 上面步骤弄好之后,请自行通过 xTaskCreate()方法创建此任务,这个任务的名字我已经提供在了 头文件,您只需要创建就好了,具体的任务栈大小根据自己的需求去定,我这里建议是1024 * 6,级别为10!
  • 还有一点主意的是,请不要重复创建!像我下面通过一个句柄来控制就好了!
    if (xHandlerMqtt == NULL)  {
           xTaskCreate(TaskMainMqtt, "TaskMainMqtt", 1024 * 6, NULL, 10, &xHandlerMqtt);
    }

第四步,创建接受数据任务!

  • 老费这么多,主要还是这个为重点,我把服务器连接状态,数据接受全部都通过 队列实现!只需要不断调用xMqttReceiveMsg(xMQTT_Msg *msg);方法,其本质是xQueueReceive()方法,所以大家死循环读取就好!
  • xMqttReceiveMsg(xMQTT_Msg *msg);方法里面的传参结构体的成员里面的 type 是关键!不同的 type 意味这回调不一样的框架事件,这个和乐鑫的编程非常相似!下面对这个 type 类型的不同意思我贴注释出来,大家理解即可!
void TaskXMqttRecieve(void *p)
{

    xMQTT_Msg rMsg;
    xMQTT_Msg sMsg;
    ESP_LOGI(TAG, "xMqttReceiveMsg start");
    while (1)
    {
        if (xMqttReceiveMsg(&rMsg))
        {
            switch (rMsg.type)
            {
                //接收到新的消息下发
            case xMQTT_TYPE_RECIEVE_MSG:
                ESP_LOGI(TAG, "xQueueReceive topic: %s ", rMsg.topic);
                ESP_LOGI(TAG, "xQueueReceive payload: %s", rMsg.payload);
                ESP_LOGI(TAG, "esp_get_free_heap_size : %d \n", esp_get_free_heap_size());
                break;
                //连接Mqtt服务器成功
            case xMQTT_TYPE_CONNECTED:
                strcpy((char *)rMsg.topic, MQTT_DATA_SUBLISH);
                rMsg.qos = 1;
                xMqttSubTopic(&rMsg);
                strcpy((char *)rMsg.topic, MQTT_DATA_PUBLISH);
                rMsg.qos = 0;
                xMqttSubTopic(&rMsg);
                ESP_LOGI(TAG, "xMQTT : xMQTT_TYPE_CONNECTED");
                break;
                //断开Mqtt服务器成功
            case xMQTT_TYPE_DISCONNECTED:
                ESP_LOGI(TAG, "xMQTT : xMQTT_TYPE_DISCONNECTED");
                break;
                //正在连接Mqtt服务器
            case xMQTT_TYPE_CONNECTTING:
                ESP_LOGI(TAG, "xMQTT : xMQTT_TYPE_CONNECTTING");
                break;
                //订阅主题成功
            case xMQTT_TYPE_SUB_SUCCESS:
                ESP_LOGI(TAG, "xMQTT : xMQTT_TYPE_SUB_SUCCESS");
                break;
                //ping心跳服务器
            case xMQTT_TYPE_SEND_PING:
                ESP_LOGI(TAG, "xMQTT : xMQTT_TYPE_SEND_PING");
                break;
            default:
                break;
            }
        }
    }
}

第五步,主动发送!

  • 这个没什么可说的,xMqttPublicMsg() 方法调用本质是 xQueueSend() 方法,所以大家不必要担心调度和卡顿问题!具体的用户见下面!
                xMQTT_Msg sMsg;
                strcpy((char *)sMsg.topic, MQTT_DATA_PUBLISH);
                sprintf((char *)sMsg.payload, "{\"xMqttVersion\":%s,\"freeHeap\":%d}", getXMqttVersion(), esp_get_free_heap_size());
                sMsg.payloadlen = strlen((char *)sMsg.payload);
                sMsg.qos = 1;
                sMsg.retained = 0;
                sMsg.dup = 0;
                xMqttPublicMsg(&sMsg);

五、其他


  • 您可以根据自己需求在头文件调整下配置,可以减少内存使用:
//接收数据缓存包设置
#define RECV_BUFF_SIZE 512
#define MQTT_PACK_SIZE 512

#define XP_MQTT_MAX_TOPICLEN 50  //最大的主题长度
#define XP_MQTT_RCV_MSG_QUEUE_LEN 5 //接受队列个数
#define XP_MQTT_SEND_MSG_QUEUE_LEN 5 //发送队列个数
  • 下面为了证明稳定性,我大家提供我统计的这个运行一周不断电连接服务器的连接状况数据:

ここに画像を挿入説明


六、下载


  • 谢谢大家一直支持我!再次声明,这个框架支持 esp8266 rtos3.0esp32 idf ,这里声明一下,给这个框架的代码API接口在2者的使用是一模一样的!但是并不意味着底层代码是一样的,所以,我给大家2份工程参考!!当然了,你也不需要理会底层代码,我已经全部封装好了!您只需要按照我的方式集成进去就好了!
  • 下面的提供都是以静态库封装存在的,但绝对不影响使用!!如需源码,邮箱联系我!

esp8266は(唯一のRTOS 3.0およびSDK以上をサポートしています):https://github.com/xuhongv/xLibEsp8266Rtos3.1Mqtt
esp32(IDFフレームワークへ):https://github.com/xuhongv/xLibEsp32Rtos3.2Mqtt

おすすめ

転載: blog.csdn.net/xh870189248/article/details/89533003