วันศุกร์ที่ 1 ตุลาคม พ.ศ. 2564

ESP-01 and RS485 devices

     เคยมีงานทำเล่นอยู่เรื่องหนึ่งที่น่าเอามาเขียนไว้กันลืม คือการเอา 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

 

 

 



ไม่มีความคิดเห็น:

แสดงความคิดเห็น

MAPs

วันก่อนได้ลองเขียนแบบ แบบตัวนั้นมันต้องแนบแผนที่สังเขปของโครงการ ลองๆ แล้วก็ใช้ snazzymaps แล้วก็เอามาทำต่อใน inkscape มันก็ออกมาดูได้ระดับห...