Hello anh em, mời ae quay về những năm về trước với series học tập, bắt đầu lại với serie micropython để khởi động cho nóng người.

MicroPython và ESP8266 | Học ARM
Micropython và ESP8266 có liên quan gì với nhau? Python có thể chạy được trên các phần cứng nhúng được không ? Hẳn là các bạn có nghe nói nhiều về Micropython, tuy nhiên để chạy thử được micropython thì cũng hơi vất vả, mình xin chia sẻ với các bạn 1 số cách đơn giản để có thể chạy và thử micropytho…

Bắt nguồn từ bài viết này, đây có thể là bài viết đầu tiên để chúng ta tới với micropython cho các board microcontroller.  Nó có vẻ hơi cũ, mình đã coi lại và update, nên ae yên tâm sau 5 nốt nhạc chúng ta đã có version mới nhất. Ae có thể thử và cùng sung sướng với mình vì đã có luôn tutorial đầu tiên. Nếu coi xong ae có hứng thú thì cum back lại post này mình tiếp tục khám phá, còn nếu thấy chán đời quá thì thôi bỏ mình qua học cái khác vui hơn.

Cập nhật: Series đã hoàn thành nha anh em

Học Micropython cơ bản | Học ARM
Hello anh em, lại là mình đây, sau khi hoàn thành serie micropython thì đây sẽ là bài tổng hợp của mình tóm gọn nhẹ nhàng tình cảm lại cho anh em có thể theo dõi. Micropython về cơ bản là dễ, dễ hiểu dễ đọc, dễ làm, nhanh gọn lẹ và có thể nói là giống mì ăn liền như Arduino. Tùy mỗi người một mục đ…

Trong bài viết này mình sẽ cung cấp 1 hướng tiếp cận mới dễ dàng hơn so với bài đầu tiên, kể cả về cách cài đặt cũng như lập trình, chủ yếu là về môi trường để anh em có thể yên tâm mà nghiên cứu một cách nhanh nhất.

Chuẩn bị

Cần có một số yêu cầu cơ bản trước khi bắt đầu

  • Máy tính dùng ubuntu, hoặc máy ảo ubuntu hoặc window với cmd thần t hánh
  • Kit esp8266/ esp32
  • Dây cáp và wifi
  • Tool WebREPL

Với những thứ trên ta có thể vào việc ngay và luôn rồi

Cài đặt môi trường

Thay vì cách flash ở bài trước là trên window và dùng tool ESPFlash để nạp firmware esp micropython mới nhất, thì giờ với linux chúng ta có thể flash bằng cách dùng esptool như sau

Với Linux

Cài đặt esptool

sudo apt update
sudo apt install python3-pip
pip install esptool

Flash firmware sau khi đã tải về bản tương ứng tại https://micropython.org/download/all/

Với esp8266 ta dùng lệnh sau, bạn cần thay đổi /dev/ttyUSB0 và esp8266-20170108-v1.8.7.bin thành cổng COM tương ứng và version micropython mà ta mới tải về

Nếu bạn không biết cổng COM hiện tại đang có trong ubuntu thì có thể sử dụng lệnh sau ll /sys/class/tty/ttyUSB*
ll /sys/class/tty/ttyUSB*
esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect -fm dout 0 esp8266-20170108-v1.8.7.bin

Với esp32 thì cách làm tương tự và ta dùng lệnh sau

esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash -z 0x1000 esp32-20180511-v1.9.4.bin
Nếu bị lỗi khi chạy esptool.py file not found thì chơi lệnh này fix nha ae ~/.local/bin/esptool.py -p /dev/ttyUSB0 ...
sudo ~/.local/bin/esptool.py --port /dev/ttyUSB0 erase_flash
sudo ~/.local/bin/esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash -z 0x1000 esp32-20210623-v1.16.bin

Sau khi bạn xóa và flash firmware thành công sẽ có thông báo như sau

sc@sckt:~$ sudo ~/.local/bin/esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py v3.1
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 60:01:94:1f:80:c8
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 2.8s
Hard resetting via RTS pin...
vuson@sckt:~$ sudo ~/.local/bin/esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect -fm dout 0 esp8266-20170526-v1.9.bin
esptool.py v3.1
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 60:01:94:1f:80:c8
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Flash will be erased from 0x00000000 to 0x00092fff...
Flash params set to 0x0340
Compressed 598084 bytes to 390426...
Wrote 598084 bytes (390426 compressed) at 0x00000000 in 9.4 seconds (effective 507.0 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
sc@sckt:~$ sudo ~/.local/bin/esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py v3.1
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 60:01:94:1f:80:c8
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 2.6s
Hard resetting via RTS pin...

Cấu hình WebREPL

Kích hoạt WebREPL

Sau bao tháng ngày chờ đợi thì team micropython cũng đã làm ra được 1 thứ có giá trị, đó là web tool để chúng ta có thể lập trình python ở trên đó, tuy nhiên để có thể sử dụng được thì bạn cần phải enable nó lên thông qua terminal

Mở terminal dùng teraterm và gõ lệnh sau, sau đó bạn nhập password để dùng cho mỗi lần connect với kit ESP8266

import webrepl_setup

Kết quả

>>> import webrepl_setup
WebREPL daemon auto-start status: disabled
Would you like to (E)nable or (D)isable it running on boot?
(Empty line to quit)
> E
To enable WebREPL, you must set password for it
New password (4-9 chars): *****
Confirm password: *****
Changes will be activated after reboot
Would you like to reboot now? (y/n) y
WebREPL daemon started on ws://192.168.4.1:8266
Started webrepl in normal mode

MicroPython v1.15 on 2021-04-18; ESP module with ESP8266
Type "help()" for more information.
>>>

Truy cập WebREPL

Đoạn đầu flash dùng Ubuntu xong xuôi rồi, giờ mở mục wifi trên win10 của máy tính bạn ra sau đó lựa chọn wif có tên là MicroPython-*

Bạn cần connect vào nó và nhập mật khẩu micropythoN, lưu ý chữ N viết hoa nha anh em

Sau khi giải nén tool WebREPL ra thì click vào file webrepl.html để mở trên trình duyệt Chrome hoặc Firefox, ta sẽ có giao diện tương ứng như hình sau

Giờ thì hãy đảm bảo rằng PC của bạn đã kết nối vào ESP8266's WiFi, sau đó ấn vào nút Connect (ở đây ta dùng đường dẫn mặc định ws://192.168.4.1:8266/ ).

Khi bạn connect được thì WebREPL sẽ bắt chúng ta phải nhập mật khẩu đã set từ bước trước vào

Tiếp tục code vài dòng python để xem output như thế nào. Với WebREPL sẽ show ra các chức năng giống như là lập trình thông qua serial. Bạn có thể code thoải mái và load code của mình lên board cũng như xem kết quả

Dùng WebREPL với internet

Ở bước trên thì ta có thể connect và code cơ bản, tuy nhiên khá là vất vả nếu bạn cứ phải chuyển đổi qua lại giữa network của micropython và mạng internet, mỗi lần xài WebREPL là coi như khỏi xài internet và ngược lại, tất nhiên sẽ có cách để khắc phục điều này, mình tiếp tục thêm vài bước để có thể xài cả 2, tiện thể hạn chế sử dụng cổng COM để code và debug luôn, tất cả cho về không dây hết và ta có thể code ở bất kỳ máy tính nào, nghĩ tới đã thấy sung sướng tê người rồi

Trước khi làm việc đó thì cần dùng Teraterm mở COM và gõ những dòng code sau trước đã

import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('ssid', 'password')

Mục đích chính là cho kit nodemcu của mình có thể kết nối được với internet, với mạng wifi nhà mình đó anh em, các bạn thay ssid và password bằng mạng wifi tương ứng của mình nhé

wlan.isconnected()
wlan.ifconfig()

Sau đó bạn có thể dùng 2 lệnh trên để kiểm tra đã connect vào wifi hay chưa cũng như kiểm tra lại IP của kit sau khi connect, True và hiện ra IP là ngon nha các đồng chí

Kết quả

>>> wlan.isconnected()
True
>>> wlan.ifconfig()
('192.168.1.38', '255.255.255.0', '192.168.1.1', '192.168.1.1')

Lưu ý kết quả đầu tiên từ lệnh ifconfig là địa chỉ IP được gán cho kit ESP8266 (192.168.1.38 trong ví dụ này, nhưng nó sẽ khác nhau tùy thuộc vào mạng WiFi của bạn). Nếu bạn không thấy địa chỉ IP thì có vấn đề với cấu hình WiFi hoặc kết nối mạng. Kiểm tra kỹ SSID và mật khẩu có đúng không và thử lại.

Một điều quan trọng cần lưu ý là ESP8266 sẽ luôn ghi nhớ mạng WiFi cuối cùng mà nó sử dụng và cố gắng tự kết nối lại khởi động lại. Điều này rất tiện lợi vì nó có nghĩa là khi ESP8266 khởi động, nó sẽ tự động kết nối với mạng cuối cùng mà bạn không cần phải chạy lại các lệnh ở trên. Tuy nhiên, nó chỉ nhớ mạng lần cuối cùng truy cập chứ không phải toàn bộ lịch sử của các mạng mà bạn đã kết nối.

Sau khi kit được kết nối với mạng WiFi, ta cần phải kích hoạt lại WebREPL (như được mô tả trong phần trước) và thấy nó in ra hai địa chỉ IP mà nó đang listen:

>>> import webrepl
>>> webrepl.start()
WebREPL daemon started on ws://192.168.4.1:8266
WebREPL daemon started on ws://192.168.1.38:8266
Started webrepl in normal mode

Trong trường hợp này, WebREPL đang lắng nghe trên 192.168.4.1 là điểm truy cập của ESP8266 và 192.168.1.38 là địa chỉ IP của kit ESP8266 trên mạng WiFi của nhà mình.

Bây giờ hãy mở WebREPL và sử dụng địa chỉ IP ở trên thay vì địa chỉ mặc định 192.168.4.1:

Giờ thì ta có thể vừa xài internet vừa code micropython thơm bơ rồi.

Gửi và nhận file với WebREPL

Một tính năng tiện dụng của WebREPL là nó có thể gửi và lấy tệp từ filesystem. Việc này rất thuận tiện khi code python của bạn to lên, bạn không thể gõ từng dòng vào trong command line khi số dòng code của bạn lên tới 1000 dòng, việc truy cập tệp qua WebREPL giúp chúng ta thuận tiện hơn rất nhiều.

Tuy nhiên nó vẫn có hạn chế là file bạn tải sẽ chỉ có một path cố định là root, bạn không thể đưa nó qua đường dẫn khác. Muốn làm được việc đó thì cần phải có những công cụ khác, tạm thời chúng ta sẽ bỏ qua việc chọn path trong bài viết này

Để sử dụng các tính năng tệp của WebREPL bạn có thể sử dụng các công cụ ở bên góc phải

Để tải tệp lên, hãy nhấp vào Choose File và chọn file mình cần đưa lên sau đó ấn nút Send to Device để gửi file xuống kit ESP8266



Để tải xuống tệp từ file system, chỉ cần nhập tên file. Sau đó nhấp vào Get from device và tệp sẽ được tải xuống thông qua trình duyệt vào máy tính của bạn.

Ví dụ minh họa phát luôn nhỉ

Giờ mình code chương trình hello python như sau và lưu lại file hello.py

###########################################################################
# Setup code goes below, this is called once at the start of the program: #
###########################################################################
import time

def run():
    print('Hello world! I can count:')
    i = 1
    while True:
        ###################################################################
        # Loop code goes inside the loop here, this is called repeatedly: #
        ###################################################################
        print(i)
        i += 1
        time.sleep(1.0)  # Delay for 1 second.

Sau đó load file này xuống dưới kit ESP8266 thôi, các bạn có thể quan sát kết quả ở hình dưới

Một số phím tắt tương ứng khi dùng WebREPL để ta có thể thực hiện soft reset nếu chương trình không hoạt động

  • Ctrl-A trên dòng trống sẽ vào chế độ raw của REPL. Đây giống như chế độ paste vĩnh viễn, ngoại từ việc các kí tự không được lặp lại.
  • Ctrl-B trên cửa sổ trống giống như mode normal của REPL.
  • Ctrl-C hủy bất kỳ input nào hoặc sẽ dừng code đang chạy.
  • Ctrl-D trên dòng trống sẽ thực hiện soft reset.

Kết

Vậy là chúng ta đã có thể setup một số môi trường để dev micropython trên kit ESP8266 rồi, giờ thì các bạn chuẩn bị tinh thần tiếp tục với các bài hướng dẫn tiếp theo nhé.

Nếu anh em nào còn bỡ ngỡ về python thì ghé thăm bài viết sau để biết code python cơ bản nha anh em

Python cho người mới bắt đầu | Học ARM
Có nhiều cách để học python, cũng như có nhiều giáo trình để chúng ta có thể tham khảo, tuy nhiên để bắt đầu thường sẽ rất khó khăn với một người giữa rất nhiều ngả đường để lựa chọn. Trong quá trình tìm hiểu về cách Python hoạt động và sử dụng nó với lập trình hướng đối tượng, phát triển các ứng dụ…

Tham khảo

[1][2][3][4]