このガイドでは、C SDK 4.0 を ESP8266 開発ボードに移植し、デモアプリケーションを使用して Alibaba Cloud IoT Platform に接続する方法について説明します。
事前準備
SDK を移植するには、次の項目を準備する必要があります。
- 開発ボード。このトピックでは、公式の ESP8266EX_Demo_Board である ESP-LAUNCHER を使用します。
- USB ケーブル。
- Windows、Linux、または macOS を実行するコンピューター。このガイドでは、ホスト開発プラットフォームとして macOS を使用します。
開発環境のセットアップ
環境設定を迅速に行うには、ESP8266 RTOS SDK Readme をお読みください。以下の手順では、macOS で環境をセットアップする方法について説明します。
- 必須ソフトウェアのインストール
sudo easy_install pipコマンドを実行して pip システムをインストールします。sudo pip install pyserialコマンドを実行して pySerial モジュールをインストールします。 - 公式 ESP-IDF リポジトリのクローン
cd ~ mkdir esp && cd esp git clone https://github.com/espressif/ESP8266_RTOS_SDK.git -b release/v3.3ダウンロードが完了したら、
export IDF_PATH=~/esp/ESP8266_RTOS_SDKコマンドを実行して IDF SDK のパスを設定する必要があります。説明release/v3.3fd785ab0c50009ab93503ae785814136f6d1009bこのデモでは ブランチを使用します。対応するコミット ID は です。- ESP-IDF フレームワークを使用しない v3.0 より前のバージョンについては、プロセスを適宜調整して統合を完了できます。
- ツールチェーンとコンパイルツールのインストール
手動で macOS ツールチェーンをダウンロードし、ツールチェーンを
~/espディレクトリに展開します。mkdir -p ~/esp cd ~/esp tar -xzf ~/Downloads/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 } -
開発ボードの接続
macOS でシリアルポート名を確認するには、
ls /dev/cu.*コマンドを実行します。このデモでのシリアルポート名は/dev/cu.usbserial-AH06UHLHです。 -
設定、コンパイル、書き込み、およびモニタリング
cd examples/wifi/simple_wifi/examples/wifi/simple_wifi/すべての構成はプロジェクトのパスで実行する必要があるため、まず先に示したコマンドを実行してこのディレクトリに移動してください。- ESP-IDF で
make menuconfigを実行してプロジェクトを設定します。詳細については、後述の移植方法をご参照ください。 - 設定が完了したら、
make allコマンドを実行してファームウェアをコンパイルします。 - コンパイルが完了したら、
make flashコマンドを実行してファームウェアを書き込みます。開発ボードがダウンロードモードになっていることを確認してください。 - プロジェクトが書き込まれたら、
make monitorコマンドを実行してシリアルポートをモニターします。開発ボードが動作モードになっていることを確認してください。
これで、ESP8266 開発環境のセットアップが完了し、Wi-Fi ステーションのサンプルのコンパイルと書き込みに成功しました。
説明 次に進む前に、開発ボードが正しく動作していることを確認してください。 -
C SDK 4.0 の移植
移植プロセスには、SDK ソースコードのインポート、SDK 移植レイヤーファイルの設定、ビルドシステムのセットアップが含まれます。
SDK の
portfilesディレクトリには ESP8266 用のポートファイルがすでに含まれているため、SDK ソースコードをインポートしてビルドシステムを設定するだけで移植が完了します。移植プロセスをより深く理解するために、ESP-IDF の ビルドシステムのドキュメントを読むことを推奨します。まず、いくつかの基本的な ESP-IDF の概念に慣れておく必要があります。
- プロジェクト:アプリのビルドに必要なすべてのソースファイルと設定ファイルを含むディレクトリ。
- コンポーネント:スタンドアロンコードのモジュール化された部分で、静的ライブラリにコンパイルされ、アプリにリンクされます。これらのモジュール化されたコンポーネントは、ESP-IDF の components ディレクトリに保存されます。独自のカスタムコンポーネントを追加することもできます。
ESP8266-sdk のビルドシステムはデフォルトで GNU make を使用するため、C SDK のコードを追加し、対応する
.mkビルド設定ファイルを作成することで、ビルドに C SDK を追加できます。
移植方法
次の 2 つの移植方法があります。
- 方法 1:C SDK をプロジェクトディレクトリに追加し、SDK ソースコードをアプリのソースコードと一緒にコンパイルする。
- 方法 2:C SDK をカスタム IDF コンポーネントとして IDF の components ディレクトリに導入する。
2 番目の方法を使用することを推奨します。C SDK を個別のコンポーネントとして使用すると、異なるプロジェクトで再利用しやすくなり、SDK コードをアプリのコードから分離できます。次の手順を実行します。
-
カスタムコンポーネントとしての C SDK の追加
- C Link SDK を取得します。
説明 デバイス OSFreeRTOS高度な機能SDK をカスタマイズする際、device OS には FreeRTOS を選択し、他のパラメーターはデフォルト値のままにします。 必要に応じて Advanced features を選択します。 詳細については、「C Link SDK の取得」をご参照ください。
- ESP8266 に適合させた添付の posix_port.c ファイルをダウンロードします。このファイルを使用して、C Link SDK の
portfiles/aiot_port/posix_port.cを置き換えます。 - C Link SDK と ESP-IDF の両方に mbedtls ライブラリが含まれています。ライブラリの競合を避けるため、
$IDF_PATH/components/C-SDK/core/sysdep/core_adapter.cファイルを修正し、CORE_ADAPTER_MBEDTLS_ENABLEDマクロを無効にします。 - SDK を
$IDF_PATH/componentsディレクトリにコピーします。次に、SDK ディレクトリにcomponent.mkという名前のビルドファイルを作成し、次の内容を記述します。COMPONENT_ADD_INCLUDEDIRS := core core/sysdep core/utils components/ota COMPONENT_SRCDIRS := core core/utils core/sysdep components/ota portfiles/aiot_port/ external
- C Link SDK を取得します。
-
デモアプリケーションの移植
examples/wifi/simple_wifi/のサンプルを修正して、Message Queuing Telemetry Transport (MQTT) ベースのクラウド移行をデモンストレーションできます。ネイティブのデモでは、Wi-Fi ステーションモードで特定の Wi-Fi ホットスポットにアクセスする方法が示されています。これを利用して、添付ファイルのソースファイルをダウンロードし、
simple_wifi.cファイルを上書きできます。 -
設定、コンパイル、および書き込み
examples/wifi/simple_wifi/プロジェクトディレクトリでmake menuconfigコマンドを実行して、プロジェクトを設定します。SDK tool configurationメニューで、Compiler toolchain path/prefixがxtensa-lx106-elf-に設定されていることを確認します。Serial flasher configメニューで、ESP8266 開発ボードのデフォルトのシリアルポート名を変更します。Example Configurationメニューで、ステーションモードを選択し、WiFi SSID、WiFi パスワード、および最大リトライ回数のパラメーターを設定します。Component config>ESP8266-specificを選択します。表示されたページで、Main task stack sizeを4096に設定し、変更を保存して終了します。
mbedTLS の設定
TLS キー交換方式に事前共有鍵 (PSK) を使用するには、次の手順に従います。
Component config>mbedTLSを選択します。表示されたページで、TLS Key Exchange Methodsをクリックします。Enable pre-shared-key ciphersuitesスイッチをオンにします。- mbedtls コンポーネントの
component.mkファイルにCFLAGS += -DMBEDTLS_PSK_MAX_LEN=64を追加します。
以下の情報で設定を指定します。
COMPONENT_ADD_INCLUDEDIRS := port/include mbedtls/include port/esp8266/include COMPONENT_SRCDIRS := mbedtls/library port 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 size=0x0e5fc ( 58876) map I (300) esp_image: segment 2: paddr=0x00081e1c vaddr=0x3ffe8000 size=0x00a3c ( 2620) load I (301) esp_image: segment 3: paddr=0x00082860 vaddr=0x40100000 size=0x00a50 ( 2640) load I (308) esp_image: segment 4: paddr=0x000832b8 vaddr=0x40100a50 size=0x05854 ( 22612) load I (325) boot: Loaded app from partition at offset 0x10000 I (349) system_api: Base MAC address is not set, read default base MAC address from EFUSE I (359) system_api: Base MAC address is not set, read default base MAC address from EFUSE phy_version: 1155.0, 6cb3053, Nov 11 2019, 17:31:08, RTOS new I (413) phy_init: phy ver: 1155_0 I (418) reset_reason: RTC reset 1 wakeup 0 store 0, reason is 1 I (425) simple wifi: ESP_WIFI_MODE_STA I (473) simple wifi: wifi_init_sta finished. I (479) simple wifi: connect to ap SSID:C_SDK_Test password: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, type: 2 I (2320) event: sta ip: 192.168.0.101, mask: 255.255.255.0, gw: 192.168.0.1 I (2329) simple wifi: got ip:192.168.0.101 I (2334) simple wifi: connected to ap SSID:C_SDK_Test password:1234abcd I (2342) simple wifi: Start linkkit main [1.990][LK-0313] MQTT user calls 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 establish mbedtls connection with server(host='a13FNXXXXXX.itls.cn-shanghai.aliyuncs.com', port=[1883]) [2.450][LK-0313] MQTT connect success in 460 ms AIOT_MQTTEVT_CONNECT [2.450][LK-0309] sub: /sys/a13FNXXXXXX/mqtt_basic_demo/thing/event/+/post_reply [2.460][LK-0309] pub: /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"} heartbeat response heartbeat response heartbeat response ......ログ
I (2342) simple wifi: Start linkkit mainメッセージは、C SDK が開始されたことを示します。[LK-XXXX][2.450][LK-0313] MQTT connect success in 460 msメッセージは、MQTT 接続が成功したことと、接続にかかった時間を示します。