すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:SDK の ESP8266 への移植

最終更新日:Jun 22, 2026

このガイドでは、C SDK 4.0 を ESP8266 開発ボードに移植し、デモアプリケーションを使用して Alibaba Cloud IoT Platform に接続する方法について説明します。

事前準備

SDK を移植するには、次の項目を準備する必要があります。

  • 開発ボード。このトピックでは、公式の ESP8266EX_Demo_Board である ESP-LAUNCHER を使用します。
  • USB ケーブル。
  • Windows、Linux、または macOS を実行するコンピューター。このガイドでは、ホスト開発プラットフォームとして macOS を使用します。
説明 他のオペレーティングシステムで開発環境をセットアップする方法の詳細については、ESP8266_RTOS_SDK の「はじめに」をご参照ください。

開発環境のセットアップ

説明 開発環境のセットアップと ESP8266 が期待どおりに動作することを確認するための以下の手順は、参考情報です。問題が発生した場合は、開発ボードのサプライヤーにお問い合わせください。

環境設定を迅速に行うには、ESP8266 RTOS SDK Readme をお読みください。以下の手順では、macOS で環境をセットアップする方法について説明します。

  1. 必須ソフトウェアのインストール

    sudo easy_install pip コマンドを実行して pip システムをインストールします。

    sudo pip install pyserial コマンドを実行して pySerial モジュールをインストールします。

  2. 公式 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 より前のバージョンについては、プロセスを適宜調整して統合を完了できます。
  3. ツールチェーンとコンパイルツールのインストール

    手動で 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
    }
  4. 開発ボードの接続

    macOS でシリアルポート名を確認するには、ls /dev/cu.* コマンドを実行します。このデモでのシリアルポート名は /dev/cu.usbserial-AH06UHLH です。

  5. 設定、コンパイル、書き込み、およびモニタリング

    1. cd examples/wifi/simple_wifi/examples/wifi/simple_wifi/すべての構成はプロジェクトのパスで実行する必要があるため、まず先に示したコマンドを実行してこのディレクトリに移動してください。
    2. ESP-IDF で make menuconfig を実行してプロジェクトを設定します。詳細については、後述の移植方法をご参照ください。
    3. 設定が完了したら、make all コマンドを実行してファームウェアをコンパイルします。
    4. コンパイルが完了したら、make flash コマンドを実行してファームウェアを書き込みます。開発ボードがダウンロードモードになっていることを確認してください。
    5. プロジェクトが書き込まれたら、make monitor コマンドを実行してシリアルポートをモニターします。開発ボードが動作モードになっていることを確認してください。

    これで、ESP8266 開発環境のセットアップが完了し、Wi-Fi ステーションのサンプルのコンパイルと書き込みに成功しました。

    説明 次に進む前に、開発ボードが正しく動作していることを確認してください。
  6. 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 コードをアプリのコードから分離できます。次の手順を実行します。

  1. カスタムコンポーネントとしての 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
  2. デモアプリケーションの移植

    examples/wifi/simple_wifi/ のサンプルを修正して、Message Queuing Telemetry Transport (MQTT) ベースのクラウド移行をデモンストレーションできます。

    ネイティブのデモでは、Wi-Fi ステーションモードで特定の Wi-Fi ホットスポットにアクセスする方法が示されています。これを利用して、添付ファイルのソースファイルをダウンロードし、simple_wifi.c ファイルを上書きできます。

  3. 設定、コンパイル、および書き込み

    examples/wifi/simple_wifi/ プロジェクトディレクトリで make menuconfig コマンドを実行して、プロジェクトを設定します。

    1. SDK tool configuration メニューで、Compiler toolchain path/prefixxtensa-lx106-elf- に設定されていることを確認します。
    2. Serial flasher config メニューで、ESP8266 開発ボードのデフォルトのシリアルポート名を変更します。
    3. Example Configuration メニューで、ステーションモードを選択し、WiFi SSID、WiFi パスワード、および最大リトライ回数のパラメーターを設定します。
    4. Component config > ESP8266-specific を選択します。表示されたページで、Main task stack size4096 に設定し、変更を保存して終了します。

    mbedTLS の設定

    TLS キー交換方式に事前共有鍵 (PSK) を使用するには、次の手順に従います。

    1. Component config > mbedTLS を選択します。表示されたページで、TLS Key Exchange Methods をクリックします。
    2. Enable pre-shared-key ciphersuites スイッチをオンにします。
    3. 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 allmake flash を実行してコンパイルと書き込みを行います。

  4. アプリケーションの実行とログの表示

    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 接続が成功したことと、接続にかかった時間を示します。