このトピックでは、SDK for C 4.0をESP8266開発ボードに移植し、デモを使用してAlibaba Cloud IoT Platformに接続する方法について説明します。
準備
SDKを移植するには、次の項目を準備する必要があります。
- 開発ボード。 このトピックで使用される開発ボードはESP-LAUNCHERで、公式のESP8266EX_Demo_Boardです。
- USBケーブル。
- Windows、Linux、またはmacOSを実行するコンピュータ。 ホスト開発オペレーティングシステムはmacOSです。
開発環境をセットアップする
開発環境のセットアップを高速化するには、まずESP8266 RTOSソフトウェア開発キットを読むことをお勧めします。 macOS環境をセットアップするには、次の手順を実行します。
- インストール必要なソフトウェア
sudo easy_install pipコマンドを実行し、pipシステムをインストールします。sudo pip install pyserialコマンドを実行して、pySerialモジュールをインストールします。 - クローンESP-IDF公式リポジトリ
cd ~ mkdir esp && cd esp gitクローンgit@github.com:espressif/ESP8266_RTOS_SDK.git -b release/v3.3ダウンロード後、
export IDF_PATH=~/esp/ESP8266_RTOS_SDKスクリプトを実行して、IoT Development Framework (IDF) SDKパスを設定します。説明- このデモでは
release/v3.3ブランチを使用し、対応するコミットIDはfd785ab0c50009ab93503ae785814136f6d1009bです。 - Espressif IoT Development Framework (ESP-IDF) は、ESP8266_RTOS_SDK V3.0以降で使用されています。 このトピックを参照して、V3.0より前のバージョンのESP8266_RTOS_SDKを変更して使用できます。
- このデモでは
- ツールチェーンとコンパイルツールのインストール
手動でmacOS toolchainパッケージをダウンロードし、
~/espディレクトリに解凍します。mkdir -p ~/esp cd ~/esp tar -xzf ~ /ダウンロード /xtensa-lx106-elf-macos-1.22.0-100-ge567ec7-5.2.0.tar.gz他のオペレーティングシステムのツールチェーンは、GitHubのESP8266_RTOS_SDKページで入手できます。
ツールチェーンのシステムパスを設定します。
export PATH=$PATH:$HOME/esp/xtensa-lx106-elf/bin次のスクリプトを実行して、すべての環境変数の設定を
$HOME/.bash_profileファイルに追加します。set_esp8266 () { exprot IDF_PATH=$HOME/esp/ESP8266_RTOS_SDK export PATH=$PATH: $HOME/esp/xtensa-lx106-elf/bin } - 開発ボードに接続する
- USBドライバをインストールします。 FTDIからUSBドライバに必要なシリアルポートドライバを取得できESP-LAUNCHER。
- シリアルポート名を取得します。
ls /dev/cu.*コマンドを実行して、macOSのポート名を照会できます。 このデモのシリアルポート名は/de v/cu.us bserial-AH06UHLHです。
- プロジェクトの設定、コンパイル、フラッシュ、およびシリアルポートの監視
- すべての設定はプロジェクトパスで行う必要があります。 したがって、まず
cd examples/wifi/simple_wifi/スクリプトを実行して、examples/wifi/simple_wifi/ ディレクトリに移動します。 - ESP-IDFで、
make menuconfigを実行してプロジェクトを構成します。 詳細については、次の移植方法をご参照ください。 - 設定が完了したら、
make allコマンドを実行してファームウェアをコンパイルします。 - コンパイルが完了したら、
make flashコマンドを実行してファームウェアをフラッシュします。 開発ボードがダウンロードモードになっていることを確認します。 - プロジェクトがフラッシュされたら、
make monitorコマンドを実行してシリアルポートを監視します。 開発ボードが作業モードになっていることを確認します。
これで、ESP8266開発環境をセットアップし、wifiステーションのデモをコンパイルしてフラッシュしました。
- すべての設定はプロジェクトパスで行う必要があります。 したがって、まず
- ポートSDK for C 4.0
SDK for C 4.0を移植するプロセスには、SDKコードのインポートと、SDKポートファイルおよびコンパイルシステムの構成が含まれます。
SDKの
portfilesディレクトリには、ESP8266のportfileが含まれています。 したがって、SDKソースコードをインポートし、SDKの移植を完了するようにコンパイルシステムを設定するだけで済みます。移植プロセスについては、IDFのBuild Systemを読むことをお勧めします。 IDFに関する次の用語を理解する必要があります。
- project: アプリのビルドに使用されるすべてのソースファイルと構成ファイルのみを含むディレクトリです。
- コンポーネント: これらは、コンパイルされたスタンドアロンコードのモジュラー部分です。静的ライブラリとアプリにリンクされています。 これらのモジュールコンポーネントは、IDFのコンポーネントディレクトリに格納されます。 カスタムコンポーネントを追加できます。
デフォルトでは、ESP8266 SDKのコンパイルシステムはGUN Makeを使用します。 CコードのSDKをインポートし、対応する
を記述するだけです。mk構成ファイルを使用して、SDK for Cをコンパイルします。
移植方法
次の2つの移植方法があります。
- 方法1: SDK for Cをプロジェクトディレクトリにインポートし、アプリのソースコードを使用してSDKソースコードをコンパイルします。
- 方法2: SDK for CをカスタムIDFコンポーネントとしてIDFのcomponentsディレクトリに導入します。
2番目の方法を使用することを推奨します。 SDK for Cを別のコンポーネントとして使用すると、さまざまなプロジェクトで再利用したり、SDKコードをアプリコードから切り離すことができます。 以下の手順を実行します。
- SDK for Cをカスタムコンポーネントとして追加
SDK for C 4.0をダウンロードし、SDKを
$IDF_PATH/componentsディレクトリにコピーし、次のcomponent.mkファイルをSDKディレクトリに追加します。COMPONENT_ADD_INCLUDEDIRS :=コアコア /sysdepコア /utilsコンポーネント /ota COMPONENT_SRCDIRS := core/utils core/sysdep components/ota portfiles/freertos_port/ external説明portfiles/freertos_portcomponentsディレクトリ内のfreertos_port.cファイルは、ESP-IDF用のSDKポーティングファイルです。 このファイルは、C用SDKをESP-IDFおよびmbedtlsと統合します。 - ポートのデモプログラム
examples/wifi/simple_wifi/の例を変更して、MQTT (Message Queuing Telemetry Transport) ベースのクラウド移行を示します。ネイティブデモでは、wifiステーションモードで特定のWi-Fiホットスポットにアクセスする方法を示します。これにより、添付ファイルのソースファイルをダウンロードして
simple_wifi.cファイルを上書きできます。 - プロジェクトの設定、コンパイル、およびフラッシュ
examples/wifi/simple_wifi/プロジェクトディレクトリでmake menuconfigコマンドを実行し、プロジェクトを設定します。[SDKツールの設定]メニューで、[コンパイラツールチェーンのパス /プレフィックス]が[xtensa-lx106-elf]に設定されていることを確認します。[シリアルフラッシャー設定]メニューで、ESP8266開発ボードのデフォルトのシリアルポート名を変更します。[設定例]メニューで、ステーションモードを選択し、WiFi SSID、WiFiパスワード、および最大再試行パラメーターを設定します。[コンポーネント設定]>[ESP8266固有]を選択します。 表示されるページで、メインタスクのスタックサイズを4096に設定し、変更を保存して終了します。
mbedtls設定:
PSKをTLSキー交換方法として使用するには、次の操作を実行する必要があります。
[コンポーネント設定]>[mbedTLS]を選択します。 表示されるページで、[TLSキーExchangeメソッド]をクリックします。Enable pre-shared-key ciphersuitesスイッチをオンにします。CFLAGS += -DMBEDTLS_PSK_MAX_LEN=64をmbedtlsコンポーネントのcomponent.mkファイルに追加します。
次の情報は、設定を指定します。
COMPONENT_ADD_INCLUDEDIRS := port/include mbedtls/include port/esp8266/include COMPONENT_SRCDIRS := mbedtls/library port/esp8266 COMPONENT_OBJEXCLUDE := mbedtls/library/net_sockets.o COMPONENT_SUBMODULES += mbedtls CFLAGS= -DMBEDTLS_PSK_MAX_LEN=64設定が完了したら、
make allおよびmake flashコマンドを実行して、コンパイルとフラッシュを完了します。 - ログの表示
make monitorコマンドを実行してシリアルポートモニタを起動し、デバイスを再起動して次のログを表示します。...... I (274) esp_image: segment 1: paddr=0x00073818 vaddr=0x40273810サイズ=0x0e5fc ( 58876) マップ I (300) esp_image: segment 2: paddr=0x00081e1c vaddr=0x3ffe8000サイズ=0x00a3c ( 2620) ロード I (301) esp_image: segment 3: paddr=0x00082860 vaddr=0x40100000サイズ=0x00a50 ( 2640) ロード I (308) esp_image: segment 4: paddr=0x000832b8 vaddr=0x40100a50 size=0x05854 ( 22612) load I (325) ブート: オフセット0x10000でパーティションからアプリをロード I (349) system_api: ベースMACアドレスが設定されていません。EFUSEからデフォルトのベースMACアドレスを読み取ります I (359) system_api: ベースMACアドレスが設定されていません。EFUSEからデフォルトのベースMACアドレスを読み取ります phy_version: 1155.0、6cb3053、11月11 2019、17:31:08、新しいRTOS I (413) phy_init: phy ver: 1155_0 I (418) reset_reason: RTCリセット1ウェイクアップ0ストア0、理由は1 I (425) シンプルなwifi: ESP_WIFI_MODE_STA I (473) シンプルなwifi: wifi_init_sta終了。 I (479) シンプルなwifi: ap SSIDに接続: C_SDK_Testパスワード: 1234abcd I (614) wifi: state: 0 -> 2 (b0) I (659) wifi: state: 2 -> 3 (0) I (671) wifi: state: 3 -> 5 (10) I (676) wifi: pm start、タイプ: 2 I (2320) イベント: sta ip: 192.168.0.101、mask: 255.255.255.0、gw: 192.168.0.1 I (2329) シンプルなwifi: 得られたip:192.168.0.101 I (2334) シンプルなwifi: ap SSIDに接続: C_SDK_Testパスワード: 1234abcd I (2342) シンプルなwifi: スタートlinkkitメイン [1.990][LK-0313] MQTTユーザーがaiot_mqtt_connect apiを呼び出し、connect [2.000][LK-0317] mqtt_basic_demo&a13FNXXXXXX [2.000][LK-0318] 4780A5F17990D8DC4CCAD392683ED80160C4C2A1FFA649425CD0E2666A8593EB [2.010][LK-0319] a13FNXXXXXX.mqtt_basic_demo | timestamp=2524608000000、_ss=1、_v=sdk-c-4.0.0、securemode=2、signmethod=hmacsha256、ext=1、| [2.020][LK-031A] devicename | hmacsha256 | a13FNXXXXXX&mqtt_basic_demo | 2524608000000 [2.020][LK-031A] 3A27B38E1BAB95462F8EA659C15EE26319286EB1CB7B372451EE82A30A9E7FDF サーバーとのmbedtls接続を確立します (host='a13FNXXXXXX .itls.cn-shanghai.aliyuncs.com ', port=[1883]) [2.450][LK-0313] MQTT接続成功で460 ms AIOT_MQTTEVT_CONNECT [2.450][LK-0309] サブ: /sys/a13FNXXXXXX/mqtt_basic_demo/thing/event/+/post_reply [2.460][LK-0309] パブ: /sys/a13FNXXXXXX/mqtt_basic_demo/thing/event/property/post [LK-030A] > 7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 | {"id":"1","versi [LK-030A] > 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D | on ":" 1.0 "、" param [LK-030A] > 73 22 3A 7B 22 4C 69 67 68 74 53 77 69 74 63 68 | s ":{" LightSwitch [LK-030A] > 22 3A 30 7D 7D | ":0}} suback, res: -0x0000, packet id: 1, max qos: 1 [2.530][LK-0309] pub: /sys/a13FNXXXXXX/mqtt_basic_demo/thing/event/property/post_reply [LK-030A] < 7B 22 63 6F 64 65 22 3A 32 30 30 2C 22 64 61 74 | {"code":200,"dat [LK-030A] < 61 22 3A 7B 7D 2C 22 69 64 22 3A 22 31 22 2C 22 | a ":{}," id ":" 1 "," [LK-030A] < 6D 65 73 73 61 67 65 22 3A 22 73 75 63 63 65 73 | message ":" succes [LK-030A] < 73 22 2C 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 | s "、" method ":" thi [LK-030A] < 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 | ng.event.propert [LK-030A] < 79 2E 70 6F 73 74 22 2C 22 76 65 72 73 69 6F 6E | y.post "," version [LK-030A] < 22 3A 22 31 2E 30 22 7D | ":" 1.0 "} pub, qos: 0, topic: /sys/a13FNXXXXXX/mqtt_basic_demo/thing/event/property/post_reply pub, payload: {"code":200,"data" :{}, "id":"1","message":"success","method":"thing.event.property.post","version":"1.0"} ハートビート応答 ハートビート応答 ハートビート応答 ......ログの説明:
I (2342) simple wifi: Start linkkit mainは、SDK for Cが動作を開始することを識別するためにデモに追加されたログ情報です。[LK-XXXX]を含むログは、C用SDKによって提供されます。ログでは、[2.450][LK-0313] MQTT接続が460ミリ秒で成功したことは、MQTT接続が確立されたことを示し、消費時間が含まれています。