โดย เดนิส นูติว
เมื่อเร็วๆ นี้ ผมซื้อ NodeMCU จาก AliExpress ประมาณ $4 เหตุผลคืออยากรู้ว่าทั้งหมดนี้ buzz เกี่ยวกับ ESP8266 คืออะไร
NodeMCU เป็น IoT platform โอเพนซอร์ส ประกอบด้วย firmware ที่รันบน ESP8266 Wi-Fi SoC จาก Espressif Systems และ hardware ที่พัฒนาจาก ESP-12 module
Source: ESP8266 Datasheet
เปรียบเทียบกับ Arduino UNO ESP8266 ของผมชนะเลยด้าน CPU power และราคา
ESP8266 เร็วกว่า 500% และถูกกว่า 82% เทียบกับ Arduino ESP8266 ยังมี WiFi connectivity ด้วย
ผมประหลาดใจมากตอนไปเว็บ Espressif สำหรับ ESP8266 มี documentation และ resources เยอะมาก ที่สามารถใช้ได้ เช่น มี Android application ที่บอก ESP8266 ให้เชื่อมต่อ WiFi ของคุณ App ส่ง SSID และ password เป็น packets ESP8266 สนิฟฟ์พวกมัน และเชื่อมต่อ WiFi ของคุณ นี่เรียกว่า SmartConfig และถูกประดิษฐ์โดย Texas Instruments
ในบทความนี้ ผมจะแนะนำคุณ setup และรันตัวอย่าง Smart Config จาก Espressif RTOS SDK
สิ่งที่คุณต้องการ:
- คอมพิวเตอร์สมัยใหม่
- NodeMCU board กับ ESP12-E
- VirtualBox (https://www.virtualbox.org/wiki/Downloads)
- Ubuntu Server LTS (https://www.ubuntu.com/download/server)
ตั้งค่า VirtualBox สำหรับการพัฒนา
- ดาวน์โหลด VirtualBox และติดตั้ง Ubuntu Server ควรทำได้ง่าย แตถ้าไม่รู้ Google หรือดู graphic step-by-step guide ได้ การติดตั้ง OS เป็น skill ที่ดีที่ควรมี (Tip: ตอน VirtualBox prompt ให้เลือก disk ทำให้เป็น dynamically allocated และอย่างน้อย 50GB จะช่วยหลีกเลี่ยดปัญหาต่อไป)
- ให้แน่ใจว่าเข้าถึงอินเทอร์เน็ตจากภายใน virtual machine ได้ และตั้งค่า DNS server:
Right click the machine then Settings -> Network
เพื่อตั้งค่า DNS server ดูตัวอย่างนี้
Example: dns-nameservers 8.8.8.8 8.8.4.4 ถ้าคุณ ping Google ได้ แสดงว่าพร้อมแล้ว!
- (Optional) ติดตั้ง OpenSSH และ Samba server จะทำให้ชีวิตง่ายขึ้น
- (Optional) เปิดใช้ port forwarding เพื่อ SSH เข้า virtual machine โดยตรง ต้อง enable port forwarding เช่น map port 2222 บน host machine ไป port 22 ของ virtual machine
Enable Port forwarding: Settings -> Network -> Port Forwarding
ถ้าเปิด port forwarding แล้ว คุณสามารถ SSH เข้า virtual machine จาก host machine ได้เหมือนภาพด้านล่าง
FIG1: ssh -p 2020 denis@localhost
หมายเหตุ: ถ้าคุณบน Windows ต้องมี Putty เพื่อ SSH เข้า virtual machine
- เสียบ NodeMCU และรันคำสั่ง:
tail -f /var/log/kern.log
ควรบอกว่า device ถูกระบุเป็น /dev/ttyUSB0 ถ้าอะไรไม่เกิดขึ้น คุณต้องเพิ่ม USB ให้ virtual machine หลังเพิ่ม USB ถอดและเสียบอุปกรณ์ใหม่
Adding USB: Settings -> Ports -> USB
ถ้าคุณถึงจุดนี้และทุกอย่างทำงาน ยินดีด้วย! ตอนนี้คุณพร้อม compile SDK และรันตัวอย่าง SmartConfig แม้แต่ยิง tweet ให้ผมได้ที่ https://twitter.com/metonymyqt
Compile SDK และ Flash board
- ติดตั้ง required packages (ดังด้านล่าง) ข้อมูลนี้มีใน readme.md ของ SDK ด้วย
sudo apt-get install make unrar-free autoconf automake libtool gcc g++ gperf flex bison texinfo gawk ncurses-dev libexpat-dev python-dev python python-serial sed git unzip bash help2man wget bzip2 libtool-bin
- สร้างโฟลเดอร์ใหม่และเข้าไป:
mkdir Development && cd Development - Clone Open SDK: https://github.com/pfalcon/esp-open-sdk
git clone --recursive https://github.com/pfalcon/esp-open-sdk.git
- Run make:
make
คำเตือน: ขั้นตอนนี้จะใช้เวลานาน โปรดอดทน บน VM ของผมเสร็จหลัง 50 นาที บนของคุณอาจมากหรือน้อยกว่า แตก่อน run make ให้แน่ใจว่า เชื่อมต่ออินเทอร์เน็ต และ DNS ตั้งค่าถูกต้อง วิธีดีที่สุดคือ ping Google หรือเว็บอื่นถ้า Google ถูกบล็อกในภูมิภาค
Successful ping command: $ ping medium.com
ถ้า ping สำเร็จ minimize windows และดูรายการ TV โปรด กลับมาหลัง 40 นาที (แต่ให้แน่ใจคอมพิวเตอร์ไม่ sleep)
หลังจาก SDK build สำเร็จ คุณจะเห็นข้อความบอกให้ใส่บางอย่างใน path ทำได้โดยรัน:
echo 'export PATH=/home/denis/Development/esp-open-sdk/xtensa-lx106-elf/bin:$PATH' >> ~/.profile
คำสั่งจะ append string ไป ~/.profile file ตอนนี้รันคำสั่ง:
xtensa-lx106-elf-gcc --version
ถ้าคำสั่งรันสำเร็จ แสดงว่าพร้อม!
- ทดสอบ board
เสียบ NodeMCU และรัน lsusb verify ว่าอุปกรณ์เชื่อมต่อ หลังจากนั้น รัน esptool.py chip_id คุณควรเห็น chip id ของ board
_esptool.py chipid
- Clone ESP8266_RTOS_SDK
git clone https://github.com/espressif/ESP8266_RTOS_SDK.git
- Export SDK path และ SDK/BIN path ด้วยคำสั่งด้านล่าง
echo 'export SDK_PATH=/home/denis/Development/ESP8266_RTOS_SDK' >> ~/.profile
echo 'export BIN_PATH=/home/denis/Development/ESP8266_RTOS_SDK/bin' >> ~/.profile
- Compile ตัวอย่าง SmartConfig
cd /home/denis/Development/ESP8266_RTOS_SDK/examples/smart_config/
chmod +x ./gen_misc.sh
./gen_misc.sh
ตอนนี้ยอมค่า default จนกว่าจะถาม SPI_SIZE_MAP นี่คือที่คุณเลือก 4 เพราะ NodeMCU มี flash size 32Mbit ซึ่งแปลงเป็น 4MB _คุณสามารถเลือก SPISPEED 3=80Mhz ได้
คุณจะเห็นอย่างนี้:
!!!SDK_PATH: /home/denis/Development/ESP8266_RTOS_SDK
BIN_PATH: /home/denis/Development/ESP8266_RTOS_SDK/bin
No boot needed.
Generate eagle.flash.bin and eagle.irom0text.bin successully in BIN_PATH
eagle.flash.bin — — — →0x00000
eagle.irom0text.bin — →0x20000!!!
- Flash board
cd $BIN_PATH
esptool.py erase_flash
esptool.py write_flash 0x00000 $BIN_PATH/eagle.flash.bin 0x20000 $BIN_PATH/eagle.irom0text.bin 0x3FC000 $BIN_PATH/esp_init_data_default.bin
ตอนนี้ ถ้าคุณ reset board คุณควรไม่เห็น LED กระพริบ
- ใช้ Phone Application
- Android Application
- iPhone Application
ScreenShot from my Android Device
เปิด Application ตรวจสอบว่าเชื่อมต่อ WiFi AP อยู่ ใส่ password และกด confirm หลังจากไม่กี่วินาที ESP8266 ควรเชื่อมต่อ AP ของคุณ นั่นคือทั้งหมด ยินดีด้วยที่ถึงจุดสิ้นสุด!
ถ้าอยากพัฒนาเพิ่มด้วย ESP8266-RTOS-SDK โปรดเยี่ยมชมเว็บไซต์ทางการ จะพบ resources และ documentation เยอะมาก และดูตัวอย่างอื่นๆ ในโฟลเดอร์ SDK
ขอบคุณมากสำหรับเวลาอ่าน ถ้าอยากติดต่อ ผมอยู่ที่ Twitter: MetonymyQT
Resources
- ESP8266 Overview
- ESP8266 Resources
- FreeRTOS Website
เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพนซอร์สของ freeCodeCamp ช่วยให้ผู้คน 40,000+ คนได้งานเป็นนักพัฒนา เริ่มต้นเลย