> For the complete documentation index, see [llms.txt](https://think-embedded.gitbook.io/micropython/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://think-embedded.gitbook.io/micropython/micropython-for-esp32/webrepl.md).

# WebREPL

แนะนำการใช้งานไมโครไพธอนผ่านทาง WebREPL สำหรับบอร์ดไมโครคอนโทรลเลอร์ ESP8266 / ESP32 ซึ่งมีข้อดีคือ ผู้ใช้สามารถเชื่อมต่อกับอุปกรณ์ไมโครไพธอนในระบบเครือข่าย และอยู่ห่างออกไปได้

## การใช้งาน WebREPL สำหรับ ESP8266 / ESP32

ในการเชื่อมต่อกับไมโครไพธอน หรือการทำงานของ **MicroPython-REPL (Interactive Prompt)** โดยทั่วไป เราก็จะใช้วิธีเชื่อมต่อผ่าน **USB-to-Serial** ด้วยสาย **USB** แต่ถ้าเลือกใช้ไมโครคอนโทรลเลอร์ อย่างเช่น **ESP8266** หรือ **ESP32** ของบริษัท **Espressif** ยังมีอีกหนึ่งช่องทางคือ **WebREPL (Web-based REPL)** เนื่องจากชิป **SoC** ประเภทนี้ มีวงจรสื่อสาร **Wi-Fi (2.4GHz)** อยู่ในตัวแล้ว

**WebREPL** ใช้รูปแบบการสื่อสารกับ **REPL** ของไมโครไพธอน ผ่านระบบเครือข่ายไร้สาย และใช้โพรโตคอล **WebSocket** ในการรับส่งข้อมูลกันระหว่างเว็บเบราว์เซอร์สำหรับคอมพิวเตอร์ของผู้ใช้งานกับอุปกรณ์ไมโครไพธอน

## **ขั้นตอนการเปิดใช้งาน WebREPL**

การเปิดใช้งาน **WebREPL** สำหรับ **ESP8266 / ESP32** ที่ได้ลงเฟิร์มแวร์ไว้ใช้งานแล้ว ก็ทำได้ไม่ยาก และมีขั้นตอนดังนี้

1. เชื่อมต่อกับ **REPL** โดยใช้โปรแกรม เช่น **Thonny IDE** ผ่าน **USB-to-Serial**&#x20;
2. ทำคำสั่งเพื่อตั้งค่าการใช้งานเพื่อให้อุปกรณ์ทำงานในโหมด **Wi-Fi Station (STA)** เชื่อมต่อกับ **Wi-Fi Access Point / Router** และอยู่ในเครือข่ายเดียวกับคอมพิวเตอร์ของผู้ใช้ จากนั้นเมื่อเชื่อมต่อได้แล้ว อุปกรณ์ จะได้รับหมายเลข **IP Address (IPv4)** จาก **DHCP Server**
3. ทำคำสั่งใน **REPL Shell** เพื่อเปิดใช้งาน **WebREPL**
4. ทำคำสั่งเพื่อรีบูทการทำงานของไมโครไพธอนแบบ **Soft Reset** โดยกดคีย์ **Ctrl+D**&#x20;
5. เปิดเว็บเบราว์เซอร์ ไปยัง <http://micropython.org/webrepl/#>&#x20;
6. เชื่อมต่อโดยใช้ **WebSocket** (ws\://) ระบุหมายเลข **IP Address** ของบอร์ด และพอร์ต **8266**

ถ้าจะใช้งาน **WebREPL** ต้องทำให้อุปกรณ์เชื่อมต่อผ่าน **Wi-Fi** ไปยังระบบเครือข่ายและอินเทอร์เน็ตได้ให้ก่อน

โค้ดไมโครไพธอนต่อไปนี้ ใช้เพื่อคำสั่งในการตั้งค่าการใช้งาน **Wi-Fi** ของ **ESP8266 / ESP32** ในโหมด **STA** สำหรับ **ESP8266 / ESP32** และมีการตรวจสอบดูว่า สามารถเชื่อมต่อกับ **Wi-Fi** ได้สำเร็จหรือไม่ ถ้าได้ ให้แสดงข้อความระบุ หมายเลข **IP Address** ของอุปกรณ์ เป็นต้น

ให้นำโค้ดส่วนนี้ไปใส่ลงในไฟล์ **boot.py** ที่มีอยู่ใน **Flash File Storage** ของอุปกรณ์ไมโครไพธอน

```python
import time
import network

WIFI_SSID   = 'YOUR_WIFI_SSID'
WIFI_PASSWD = 'YOUR_WIFI_PASSWORD'

wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect( WIFI_SSID, WIFI_PASSWD )
retry_count = 0
while retry_count < 20:
    time.sleep_ms(500)
    if wifi.isconnected():
        print( wifi.ifconfig() )
        break
    retry_count += 1
```

อย่าลืมเปลี่ยนข้อความเพื่อระบุชื่อของ **SSID** และรหัสผ่านของ **Wi-Fi** สำหรับการทำคำสั่ง `wifi.connect(…)` ให้ตรงกับอุปกรณ์ที่จะใช้งานจริง

บันทึกการแก้ไขลงไฟล์ **boot.py** จากนั้นกดปุ่ม **Ctrl+D** เพื่อทำขั้นตอน **Soft Reset**&#x20;

เมื่อเชื่อมต่อได้แล้ว ถัดไปให้ทำคำสั่งใน **REPL Shell** เพื่อเปิดใช้งาน **WebREPL**&#x20;

```python
import webrepl_setup
```

จากนั้นจะต้องเลือก **Enable (E)** และตั้งค่ารหัสผ่าน (ความยาว 4-9 ตัวอักขระ) ที่จะใช้สำหรับเชื่อมต่อกับ **WebREPL**  แล้วจึงรีเซตระบบให้เริ่มต้นทำงานใหม่ และในกรณีที่เปิดใช้งาน **Thonny IDE** อยู่ในขณะนั้น ให้เปิดการเชื่อมต่อผ่านทาง **USB-to-Serial**

![รูปภาพ: ตัวอย่างการทำขั้นตอน webrepl\_setup](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MLQcaCFt-ayg7DImgFa%2F-MLQd-uShB7p0fROm4QU%2Fthonny_esp32_webrepl_setup.png?alt=media\&token=5e1731d4-dbc0-4669-8f8c-01ab8549cc97)

![รูปภาพ: โค้ดไมโครไพธอนในไฟล์ boot.py](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MLQdWRw5cS8WwZF5d6r%2F-MLQe7Duy7LWyFyJLCa_%2Fwebrepl_esp32_boot.png?alt=media\&token=2a10cba3-86fd-44be-823a-e94be412b81e)

ข้อสังเกต: การทำคำสั่งดังกล่าว เป็นการเพิ่มคำสั่ง 2 บรรทัดต่อไปนี้ ลงในไฟล์ **boot.py** เพื่อเปิดใช้งาน **WebREPL (daemon)** โดยอัตโนมัติหลังจากเปิดหรือบูทระบบทุกครั้ง

```python
import webrepl
webrepl.start()
```

เปิดเว็บเบราว์เซอร์ ไปยัง  [`http://micropython.org/webrepl/#`](http://micropython.org/webrepl/#)  และบนหน้าเว็บดังกล่าว ในช่อง `ws://` ให้ใส่หมายเลข **IP** และพอร์ต **8266** ของอุปกรณ์ไมโครไพธอนที่เปิดใช้งาน **WebREPL** และเชื่อมต่อกับ **Wi-Fi** และอินเทอร์เน็ตได้แล้ว&#x20;

จากนั้นกดปุ่ม **Connect** และใส่รหัสผ่านสำหรับ **WebREPL** ที่ได้ตั้งค่าไว้ ถ้าเชื่อมต่อได้สำเร็จ จะเห็นสัญลักษณ์ `>>>` ให้ลองทำคำสั่งของไมโครไพธอน&#x20;

![](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MLQcaCFt-ayg7DImgFa%2F-MLQckL18CcyvoCbi5Tf%2Fmicropython_webrepl_chrome.png?alt=media\&token=34800c11-792b-45be-b275-9b8cc24d3c9a)

ข้อสังเกต: ถ้าพบว่า หลังจากที่เชื่อมต่อกับ **WebREPL** ได้แล้ว แต่ไม่สามารถพิมพ์คำสั่งใด ๆ ในช่องรับ **`>>>`** ในกรณีนี้ ให้กดปุ่ม **Reset** ของบอร์ด แล้วทำการเชื่อมต่อใหม่อีกครั้ง

นอกจากนั้นบนหน้าเว็บ (ทางด้านขวามือ) มีช่องให้เลือกทำคำสั่ง เพื่อจะสำเนาไฟล์ระหว่างคอมพิวเตอร์ของผู้ใช้กับอุปกรณ์ไมโครไพธอนผ่านทาง **WebREPL**&#x20;

## การใช้งาน WebSocket Client เชื่อมต่อกับ WebREPL

ก่อนหน้านี้เราได้ใช้เว็บเบราว์เซอร์ เชื่อมต่อไปยัง **WebREPL** ของไมโครไพธอนสำหรับอุปกรณ์ **ESP8266 / ESP32** ในระบบเครือข่าย ถัดไปเป็นตัวอย่างการใช้โค้ดภาษาไพธอน เชื่อมต่อกับ **WebREPL** โดยใช้โพรโตคอล **WebSocket** ในลักษณะ **Interactive Shell**&#x20;

ก่อนอื่นจะต้องติดตั้งไลบรารีสำหรับ **Python 3** ดังนี้ (ทดลองใช้กับ **Raspbian OS** สำหรับบอร์ด **Raspberry Pi 4B**)

```
$ sudo python3 -m pip install -U websocket websocket_client
```

จากนั้นให้ดาวน์โหลดไฟล์ [**webrepl\_client.py**](https://github.com/Hermann-SW/webrepl/blob/master/webrepl_client.py) ที่มีผู้พัฒนาและแชร์ไว้ใน **Github**

```
$ wget https://github.com/Hermann-SW/webrepl/raw/master/webrepl_client.py
```

เมื่อดาวน์โหลดไฟล์ดังกล่าวมายังคอมพิวเตอร์ของผู้ใช้แล้ว ให้ทำคำสั่งดังนี้

```
$ python3 ./webrepl_client.py 192.168.1.176 -p 1234
```

ในกรณีตัวอย่างนี้ เป็นการเชื่อมต่อไปยังอุปกรณ์ตามหมายเลข **IP**  **`192.168.1.176`** และรหัสผ่าน **`1234`** (อย่าลืมเปลี่ยนการตั้งค่าให้ตรงกับที่ใช้งานจริง)

เมื่อเชื่อมต่อได้แล้วและมีสัญลักษณ์ `>>>` ปรากฏขึ้น ก็ลองทำคำสั่งผ่านทาง **REPL** และถ้าต้องจบการทำงาน ก็พิมพ์คำสั่ง `exit()` หรือพิมพ์ตัวอักขระ **D** เพียงตัวเดียวในหนึ่งบรรทัด (ซึ่งหมายถึง **Ctrl+D**) แล้วกด **Enter**&#x20;

![รูปภาพ: ตัวอย่างการใช้ webrepl\_client.py เชื่อมต่อกับ WebREPL](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MLQh1CLG6DFHligT_V1%2F-MLQxUUUkiyjL-RRlsGx%2Fwebrepl_client_esp32.png?alt=media\&token=74ff374f-7766-4383-a64b-e0d9564d4dbf)

## กล่าวสรุป

การใช้งาน **WebREPL** สำหรับไมโครไพธอน ก็เป็นอีกหนึ่งช่องทางเพื่อเชื่อมต่อไปยังอุปกรณ์ไมโครคอนโทรลเลอร์ในระบบเครือข่าย นอกเหนือจากการเชื่อมต่อด้วยสาย **USB** ผ่านทาง **USB-to-Serial**&#x20;
