使用esp8266模块烧写arduino 程序

ESP8266とAWS IoTの接続について

 

環境

ESP8266(SWITCHSCIENCE ESPr Developer ESP-WROOM-02開発ボード)

AT version:1.7.0.0(Aug 16 2018 00:57:04)

SDK version:3.0.0(d49923c)

compile time:Aug 23 2018 16:58:12

Bin version(Wroom 02):v1.7.0

 Arduino IDE

Version:1.8.7

 

Arduino IDEの準備

以下のURLよりArduino IDEをダウンロード

https://www.arduino.cc/en/Main/Software

今回は「ARDUINO 1.8.7  Windows ZIP file for non admin install」を使用しました。

ボード(ESP8266)の設定

Arduino IDEを起動して以下の手順でボードの設定を実行

  • ファイル >> 環境設定を開く

使用esp8266模块烧写arduino 程序_第1张图片

  • 追加のボードマネージャのURLに以下のアドレスを追加

http://arduino.esp8266.com/stable/package_esp8266com_index.json

使用esp8266模块烧写arduino 程序_第2张图片

  • ツール >> ボード >> ボードマネージャから以下のボードをインストール((工具> > >板管理器安装以下的板)

esp8266 by ESP8266 Community バージョン2.4.2

  • ツール >> ボードから「Generic ESP8266 Module」を選択(“工具”>从板上选择“GenericESP 8266 Midule”)
  • 以下の3つのライブラリをそれぞれダウンロードして解凍したものをArduino IDEのlibrariesディレクトリにコピーします。(将以下3个库下载并解冻的东西复制到ARduino ideideideies目录。)

・aws-mqtt-websockets

https://github.com/odelot/aws-mqtt-websockets

・aws-sdk-arduino

https://github.com/svdgraaf/aws-sdk-arduino

・Paho MQTT for Arduino

https://projects.eclipse.org/projects/technology.paho/downloads

  • スケッチ >> ライブラリをインクルード >> ライブラリを管理から以下の1つのライブラリをインストール(素描> >程序库从管理库开始安装以下一个库)

・WebSockets for Arduino

検索で「WebSockets for Arduino」でヒットしたWebSockets for Arduino(Server + Client)のバージョン2.1.0をインストール

AWS-SDK-ESP8266

検索で「AWS-SDK-ESP8266」でヒットしたバージョン1.0.0をインストール

  • ツールから以下のようにボードの設定を実行(用工具从以下执行板的设置)

使用esp8266模块烧写arduino 程序_第3张图片 Upload Speed : 115200

CPU Frequency : 160MHz

Crystal Frequency : 26MHz

Flash Size : 2M(1M SPIFFS)

Flash Mode : QIO

Flash Frequency : 40MHZ

Reset Method : ck

Debug port : Disabled

Debug Level : なし(无)

IxIP Variant : v2 Lower Memory

VTables : Flash

Builtin Led : 2

Erase Flash : All Flash Contents

シリアルポート : OSで認識したポート番号

 

 

 

以下の製品の設定

https://www.amazon.co.jp/HiLetgoR-モノのインターネット開発ボード-無線受信発信モジュール-WIFIモジュール-Arduinoに適用/dp/B072K7P4JL/ref=sr_1_3_sspa?ie=UTF8&qid=1542672230&sr=8-3-spons&keywords=ESP8266&psc=1&smid=A1XEAMF1H64GNM

使用esp8266模块烧写arduino 程序_第4张图片

インストール手順:(安装程序:)

1、IDEをダウンロード(下载IDE)

2、IDEをインストール(安装IDE)

3、arduino IDEを設置:

Go to File->Preferences。URLをコピーして、ESPボードマネージャの拡張機能を入手:arduino.esp8266.com/stable/package_esp8266com_index.json

4、Go to Tools > Board > Board Manager> Type "esp8266"。ESP8266をダウンロードしてインストールする(下载并安装ESP 8266)

5、チップを設置:(设置芯片)

Tools -> Board -> NodeMCU 1.0 (ESP-12E Module)

Tools -> Flash Size -> 4M (3M SPIFFS)

Tools -> CPU Frequency -> 80 Mhz

Tools -> Upload Speed -> 921600

Tools-->Port--> (whatever it is)

6、Githubで32ビットフラッシャーexeをダウンロードして実行する(godubでnodemcu / nodemcu-flasher / tree / master /を検索する)(在Gitrob下载32位faccexe(在gidub搜索nidemcu / nidemcu-fasher / tree / master /的))

github.com/nodemcu/nodemcu-flasher/tree/master/Win32/Release

または、64ビットフラッシャーexeをダウンロードして実行してください:

github.com/nodemcu/nodemcu-flasher/tree/master/Win64/Release

7. Arduino IDEで、旧式のBlinkプログラムを探します。 ロード、コンパイル、アップロード。

(Arduino IDE,老式的Blink程序找。卢德编译,提高卢德。)

8. FILE> EXAMPLES> ESP8266> BLINKに進み、点滅を開始します。

ウェブサイトへのデータダウンロードアクセス:(到网站的数据下载访问:)

http://www.nodemcu.com/index_en.html

ファームウェアリンク:(固件链接)

https://github.com/nodemcu/nodemcu-firmware

ご注意:ドライバを必要な場合、または使用時に問題が発生した場合は、当社にご連絡ください。 私たちはお客様に質の高いサービスを提供しています。

(注意:如果需要驱动程序,或使用时发生问题,请联系本公司。我们提供给客户质量高的服务。)

 

 

 

 

ESP8266へサンプルコードの書き込み  

スケッチに以下のコードを入力します。

//#### 从这里开始 ####//

#include

#include

#include

#include

//AWS

#include "sha256.h"

#include "Utils.h"

//WEBSockets

#include

#include

//MQTT PAHO

#include

#include

#include

#include

//AWS MQTT Websocket

#include "Client.h"

#include "AWSWebSocketClient.h"

#include "CircularByteBuffer.h"

 

extern "C" {

#include "user_interface.h"

}

 

//AWS IOT config, change these:

char wifi_ssid[]       = "WiFiのSSID";

char wifi_password[]   = "WiFiのパスワード";

char aws_endpoint[]    = "awt17y725ehng-ats.iot.ap-northeast-1.amazonaws.com";

char aws_key[]         = "AKIAIHCQKJ2JFXBGNPEA";

char aws_secret[]      = "ok8B/b5PSRuZjBVFQzQA4/1m3MMhvRrRzU4lB5aN";

char aws_region[]      = "ap-northeast-1";

const char* aws_topic  = "$aws/things/espwroom02/shadow/update";

int port = 443;

 

//MQTT config

const int maxMQTTpackageSize = 512;

const int maxMQTTMessageHandlers = 1;

 

ESP8266WiFiMulti WiFiMulti;

wl_status_t prevWifiStatus = WL_IDLE_STATUS;

 

AWSWebSocketClient awsWSclient(1000);

 

IPStack ipstack(awsWSclient);

MQTT::Client client(ipstack);

 

//# of connections

long connection = 0;

 

//generate random mqtt clientID

char* generateClientID () {

  char* cID = new char[23]();

  for (int i = 0; i < 22; i += 1)

    cID[i] = (char)random(1, 256);

  return cID;

}

 

//count messages arrived

int arrivedcount = 0;

 

//callback to handle mqtt messages

void messageArrived(MQTT::MessageData& md)

{

  MQTT::Message &message = md.message;

  Serial.print("Message ");

  Serial.print(++arrivedcount);

  Serial.print(" arrived: qos ");

  Serial.print(message.qos);

  Serial.print(", retained ");

  Serial.print(message.retained);

  Serial.print(", dup ");

  Serial.print(message.dup);

  Serial.print(", packetid ");

  Serial.println(message.id);

  Serial.print("Payload ");

  char* msg = new char[message.payloadlen + 1]();

  memcpy (msg, message.payload, message.payloadlen);

  Serial.println(msg);

  delete msg;

}

 

//connects to websocket layer and mqtt layer

bool connect () {

  if (client.isConnected ()) {

    client.disconnect ();

  }

  //delay is not necessary... it just help us to get a "trustful" heap space value

  delay (1000);

  Serial.print (millis ());

  Serial.print (" - conn: ");

  Serial.print (++connection);

  Serial.print (" - (");

  Serial.print (ESP.getFreeHeap ());

  Serial.println (")");

  int rc = ipstack.connect(aws_endpoint, port);

  if (rc != 1) {

    Serial.println("error connection to the websocket server");

    return false;

  } else {

    Serial.println("websocket layer connected");

  }

 

  Serial.println("MQTT connecting");

  MQTTPacket_connectData data = MQTTPacket_connectData_initializer;

  data.MQTTVersion = 4;

  char* clientID = generateClientID ();

  data.clientID.cstring = clientID;

  rc = client.connect(data);

  delete[] clientID;

  if (rc != 0) {

    Serial.print("error connection to MQTT server");

    Serial.println(rc);

    return false;

  }

  Serial.println("MQTT connected");

  return true;

}

 

//subscribe to a mqtt topic

void subscribe () {

  //subscript to a topic

  int rc = client.subscribe(aws_topic, MQTT::QOS0, messageArrived);

  if (rc != 0) {

    Serial.print("rc from MQTT subscribe is ");

    Serial.println(rc);

    return;

  }

  Serial.println("MQTT subscribed");

}

 

//send a message to a mqtt topic

void sendmessage () {

  //send a message

  MQTT::Message message;

  char buf[100];

  strcpy(buf, "{\"state\":{\"reported\":{\"LANG\":\"日本\"},\"desired\":{\"test\":\"TEST_DATA\"}}}");

  message.qos = MQTT::QOS0;

  message.retained = false;

  message.dup = false;

  message.payload = (void*)buf;

  message.payloadlen = strlen(buf) + 1;

  int rc = client.publish(aws_topic, message);

}

 

void setup() {

  wifi_set_sleep_type(NONE_SLEEP_T);

  Serial.begin (115200);

  delay (2000);

  Serial.setDebugOutput(1);

 

  //fill with ssid and wifi password

  WiFiMulti.addAP(wifi_ssid, wifi_password);

  Serial.println ("connecting to wifi");

  wl_status_t wifiStatus = WiFiMulti.run();

  while (wifiStatus != WL_CONNECTED) {

    delay(100);

    if ( prevWifiStatus != wifiStatus ) {

      prevWifiStatus = wifiStatus;

    } else {

      if ( wifiStatus == WL_NO_SHIELD ) {

        Serial.println ("*WL_NO_SHIELD*");

      } else if (wifiStatus == WL_IDLE_STATUS) {

        Serial.println ("*WL_IDLE_STATUS*");

      } else if (wifiStatus == WL_NO_SSID_AVAIL) {

        Serial.println ("*WL_NO_SSID_AVAIL*");

      } else if (wifiStatus == WL_SCAN_COMPLETED) {

        Serial.println ("*WL_SCAN_COMPLETED*");

      } else if (wifiStatus == WL_CONNECT_FAILED) {

        Serial.println ("*WL_CONNECT_FAILED*");

      } else if (wifiStatus == WL_CONNECTION_LOST) {

        Serial.println ("*WL_CONNECTION_LOST*");

      } else if (wifiStatus == WL_NO_SHIELD) {

        Serial.println ("*WL_NO_SHIELD*");

      } else if (wifiStatus == WL_DISCONNECTED) {

        Serial.println ("*WL_DISCONNECTED*");

      }

      wifiStatus = WiFiMulti.run();

    }

  }

  Serial.println ("\nconnected");

  Serial.println("SSID: ");

  Serial.println(WiFi.SSID());

  Serial.println("IP address: ");

  Serial.println(WiFi.localIP());

 

  //fill AWS parameters

  awsWSclient.setAWSRegion(aws_region);

  awsWSclient.setAWSDomain(aws_endpoint);

  awsWSclient.setAWSKeyID(aws_key);

  awsWSclient.setAWSSecretKey(aws_secret);

  awsWSclient.setUseSSL(true);

 

  if (connect ()) {

    Serial.println("subscribe() START: ");

    subscribe ();

    Serial.println("subscribe() END: ");

    Serial.println("sendmessage() START: ");

    sendmessage ();

    Serial.println("sendmessage() END: ");

  }

}

 

void loop() {

  //keep the mqtt up and running

  if (awsWSclient.connected ()) {

    client.yield(50);

  } else {

    //handle reconnection

    if (connect ()) {

      subscribe ();

    }

  }

}

//#### ここまで ####//

なお、コード内にてAWS IoTとWiFiへの接続のために以下の情報をコード内へ組み込んであります。

(另外,在代码内为了AWIoT和WiFi的连接,将以下的信息编入代码内)

aws_endpoint

awt17y725ehng-ats.iot.ap-northeast-1.amazonaws.com

aws_key

AKIAIHCQKJ2JFXBGNPEA

aws_secret

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

aws_region

ap-northeast-1

aws_topic

$aws/things/espwroom02/shadow/update

wifi_ssid

インターネットに接続できる環境のSSID

wifi_password

上記WiFiのパスワード

WifiについてはHidden SSIDの環境への接続はできませんでした。ANY接続を許可したWiFiが必要と思われます。(关于Wifi,不能连接Hidden SSID的环境。允许无线连接的WiFi需要)

 

上記コードをコンパイルの上ESP8266へ書き込むことでESP8266の電源を投入後にAWS IoTコンソールにテキストメッセージが送信されることが確認できました。(通过将上述代码写入转换器上ESP 8266,通过投入ESP 8266的电源后,确认了文本信息将在AWW IoT转换器上发送。)

你可能感兴趣的:(使用esp8266模块烧写arduino 程序)