Flash ESP-01 (ESP8266) โดยไม่ต้องใช้อะแดปเตอร์ USB-to-serial โดยใช้ Raspberry Pi: 3 ขั้นตอน
Flash ESP-01 (ESP8266) โดยไม่ต้องใช้อะแดปเตอร์ USB-to-serial โดยใช้ Raspberry Pi: 3 ขั้นตอน
Anonim
Flash ESP-01 (ESP8266) ที่ไม่มีอะแดปเตอร์ USB-to-serial โดยใช้ Raspberry Pi
Flash ESP-01 (ESP8266) ที่ไม่มีอะแดปเตอร์ USB-to-serial โดยใช้ Raspberry Pi

คำแนะนำนี้จะแนะนำคุณเกี่ยวกับวิธีเริ่มเขียนโปรแกรมไมโครคอนโทรลเลอร์ ESP8266 ของคุณบนโมดูล ESP-01 WIFI ทั้งหมดที่คุณต้องใช้ในการเริ่มต้น (นอกเหนือจากโมดูล ESP-01 แน่นอน) คือ

  • ราสเบอร์รี่ปี่
  • สายจัมเปอร์
  • ตัวต้านทาน 10K

ฉันต้องการตกแต่งโคมไฟข้างเตียงเก่าให้เป็นโคมไฟกลางคืน LED ที่ควบคุมโดย Alexa ไม่มีอะไรน่าสนใจเพียงแค่เปิด/ปิดโดยใช้คำสั่งเสียง ฉันสั่งโมดูล ESP-01 WIFI ที่ง่ายที่สุด รีเลย์และต่อสายไฟพร้อมไฟ LED ทางออนไลน์ และลืมสั่งอะแดปเตอร์ USB เป็นซีเรียลไปโดยสิ้นเชิงเพื่อตั้งโปรแกรมไมโครคอนโทรลเลอร์ ESP8266 แต่เนื่องจากฉันมี Raspberry Pi และทั้ง Raspberry Pi และบอร์ด ESP-01 มีพิน UART ฉันคิดว่าฉันสามารถใช้ RPi ของฉันเพื่อตั้งโปรแกรม ESP8266 โดยไม่ต้องใช้อะแดปเตอร์

ขั้นตอนที่ 1: กำหนดค่า Rapberry Pi

กำหนดค่า Rapberry Pi
กำหนดค่า Rapberry Pi

ฉันใช้ Raspberry Pi 3 รุ่น B+ อย่างไรก็ตาม คำแนะนำควรใช้ได้กับเวอร์ชันอื่น โดยเฉพาะในรุ่น B

ก่อนอื่นเราต้องเปิดใช้งาน UART บน Pi

ไปที่การตั้งค่าการกำหนดค่า RPi ในการเรียกใช้หน้าต่างเทอร์มินัล

$ sudo raspi-config

ไปที่ 5 ตัวเลือกการเชื่อมต่อ จากนั้นเลือก P6 Serial จากนั้นคุณถาม คุณต้องการให้ล็อกอินเชลล์สามารถเข้าถึงได้ผ่านซีเรียลหรือไม่? เลือกเนื่องจากเราไม่ต้องการใช้ UART เพื่อเรียกใช้ Pi หัวขาด แต่เพื่อสื่อสารกับอุปกรณ์อื่น ๆ ดังนั้นในหน้าจอต่อไปนี้เมื่อถูกถามว่าคุณต้องการเปิดใช้งานฮาร์ดแวร์พอร์ตอนุกรมหรือไม่ เลือก. รีสตาร์ท Pi ตามที่ได้รับแจ้ง UART ควรเปิดใช้งานสำหรับการสื่อสารแบบอนุกรมบน RX และ TX pin ของ Raspberry Pi 3 หมายเหตุ: หลังจากนี้ ควรมีรายการใหม่ enable_uart=1 ที่ส่วนท้ายของ /boot/config.txt

ขั้นตอนที่ 2: เชื่อมต่อ ESP-01 กับ Raspberry Pi

เชื่อมต่อ ESP-01 กับ Raspberry Pi
เชื่อมต่อ ESP-01 กับ Raspberry Pi

ตอนนี้เราลงไปเดินสายทุกอย่างเข้าด้วยกัน

ประการแรก ระบุพลังงาน RPi 3.3V และพิน GND (กราวด์) ของคุณเพื่อจ่ายไฟให้กับไมโครคอนโทรลเลอร์ ESP8266, พิน TXD (ส่ง) และ RXD (รับ) เพื่อสื่อสาร และพินเอนกประสงค์สองตัวเพื่อใช้งาน ESP8266 (พินที่สามารถตั้งค่าได้ทั้งสูงหรือต่ำ ต่ำ). ค้นหาการจัดเรียงพินบน pinout.xyz หรือพิมพ์ในเทอร์มินัล:

$ pinout

ประการที่สอง ระบุพินที่จำเป็นใน ESP-01 แต่ในตอนเริ่มต้น เราจำเป็นต้องมีความเข้าใจเกี่ยวกับหมุดของ ESP-01 ฉันพบแหล่งข้อมูลที่เป็นประโยชน์มากมายบนอินเทอร์เน็ตเพื่อช่วยเหลือคุณในเรื่องนั้น อันนี้สั้นที่สุดในขณะที่อันนี้ให้คำอธิบายที่ดีกว่ามาก กล่าวโดยย่อ: มี 8 พิน เราต้องการ 7 พิน ได้แก่ พิน VCC และพิน GND (กราวด์) สำหรับการจ่ายไฟ พิน TXD และ RXD สำหรับการสื่อสาร และ RST (รีเซ็ต) CH_PD (ชิปปิดการทำงาน บางครั้งมีป้ายกำกับ CH_EN หรือเปิดใช้งานชิป) และ GPIO0 เพื่อใช้งานโมดูล โดยปกติ ESP8266 จะทำงานในโหมดปกติ แต่เมื่ออัปโหลดรหัสไปยัง ESP8266 จะต้องอยู่ในโหมดแฟลช สำหรับโหมดการทำงานปกติหรือโหมดปกติ โมดูลจะต้องเชื่อมต่อกับพลังงาน (ชัด) แต่ยังต้องเชื่อมต่อพิน CH_PD กับ VCC ผ่าน 10K (ค่านี้แตกต่างกันไปในการขอความช่วยเหลือที่แตกต่างกัน ฉันพบค่าที่ 3K) แบบดึงขึ้น ตัวต้านทานเมื่อบูต ในอีกด้านหนึ่งเพื่อเข้าสู่โหมดกระพริบหรือตั้งโปรแกรมคุณต้องต่อสายดิน GPIO0 เมื่อบู๊ต เพื่อป้องกันไม่ให้กระแสไฟไหลผ่าน GPIO0 เมื่อต่อสายดิน ขอแนะนำให้เชื่อมต่อ GPIO0 กับกราวด์โดยใช้ตัวต้านทานความต้านทานต่ำ 300Ω - 470Ω (เพิ่มเติมเกี่ยวกับเรื่องนี้ที่นี่) พิน RST ตามชื่อจะรีเซ็ต (หรือรีสตาร์ท) MCU ระหว่างการทำงานปกติ อาจเชื่อมต่อกับ VCC ผ่านตัวต้านทานแบบดึงขึ้น 10K แต่ควรต่อสายดินเพื่อรีเซ็ตไมโครคอนโทรลเลอร์ แม้ว่าจะเป็นไปได้ที่จะใช้ปุ่มที่มีอยู่จริงเพื่อต่อสายดิน RST และ GPIO0 พิน (หรือแม้แต่ต่อสายด้วยตนเองเพื่อจำลองปุ่ม) ประสบการณ์การใช้พิน Raspberry Pi เพื่อตั้งค่าแรงดันสูงและต่ำบน RST และ GPIO0 ของโมดูลจะเป็นประสบการณ์ที่น่าพึงพอใจมากกว่า หมุด นอกจากนี้ยังไม่จำเป็นต้องใช้ตัวต้านทาน 10K และ 470Ωอีกด้วย

เมื่อทราบลักษณะเฉพาะของหมุด ESP-01 เราสามารถเริ่มเชื่อมต่อทุกอย่างเข้าด้วยกันได้ คุณสามารถใช้ตารางต่อไปนี้เป็นข้อมูลอ้างอิงพร้อมกับภาพวาดด้านบน:

ESP-01 Raspberry Pi

  • พิน VCC (3.3V) #1 (3.3V)
  • พิน GND #6 (GND)
  • TXD พิน #10 (RXD / BCM 15)
  • RXD พิน #8 (TXD / BCM 14)
  • CH_PD พิน #1 (3.3V)
  • RST พิน #3 (BCM 2)
  • GPIO 0 พิน #5 (BMC 5)

เชื่อมต่อ VCC พินสุดท้าย อินสแตนซ์ที่คุณเชื่อมต่อ VCC จะตรึงโมดูล Wi-Fi ไว้ ใช้หน้าจอหรือ minicom เพื่อตรวจสอบว่า RPi และ ESP8266 สามารถสื่อสารโดยใช้ UART ได้หรือไม่ (หมายเหตุ: คุณอาจต้องติดตั้งหน้าจอหรือ minicom ก่อน เนื่องจากดูเหมือนว่าจะไม่ได้ติดตั้งบน Raspbian โดยค่าเริ่มต้น)

ใช้การเรียกใช้หน้าจอ:

$ sudo screen /dev/serial0 115200

ใช้มินิคอมรัน:

$ sudo minicom -b 115200 -o -D /dev/serial0

หมายเหตุ: แหล่งข้อมูลออนไลน์จำนวนมากแนะนำให้เชื่อมต่อกับ ESP8266 บน /dev/ttyAMA0 แต่สิ่งนี้ใช้ไม่ได้กับ RPi 3 หรือใหม่กว่า (รวมถึงศูนย์ W) ตามเอกสาร RPi เชื่อมต่อผ่าน /dev/serial0 แทนหรือ /dev/ttyS0

หลังจากที่คุณเข้าสู่หน้าจอหรือมินิคอมแล้ว ให้ใช้คำสั่ง AT เพื่อสื่อสารกับ ESP8266 พิมพ์ AT จากนั้นกด Enter จากนั้นกด Ctrl+J เพื่อส่งคำสั่ง คุณควรได้รับการตอบกลับ รายการคำสั่ง AT ที่มีอยู่สามารถพบได้ใน espressiff.com หรือที่นี่

อุปกรณ์ที่มีการเชื่อมต่อทางกายภาพและพูดคุยกันเราสามารถลงโปรแกรมพิน RPi GPIO และสุดท้ายคือ ESP8266 เอง

ขั้นตอนที่ 3: การตั้งค่าซอฟต์แวร์ (Python to Operate และ Arduino IDE เป็นโปรแกรม)

ตอนที่ 1. การใช้ python เพื่อเปลี่ยนโหมด ESP8266

ดังที่กล่าวไว้ข้างต้น สะดวกในการใช้พิน GPIO ของ RPI เพื่อสลับโหมดการทำงานของ ESP8266 ฉันเขียนโค้ดหลามพื้นฐานสองรหัสที่ทำให้ ESP8266 อยู่ในโหมดปกติหรือโหมดการเขียนโปรแกรม

โหมดปกติ: ในการทำให้ไมโครคอนโทรลเลอร์เข้าสู่โหมดการทำงานปกติ เราเพียงแค่ต้องเปิดเครื่องและเชื่อมต่อ CH_PD ผ่านตัวต้านทานแบบดึงขึ้นไปยัง VCC แต่หากต้องการเปลี่ยน MCU จากการตั้งโปรแกรมเป็นโหมดปกติ เราจำเป็นต้องรีเซ็ตมัน (คิดว่าจะรีสตาร์ท) ในการทำเช่นนั้นบน RPi เราจะดึง GPIO ของ RPi ที่เชื่อมต่อกับพิน RST บน ESP-01 สั้น ๆ ลงมา (โดยค่าเริ่มต้นพิน RPi ที่ฉันใช้สำหรับการรีเซ็ตถูกตั้งค่าเป็น HIGH) สั้นแค่ไหน? สำหรับฉันนั่นเป็นคำถามเก็งกำไร คุณสามารถลองใช้ช่วงเวลาที่ต่างกันได้ แต่ฉันพบว่า 200 - 500 ms ทำงานได้ดี เขียนความคิดเห็นถ้าคุณมีความคิดที่ดีกว่า บันทึกรหัสของคุณเป็น reset.py

#!/usr/bin/python

นำเข้า RPi. GPIO เป็น GPIO เวลานำเข้า GPIO.setmode (GPIO. BOARD) # ตั้งค่าการระบุ GPIO ด้วยหมายเลขพินทางกายภาพ resetPin = 3 # ระบุพินทางกายภาพ RPi ที่เชื่อมต่อกับ ESP8266 RST pin GPIO.setup (resetPin, GPIO. OUT) # set reset พินเป็นเอาต์พุต GPIO.output (resetPin, GPIO. LOW) # แรงดันตกบน RST pin time.sleep (.2) # รอ.2 s GPIO.output (resetPin, GPIO. HIGH) # เรียกคืนแรงดันไฟฟ้าบน RST pin GPIO cleanup() # รีเซ็ตพินบน RPI เพื่อป้องกันคำเตือนรันไทม์ในอนาคต

  • โหมดการเขียนโปรแกรม: ในการทำให้ MCU เข้าสู่โหมดการเขียนโปรแกรม เราจำเป็นต้องจ่ายไฟให้กับ ESP8266 โดยมีการต่อสายดิน GPIO0 หรือรีเซ็ตและกราวด์ GPIO0 ขณะทำการบูท (ฉันไม่ทราบระยะเวลาที่แน่นอนอีกครั้งของแรงดันไฟฟ้าตก ดังนั้นอย่าเคร่งครัด ชี้นำโดยค่าที่ใช้) บันทึกรหัสเป็น flash.py หรือดาวน์โหลดด้านล่าง การสืบทอดของการกระทำมีดังต่อไปนี้:

    • ดึงขา RST ลง
    • ดึง GPIO0 พิน
    • ดึงพิน RST ขึ้น
    • ดึง GPIO0 พิน

#!/usr/bin/python

นำเข้า RPi. GPIO เป็น GPIO เวลานำเข้า GPIO.setmode (GPIO. BOARD) # ตั้งค่าการระบุ GPIO ด้วยหมายเลขพินทางกายภาพ resetPin = 3 # ระบุพินทางกายภาพ RPi ที่เชื่อมต่อกับ ESP8266 RST พิน flashPin = 5 # ระบุพินทางกายภาพ RPi ที่เชื่อมต่อกับ ESP8266 GPIO0 พิน GPIO.setup(resetPin, GPIO. OUT) # set reset pin as output GPIO.setup(flashPin, GPIO. OUT) # set flash pin as output GPIO.output(resetPin, GPIO. LOW) # drop voltage on RST pin time. สลีป (.2) # จำเป็นสำหรับการรอนี้คือการเก็งกำไร GPIO.output (flashPin, GPIO. LOW) # แรงดันไฟฟ้าตกบน GPIO0 time.sleep (.2) # ความต้องการสำหรับการรอนี้คือการเก็งกำไร GPIO.output (resetPin, GPIO. HIGH) # เริ่มการบูต ESP8266 time.sleep (.5) # รอให้ ESP8266 บูต GPIO.ouput (flashPin. GPIO. HIGH) # เรียกคืนแรงดันไฟฟ้าบน GPIO pinGPIO.cleanup () # รีเซ็ตหมุดบน RPI เพื่อป้องกันการแจ้งเตือนรันไทม์ในอนาคต

ในการอนุญาตการเปลี่ยนเทอร์มินัล:

$ sudo chmod +x flash.py

$ sudo chmod +x reset.py

จากนี้ไปเมื่อใดก็ตามที่คุณต้องการเข้าสู่โหมดการเขียนโปรแกรมให้รันในเทอร์มินัล:

$ python /flash.py

หลังจากอัปโหลดรหัสเพื่อเข้าสู่โหมดการทำงานปกติให้รัน:

$ หลาม /reset.py

ณ จุดนี้คุณอาจต้องการอัปเดตเฟิร์มแวร์ ESP8266 มีบทเรียนออนไลน์มากมายเกี่ยวกับวิธีการทำเช่นนั้น ดังนั้นฉันจะไม่ลงรายละเอียดเกี่ยวกับวิธีการทำเช่นนั้น

ส่วนที่ 2. การตั้งค่า Arduino IDE

หากคุณได้ติดตั้ง Arduino IDE แล้ว คุณยังอาจต้องการอ่านส่วนนี้เพื่อให้แน่ใจว่า IDE ของคุณพร้อมสำหรับ ESP8266

บน Rapberry Pi คุณสามารถใช้ Arduino IDE เพื่อตั้งโปรแกรม ESP8266 ของคุณ มีสองวิธีในการติดตั้ง IDE บน RPi:

  • ผ่านบรรทัดคำสั่งจากที่เก็บโดยใช้ apt-get install
  • ดาวน์โหลดและติดตั้งด้วยตนเองจาก arduino.cc

ฉันขอแนะนำอย่างยิ่งให้ไปที่เส้นทางหลัง ดูเหมือนว่าเวอร์ชัน IDE จากที่เก็บจะล้าสมัยและคุณจะต้องดำเนินการเพิ่มเติมก่อนที่คุณจะพร้อมที่จะเริ่มเขียนโปรแกรม ESP8266 เพื่อหลีกเลี่ยงความยุ่งยาก ไปที่หน้าดาวน์โหลด Arduino.cc และดาวน์โหลดเวอร์ชัน Linux ARM คลายการบีบอัดและติดตั้งถัดไป: หากชื่อไฟล์ที่ดาวน์โหลดมามีลักษณะเช่นนี้ arduino-X. Y. Z-linuxarm.tar.xz ให้เรียกใช้โฟลเดอร์ดาวน์โหลด:

$ tar -xvf arduino-X. Y. Z-linuxarm.tar.xz

สิ่งนี้ควรคลายการบีบอัดไฟล์ไปยังโฟลเดอร์ arduino-X. Y. Z วิ่ง:

$ sudo./arduino-X. Y. Z/install.sh

สิ่งนี้ควรติดตั้ง IDE หลังจากการติดตั้งเสร็จสมบูรณ์ ให้เริ่ม IDE

  • จาก Arduino IDE ให้ไปที่ File > Preferences มองหา “Add Board Manager URLs” ที่ด้านล่างของหน้าต่างการตั้งค่า ป้อน https://arduino.esp8266.com/stable/package_esp8266com_index.json ลงในฟิลด์ “Additional Board Manager URLs” คลิกปุ่ม “OK”
  • ไปที่ เครื่องมือ > บอร์ด: XXX > ตัวจัดการบอร์ด ในหน้าต่างใช้การค้นหาหรือเลื่อนลง เลือกเมนูบอร์ด ESP8266 แล้วคลิกติดตั้ง รอให้การติดตั้งเสร็จสิ้นและปิดหน้าต่าง
  • ไปที่ Tools > Board: XXX อีกครั้ง แล้วมองหาบอร์ด ESP8266 เลือกโมดูล ESP8266 ทั่วไป

ตอนนี้ IDE พร้อมที่จะตั้งโปรแกรม ESP8266 แล้ว พิมพ์หรือวางรหัสที่ต้องการลงในหน้าต่าง IDE แล้วบันทึก คลิกอัปโหลด จากเทอร์มินัลรัน flash.py สิ่งนี้จะทำให้บอร์ดของคุณเข้าสู่โหมดการเขียนโปรแกรม รอสักครู่เพื่อให้ IDE ทำการคอมไพล์และอัปโหลดให้เสร็จ (หมายเหตุ: โดยทั่วไปแล้ว ESP-01 จะมาพร้อมกับ LED 2 ดวง ไฟ LED สีน้ำเงินจะกะพริบขณะกำลังอัปโหลดรหัส) และเรียกใช้ reset.py ตอนนี้บอร์ด ESP-01 ของคุณพร้อมที่จะปฏิบัติหน้าที่แล้ว

แนะนำ: