โครงการ Micropython เพื่อปลดปล่อยซ็อกเก็ต Sonoff WiFi Smart จากคลาวด์โดยเรียกใช้เว็บเซิร์ฟเวอร์บนอุปกรณ์
อุปกรณ์ทดสอบ:
อุปกรณ์จะทำสิ่งนี้ในทุกการบูต:
บันทึกบางอย่างเกี่ยวกับฟังก์ชันการจับเวลา:
อุปกรณ์พยายามเปิด/ปิดการเปิด/ปิดตามตัวจับเวลาปัจจุบัน แม้หลังจากความล้มเหลวของพลังงาน อย่างไรก็ตามสิ่งนี้ใช้งานได้อย่างถูกต้องหากการตั้งค่าเวลาปัจจุบันอย่างถูกต้องโดย RTC เวลาปัจจุบันจะถูกดึงออกมาโดยอัตโนมัติจากอินเทอร์เน็ตผ่าน NTP SYNC ที่บูตและทำซ้ำหลังจากเริ่มต้น แน่นอนว่าสิ่งนี้สามารถใช้งานได้หากอุปกรณ์เชื่อมต่อกับอินเทอร์เน็ตผ่าน WiFi;)
คุณสามารถ "เขียนทับ" ตัวจับเวลาปัจจุบันได้ตลอดเวลาโดยกดปุ่มบนอุปกรณ์ การเขียนทับนี้จะยังคงอยู่จนกว่าจะจับเวลาต่อไป หลังจากความล้มเหลวของพลังงานข้อมูล "overwrite" จะถูกลบและตัวจับเวลาควบคุมพลังงานอีกครั้ง
สิ่งที่จะนำไปใช้ในคุณสมบัติใกล้:
ไกลออกไป:
หน้าเว็บมีลักษณะเช่นนี้:
ภาพหน้าจอที่มีอยู่ทั้งหมดสามารถพบได้ที่นี่:
3.3V , GND , TX และ RXข้อมูลที่ดีมากในการเริ่มต้นคุณพบได้ที่นี่:
config.h และรวบรวม Yaota8266 และเฟิร์มแวร์_config_wifi.json โคลนแหล่งที่มาและตั้งค่า VirtualEnV ผ่าน pipenv :
~ $ git clone https://github.com/jedie/micropython-sonoff-webswitch.git
~ $ cd micropython-sonoff-webswitch
~ /micropython-sonoff-webswitch$ make updateหากต้องการดูเป้าหมายทั้งหมดเพียงแค่โทรทำเช่น:
~ /micropython-sonoff-webswitch$ make
make targets:
help This help page
docker-pull pull docker images
docker-build pull and build docker images
update update git repositories/submodules, virtualenv, docker images and build local docker image
thonny run Thonny IDE to access the Micropython REPL (Python prompt)
test Run pytest
micropython_shell start a bash shell in docker container " local/micropython:latest "
unix-port-shell start micropython unix port interpreter
build-firmware-combined compiles the micropython non-OTA firmware and store it here: /build/firmware-combined.bin
build-ota-firmware compiles the micropython OTA firmware and store it here: /build/firmware-ota.bin
yaota8266-rsa-keys Pull/build yaota8266 docker images and Generate RSA keys and/or print RSA modulus line for copy & paste into config.h
yaota8266-build Compile ota bootloader and store it here: build/yaota8266.bin
verify Check RSA key, config.h and compiled " yaota8266.bin "
erase-flash call esptool.py erase_flash
flash-firmware-combined Flash build/firmware-combined to location 0x3c000 via esptool.py
flash-yaota8266 Flash build/yaota8266.bin to location 0x0 via esptool.py
flash-ota-firmware Flash build/firmware-ota.bin to location 0x3c000 via esptool.py
hard-ota Start yaota8266 live-ota to hard-OTA Update the firmware file build/firmware-ota.bin.ota
soft-ota Start soft-OTA updates: Compile .py to .mpy and push missing/updated files ( * .mpy, * .css, * .html etc.) to the device
miniterm Low level debug device via miniterm.py (from pyserial) to /dev/ttyUSB0 คุณต้องสร้าง docker-yaota8266/yaota8266/config.h และแทรกบรรทัด RSA Modulus ของคุณ
เพื่อสร้างคีย์ RSA ของคุณและแสดงบรรทัดที่จำเป็นสำหรับ config.h เพียงโทร:
~ /micropython-sonoff-webswitch$ make yaota8266-rsa-keys
...
Copy & paste this RSA modulus line into your config.h:
----------------------------------------------------------------------------------------------------
# define MODULUS "xcex4axafx65x0dx4ax74xdaxc1x30x59x80xcfxddxe8x2ax2ex1dxf7xa8xc9x6cxa9x4ax2cxb7x8ax5ax2ax25xc0x2bx7bx2fx58x4cxa8xcbx82x07x06x08x7exffx1fxcex47x13x67x94x5fx9axacx5ex7dxcfx63xf0x08xe9x51x98x95x01"
----------------------------------------------------------------------------------------------------ไฟล์คีย์ RSA ที่สร้างขึ้นอยู่ที่นี่:
docker-yaota8266/yaota8266/ota-client/priv.keydocker-yaota8266/yaota8266/ota-client/pub.keyคุณควรสำรองไฟล์วิทยานิพนธ์
หลังจากที่คุณได้สร้างคีย์ RSA ของคุณเองและ config.h คุณสามารถรวบรวม yaota8266.bin และ firmware-ota.bin , เช่น:
~ /micropython-sonoff-webswitch$ make yaota8266-build
~ /micropython-sonoff-webswitch$ make build-ota-firmwareไฟล์ที่รวบรวมจะถูกเก็บไว้ที่นี่:
~/micropython-sonoff-webswitch/build/yaota8266.bin~/micropython-sonoff-webswitch/build/firmware-ota.bin <-สำหรับการกระพริบ~/micropython-sonoff-webswitch/build/firmware-ota.bin.ota <-ใช้ในกระบวนการ Hard-OTAESP8266 จะต้องใส่ในโหมดการเขียนโปรแกรมก่อนที่จะอัปโหลดเฟิร์มแวร์ เพื่อนำ ESP8266 เข้าสู่โหมดการเขียนโปรแกรม:
บางทีคุณอาจต้องให้สิทธิ์แก่ผู้ใช้ในการเข้าถึงพอร์ต USB เช่น: sudo usermod -a -G dialout $USER มิฉะนั้นคุณจะได้รับข้อความแสดงข้อผิดพลาดเช่น: Permission denied: '/dev/ttyUSB0'
ตอนนี้ esptool สามารถใช้งานได้ แต่สำหรับการดำเนินการ เดียว เท่านั้น! หลังจากการโทร Esptool แต่ละครั้งคุณต้องถอดอุปกรณ์ออกจาก USB และทำซ้ำขั้นตอนนี้!
ครั้งแรกที่หน่วยความจำแฟลชต้องถูกลบโทร:
~ /micropython-sonoff-webswitch$ make erase-flash หลังจาก erase-flash และหลังจากที่คุณเรียกว่า make yaota8266-build และ make build-ota-firmware คุณสามารถแฟลชอุปกรณ์ของคุณ:
# put into Programming Mode and call:
~ /micropython-sonoff-webswitch$ make flash-yaota8266
# Again, put into Programming Mode and call:
~ /micropython-sonoff-webswitch$ make flash-ota-firmwareImportand : คำสั่ง Flash เหล่านี้มีไว้สำหรับอุปกรณ์ Sonoff และอาจ ไม่ทำงาน กับอุปกรณ์ ESP8266 อื่น ๆ !
สำหรับอุปกรณ์อื่น ๆ เพียงแค่ใช้ esptool โดยตรงเช่น:
~ /micropython-sonoff-webswitch$ pipenv run esptool.py --port /dev/ttyUSB0 write_flash 0 build/yaota8266.bin
~ /micropython-sonoff-webswitch$ pipenv run esptool.py --port /dev/ttyUSB0 write_flash 0x3c000 build/firmware-ota.binบันทึก:
ไฟล์ firmware-ota.bin ต้องแฟลชด้วย esptool.py ไม่ใช่ firmware-ota.bin.ota ! ไฟล์นี้เป็น UES ในกระบวนการอัปเดต Hard-OTA
ข้อมูลเพิ่มเติมเกี่ยวกับการกะพริบสามารถพบได้ในเอกสารอย่างเป็นทางการที่นี่: http://docs.micropython.org/en/latest/esp8266/tutorial/intro.html
เมื่อคุณมีเฟิร์มแวร์บนอุปกรณ์แล้วคุณสามารถเข้าถึง Micropython Repl (Python Prompt) มีวิธีที่แตกต่างกันในการทำเช่นนี้ ฉันใช้ Thonny และการสนับสนุน micropython ของเขา
thonny ถูกติดตั้งผ่าน PipenV เพื่อเริ่มต้น IDE เพียงโทร:
~ /micropython-sonoff-webswitch$ make thonnyขั้นตอนแรกใน Thonny:
Tools / Options / Interpreter เลือก: MicroPython (ESP8266)files : View / Files ตอนนี้คุณควรจะสามารถเข้าถึง micropython REPL ผ่าน Ctrl-F2 คุณยังสามารถเริ่มสคริปต์บนอุปกรณ์:
This computer ไปที่: .../micropython-sonoff-webswitch/helpersmpy_information.py ในตัวแก้ไขF5 หลังจากจัดรูปแบบระบบไฟล์แฟลชเป็น littlefs2 : คัดลอกไฟล์ที่หายไปไปยังอุปกรณ์โดยใช้ Soft-OTA:
อุปกรณ์ต้องการ SSID/รหัสผ่านเพื่อให้สามารถเข้าสู่ระบบ WLAN ที่แตกต่างกัน มันอ่านข้อมูลรับรองจากไฟล์ _config_wifi.json ต้องสร้างไฟล์นี้ เทมเพลตคือ _config_wifi-example.json
คัดลอกและแก้ไข _config_wifi-example.json ถึง src/_config_wifi.json
ไฟล์ที่หายไปทั้งหมดใน src จะถูกคัดลอกไปยังอุปกรณ์ผ่าน Soft-OTA
ในการเชื่อมต่ออุปกรณ์บนกำปั้นเริ่มต้นไปยังเครือข่าย WiFi ของคุณแก้ไขและเรียกใช้สิ่งนี้:
import time , network
sta_if = network . WLAN ( network . STA_IF )
sta_if . active ( True )
sta_if . connect ( 'your-ssid' , 'Your-WiFi-Password' )
while not sta_if . isconnected ():
time . sleep ( 0.5 )
print ( 'connected:' , sta_if . ifconfig ()) เพียงแค่คัดลอกและวางรหัสตัวอย่างนี้ลงใน Thonny IDE ใส่ข้อมูลประจำตัวของคุณและเรียกใช้ผ่าน F5
หลังจากอุปกรณ์เชื่อมต่อกับ WiFi ของคุณแล้วมันสามารถเรียกใช้ Soft-OTA และคัดลอกไฟล์ src ที่หายไปทั้งหมด
เริ่มต้นเซิร์ฟเวอร์ Soft-OTA ด้วย:
~ /micropython-sonoff-webswitch$ make soft-ota ในเวลาเดียวกันเปิด .../micropython-webswitch/src/ota_client.py ใน Thonny และเริ่มต้นผ่าน F5
ตอนนี้ Soft-OTA ควรทำงาน:
src จะถูกโอนไปยังอุปกรณ์ตอนนี้การตั้งค่าอุปกรณ์เสร็จแล้ว;)
หมายเหตุ : มีการอัปเดต OTA สองประเภท:
ota 'hard' ผ่าน Yaota8266 เป็นงานที่อยู่ระหว่างดำเนินการดู: #33
หลังจากการตั้งค่าเริ่มต้นและเมื่อทุกอย่างทำงานและอุปกรณ์เชื่อมต่อกับ WLAN ของคุณคุณสามารถใช้การอัปเดต OTA
อุปกรณ์จะเรียกใช้ /src/ota_client.py ในทุกการบูต
สคริปต์รอเวลาสำหรับเซิร์ฟเวอร์ OTA และหลังจากหมดเวลาเว็บเซิร์ฟเวอร์ปกติจะเริ่มต้นขึ้น
ในการเริ่ม soft-OTA Server ให้ทำเช่นนี้:
~ /micropython-sonoff-webswitch$ make soft-otaหากเซิร์ฟเวอร์ทำงาน: รีบูตอุปกรณ์และดูเอาต์พุตของเซิร์ฟเวอร์ OTA
การใช้งาน OTA Update ทำ:
mpy_cross ที่ติดตั้ง (หากไม่ตรงกัน: DENY UPDATE).py ที่มีอยู่บนอุปกรณ์หากส่งไฟล์ .mpy./bdist/ - รวบรวมไฟล์ .mpy (และ .html , .css ไฟล์) ที่จะอัปโหลดไปยังอุปกรณ์ใน soft-OTA./build/ ไฟล์เฟิร์มแวร์ที่รวบรวม ( firmware-*.bin และ yaota8266.bin ) สำหรับการกะพริบและ hard-OTA./docker-yaota8266/ submodule https://github.com/jedie/docker-yaota8266 เพื่อรวบรวม yaota8266.bin ผ่าน Docker./helpers/ - อุปกรณ์ทดสอบ/สคริปต์ผู้ช่วยสำหรับ bootstrap และการพัฒนาบางส่วน./micropython_config/ - ไฟล์กำหนดค่าที่ใช้ในการรวบรวมเฟิร์มแวร์ micropython./mpy_tests/ - การทดสอบที่สามารถทำงานบนอุปกรณ์ micropython (จะเรียกใช้โดย pytest ด้วย mocks)./sdist/ - มีโมดูลทั้งหมดที่จะค้างลงในเฟิร์มแวร์ที่สร้างขึ้นผ่าน utils/make_sdist.py./soft_ota/ - ซอร์สโค้ดของเซิร์ฟเวอร์ OTA./src/ - ไฟล์แหล่งที่มาของอุปกรณ์./tests/ - ไฟล์ pytest บางไฟล์ (ทำงานบนโฮสต์ด้วย cpython)./utils/ - Utils สำหรับการเรียกใช้ในท้องถิ่น (คอมไพล์, รหัสผ้าสำลี, ซิงค์กับ mpycntrl) yaota8266.bin ผ่าน Docker: https://github.com/jedie/docker-yaota8266