เคยมีงานทำเล่นอยู่เรื่องหนึ่งที่น่าเอามาเขียนไว้กันลืม คือการเอา ESP-01 มาสื่อสารกับอุปกรณ์ ที่มีพอร์ต RS485
ESP-01 ใช้ chip ESP8266EX มันมี MCU Tensilica L106 32-bit, 16-bit RSIC, CPU clock speed 80MHz ซึ่งจะ overclock ได้ถึง 160MHz และก็มี Flash memory 512kB - 1MB ตำแหน่งขาตามรูป
|
Fig. 1 ขาของ ESP-01 [https://diyprojects.io/media/2020/09/esp01-esp01s-pinout-esp8266ex.jpg] |
|
มันมีทั้งหมด 8 ขา VCC, RST, CH_PD,GND เอาไว้ให้มันทำงาน
ส่วนที่เหลือจะมี 4 ขา โดยที่ digital output มักจะใช้ GPIO0,2 ส่วน GPIO1,3 ใช้ เป็น I2C ได้
GPIO0 digital out
GPIO1* Tx0
GPIO2 digital out, Tx1 เวลาใช้ ต้องใช้ Serial1.begin(xxxx); และใช้ส่งอย่างเดียว
GPIO3* Rx0
จาก data sheet มันใช้ขา U0RXD (GPIO3) และ U0TXD (GPIO1) เพื่อใช้ในการสื่อสารและโปรแกรม ส่วน * นี่หมายถึงตอน boot มันจะเป็น HIGH เวลาต่ออุปกรณ์ภายนอก อย่างรีเลย์นี่ ระวังมันเป็นปัญหา สำหรับ ESP-8266 มีขาที่ high ตอนบูท ดังนี้ ใช้งานก็ควร pull up ยกเว้นขา GPIO15
GPIO0
GPIO1
GPIO2
GPIO3
GPIO9
GPIO10
GPIO16
*ถ้าต้องใช้งานกับ relay ขาที่ปลอดภัยมีดังนี้ GPIO4, 5, 12, 13, 14
การโปรแกรมต้องมีพิธีการหน่อยต่อตามรูป ใช้แค่ 3.3V นะ
ตอนโปรแกรม ขามันจะต้องมีสภาวะดังนี้
pin GPIO0 -- Low state ต่อกราวน์
pin CH-PD -- High state ต่อไฟเลี้ยง
|
Fig 2. Wiring while programming [source https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3ldOcf7t_QEVGXOtV0EtrG5TBLPgX-5PABbSOwIQiH7942xFk5LW_Pj5eAXkBy4EFZHWSYJS478A8foWGABy7R5SwOijpSeK-v2ED28Zh-U9f1zSaSFttzYXGgqonIxRTIJ1L5Txq3VSW/s1600/flashing_esp-01.png]
|
เขียนโค้ดให้ส่ง payload ออกมาทาง Tx และ Rx รับข้อมูลเข้าจากอุปกรณ์ serial port ใช้ protocol rs485
[ESP-01 ]----send-payload---->[XY-MD02]
[ESP-01 ]<-----reply-data-------[XY-MD02]
|
|-----> [ TCP server]
ให้แสดงผลออกมาทาง TCP server ประมาณนี้ล่ะนะ
|
Fig.3 Displaying on TCP server
|
การต่อสายสัญญาณ
[ESP-01] [adapter] [RS485 devices]
Rx ------------ Rx | A -------------- A
Tx ------------ Tx | B -------------- B
ส่งคำสั่งไม่ต้องถี่มาก เอาแค่ 2-5 วินาทีต่อครั้งก็พอ รับข้อมูลเข้ามาก็เอาไปแปลงค่าก่อน
ตามที่เคยเขียนไว้ เอา byte x ค่าประจำหลัก
เอาไว้เพิ่ม IO หรือควบคุมอุปกรณ์โดยใช้ RS-485 relay module ก็คงดี
สุดท้าย เป็นตารางแสดงรายละเอียดขา NodeMCU
มันมี hardware serial port อยู่ 2 ชุด
UART0 PIN 1 และ 3 (TX0, RX0 ตามลำดับ) และอาจใช้ pin 15 และ 13 แทนได้ ต้องใช้ serial.swap() หลังคำสั่ง Serial.begin()
UART1 PIN 2 และ 8 (TX1, RX1 ตามลำดับ) แต่ว่ามันใช้ pin 8 ในการ flash chip เท่ากับว่ามันส่งข้อมูลได้อย่างเดียว (ใช้ขา 2 ได้) ส่วนการใช้งาน ก็ใช้ serial1 object
ESP-01 ใช้ GPIO2 เป็น Tx1 ส่วน softwareserial library ถ้ากำหนด SoftwareSerial mySerial(3,2); หมายถึงให้ GPIO3 Rx, GPIO2 Tx
|
Fig.4 ESPxx Pinout
|
|
Fig.5 ESP-01 Pin definition. (at 1.3 USD /44 THB) |
|
|
Fig.6 NodeMCU V.3 (source:/www.teachmemicro.com) |
|
ส่วนบอร์ดไหนที่มี GPIO16 หรือขา D0 จะทำ deep sleep auto wake up ได้
ใช้คำสั่ง ESP.deepSleep(45e6);//sleep 45s , e6 หมายถึง 10^6 us
และต้องต่อสาย D0 เข้ากับขา RESET ด้วย
At Dormitory
Oct01, 2021 15:00