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

Si24R1 MODULE.

 รับส่งข้อมูลระหว่างอุปกรณ์ที่อยู่ห่างกัน นอกจากต่อสายไฟกันยาวๆ ก็ใช้อุปกรณ์ส่งสัญญาณเข้ามาช่วย

    RF module จึงต้องมา ที่เคยใช้งาน ง่ายทีสุดก็เป็น interface RS485 ส่วน Serial UART นี่ก็ง่าย ตั้งค่าช่องรับสัญญาณให้ตรงกัน ตั้งโหมดให้เหมือนกัน ต่อสายเข้าแต่ละฝั่ง เป็นอันจบพิธี ไม่ต้องเขียนโค้ดเลย

    Si24R1 ที่เป็น module แบบ SPI interface อันนี้ต้องใช้คู่กับ MCU และต้องเขียนโด้ดสั่งงาน จึงจะรับส่งข้อมูลกันได้

    ได้ลองอีกเช่นเคย เอามาวัด T,H แล้วส่งไปให้เครื่องรับ ฝั่งรับจะมีหน้าจอแสดงผลจากการวัดค่าที่ส่งมาให้ เอาแค่ส่งสัญญาณทิศทางเดียว 

 [DHT11] <===> [NANO] --------- Transmit --------> [NANO] -----> [OP320]

    งานนี้ต้องอ่านค่าจากเซนเซอร์ DHT11 เอาค่าที่ได้มาทำ PAYLOAD ให้แอดเดรสตรงกันกับที่ต้องแสดงผลใน OP320 เมื่อส่งไปให้เครื่องรับแล้ว ฝั่งรับ ก็รับข้อมูลมา แล้วก็ส่งต่อออกทาง TX pin ไปยัง OP320 ที่ใช้โปรโตคอล RS485 เพื่อแสดงค่า

Fig. 1 Data transmitted to receiver.


     การต่อสาย
        NANO    OP320

        TX -------TX
        ถ้า cross กัน เดี๋ยวจะกลายเป็นการโปรแกรม OP320


    เอาเข้าจริง ถ้าต้องการส่งข้อมูลลักษณะนี้ ง่ายกว่านี้ต้องเป็น module อีกแบบ แบบที่มี uart TTL port แบบนั้นจะง่าย ไม่ต้องเขียนโค้ด แต่ถ้าง่ายที่สุดก็เอาของสำเร็จรูปมาใช้ดีกว่า ไม่แพงเท่าไหร่ เคยซื้อกล่องมาประมาณ 11 USD เอง รับส่งก็ใช้ 2 กล่อง

 


วันเสาร์ที่ 23 ตุลาคม พ.ศ. 2564

ESP-01 VS RELAY MODULE.

 ESP-01 vs RELAY MODULE.

    ESP-01 มันมี serial ซึ่งเอาไปใช้ในการรับส่งข้อมูลระหว่างอุปกรณ์ ต้องการแค่สายเดียวเพื่อส่ง จะใช้ GPIO1 หรือ GPIO2 ก็ได้ (ถ้าจะใช้ GPIO2 ต้องใช้ software serial)

    นอกจาก NANO แล้ว ก็ยังเคยลองเอา ESP-01 ไปเป็น controller เพื่อควบคุม relay 16 chanels แต่แค่ลองเปิด-ปิด วนๆ

    มันก็ทำงานได้ ไม่มีปัญหาอะไร แต่ต่อสายผ่าน adapter RS-485/TTL
ถ้าเอาไปสั่งผ่าน wifi ก็มีสวิทช์ให้ใช้อีกบานเบอะ แต่ยังไม่ได้ลอง

    งานนี้สั่งอย่างเดียวใช้สาย TX จากบอร์ด ESP-01 ไปใช้งาน ต่อเข้ากับ TX ของ adapter ใช้ RS485 Protocol ในการสื่อสาร

 Fig.1 ESP-01 mounting on an old relay module.
 
   
จะให้ดีต้องใช้แผ่นวงจรยึด ESP-01 แต่ตอนลองใช้ relay module เก่ามาใช้งานแทน รุ่นที่มี Pin TxRx Vcc Gnd ก็ต่อสายออกไปใช้งานได้สะดวก มีไฟเลี้ยง 3.3v ให้ ESP-01 ด้วย

 
Fig.2 Relay controller board.

ยังไม่ได้คิดเอาไปใช้งานอะไรต่อ ได้ลองแล้วก็หายคาใจ

 



วันพุธที่ 20 ตุลาคม พ.ศ. 2564

OP320 IN SLAVE MODE.

 บันทึกกันลืม เขียนไว้อ่านเอง กลับมาอ่านบางที มีงง เขียนเรื่อยเปื่อย หาอะไรเป็นชิ้นเป็นอันไม่ค่อยได้ เขียนๆ แก้ๆ มันจะออกมั่วๆ หน่อย

    ยังเหลืออีกหนึ่งโหมดของ OP320 AS นั่นคือ OP is slave เคยได้ทดลองใช้งาน มันเป็น slave mode ที่มี register ให้ใช้ไม่มากนัก
    1. มี data register ตั้งแต่ 0x00 - 0x9F หรือแค่ 160 หมายเลขเท่านั้น สามารถอ่านได้ เขียนบันทึกได้ ใช้ modbus protocol ในการสื่อสาร ใช้งาน FC 01, 03, 05, 06 ได้
    2. มี coil ให้ใช้งานอีก 0x000 - 0x9FF หรือ 2560 หมายเลข ไว้รอให้เลือกใช้งาน โดยที่ใช้งาน FC 01, 05, 06 ได้ และเหมือนกับว่ามันเป็น register เดียวกันกับ data register ถ้าเรากำหนดค่า register ให้เท่ากับ 255 ฝั่ง coil ที่มีเลขเดียวกันกับ register นี้จะแสดงสถานะว่าเปิดอยู่
    3. กำหนด Slave ID ได้ ตอนกำหนดในโปรแกรม OP เป็น DEC แต่ตอนเขียนคำสั่งส่งไปต้องเป็น HEX

    เป็นการถามตอบ(Q&A) ระหว่าง Master - Slave ถ้าคำสั่งส่งมาสำเร็จ OP จะตอบกลับด้วยคำสั่งเดิม จะใช้ในการตรวจสอบก็คงดี

ตัวอย่าง การกำหนดค่า

    Q: 01 06 00 01 00 FF CR C1 เป็นการส่งข้อมูลไปให้ data register 0x0001 กำหนดค่าให้เท่ากับ 255 (0x00FF)
    A:  01 06 00 01 00 FF CR C1 ข้อมูลตอบกลับจาก OP320AS

การอ่านค่า

    Q: 01 03 00 01 00 01 CR C1 เป็นการอ่านค่า เริ่มจาก register 0x0001 จำนวน 0x0001 ข้อมูล
    A: 01 03 02 00 FF CR C1 ข้อมูล 2 bytes ค่าเท่ากับ 0x00FF หรือเท่ากับ 255DEC
   

การอ่านและเขียน Coil

   force single coil: FC 05

    Q: 01 05 00 01 FF 00 CR C1        coil 0x0001 กำหนดให้ ON (0xFF00)
    A: 01 05 00 01 FF 00 CR C1

    read coil status: FC 01

    Q: 01 01 00 01 00 02 CR C1    อ่านค่าสถานะเริ่มจาก register 0x0001 จำนวน 0x0002
    A: 01 01 01 03 CR C1              จำนวน  1 byte สถานะ 0x03 = 0011
BIN หมายถึง bit 1,2 = ON (register 1, 2, 3,...n) โดยที่ 1 หมายถึงเปิด ส่วน 0 คือปิดอยู่

    ก็เอาไปใช้งานควบคุมเครื่องหรือแสดงสถานะการทำงานได้ผ่าน coil ที่มีอยู่ แต่งานถนัดของมันเอาแค่แสดงผลนี่ก็พอแล้วล่ะ

Fig.1 NANO Sending data to OP320 for displaying.

Fig.2 NANO send data to OP320.
 
 
Fig.3 NANO send 1s counter to  OP320.


 

ต่อสาย
NANO        OP320
   Rx
--------------Rx
   Tx
--------------Tx

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

OP320 AND ARDUINO NANO, LED CONTROL.

     เคยลองใช้งาน hardware serial ในการสั่ง เปิด-ปิด LED ของ NANO งานนี้ ใช้ OP320 เป็น Master และตัว NANO เป็นตัว Slave

    ใช้ MC protocol ของเครื่อง OP320 เป็นตัวกำหนดรูปแบบการสื่อสาร (ชุดคำสั่งต่างๆ) เมื่อตอนทำงาน OP320 จะส่งคำขอมายัง NANO แล้ว NANO ต้องตอบกลับไป ถ้าเราเอาคำสั่งนั้นมาใช้งาน ก็ใช้ควบคุมเครื่องได้อย่างที่เคยบอกไว้ เช่นถ้าส่งคำสั่ง ON Auxiliary Coil M0 เข้ามาที่ตัว NANO ก็ให้ไป digitalWrite HIGH ขาไหนสักขาของ NANO และถ้าส่งมาอีกรอบก็ให้ digitalWrite LOW ขาเดิมนั้น

คำสั่งมันจะวนๆ กันไปจนครบตัวแปร ตามที่เราเขียนไว้ที่ OP320

        [OP320] ----request1---->[NANO]

        [OP320] <-----reply1-------[NANO]

        [OP320] ----request2---->[NANO]

        [OP320] <-----reply2-------[NANO]
                                    .
                                    .

    ความยากก็คือต้องจัด PAYLOAD ASCII + LRC ไปให้ OP320 ต้องเป็นไปตาม protocol ไม่งั้นมันจะไม่ตอบกลับ

Fig.1 OP320 control output NANO.

 


 

วันอาทิตย์ที่ 17 ตุลาคม พ.ศ. 2564

ARDUINO AND RELAY MODULE

    module relay กับ controller ต่างๆ นอกจากการสั่งงานโดยตรงจาก digital pin HIGH, LOW state ยังสามารถติดต่อกันได้ทาง serial port จะติดต่อกันยังไง ก็อยู่ที่ module กำหนดมา อย่างที่เคยได้ลอง เป็น relay module ที่ใช้ RS485 protocol โดยที่ module จะเป็น slave และตัว controller เป็น master

    คำสั่งที่ใช้ควบคุมการเปิด-ปิด อ้างตามคู่มือ ประมาณนี้

    15 06 00 01 01 00 CR C
        1st byte คือ Slave ID สามารถกำหนดได้ตามความต้องการ
        2nd byte คือ Function Code
        3rd, 4th byte คือ address เริ่มจาก 0x0001 - 0x0010 นับให้ได้ 16 นะ
        5th, 6th byte คือ control code 0x0100 เป็นการเปิด และ 0x0200 หมายถึงปิด
        7th, 8th byte คือ CRC check

    เมื่อใช้งานคู่กับ controller แบบที่ใช้ serial port ก็ลดจำนวนสายไฟได้ สะดวกประมาณหนึ่ง แต่แลกกับการเขียนโค้ดคำสั่ง

    สั่งเปิดไปแล้วก็ต้องสั่งปิดมันด้วยไม่งั้นมันจะค้างสถานะนี้ไว้ ตอนเปิดทีแรกก็ควรให้มัน all close ด้วย
        15 06 00 00 07 00 CR C        all ON
        15 06 00 00 08 00 CR C        all OFF

Fig.1 Arduino and 16CH relay module.


วันอาทิตย์ที่ 10 ตุลาคม พ.ศ. 2564

SENDING ASCII WITH RS COMMAND.

 วันนี้เขียนเรื่องการส่ง ASCII ด้วยชุดคำสั่ง RS ใน FX3U PLC (Chinese version) บางทีจะใช้ในการส่งค่าต่างๆ ไปยังอุปกรณ์อื่นๆ สัญญาณออกทาง RS485 Port

    รูปแบบของคำสั่งนั้นมันต้องเตรียมข้อมูลให้ครบ จากนั้นก็ส่งไป ต้องเตรียม data register สำหรับจัดเก็บข้อมูลตอบกลับด้วย

         command input              1        2            3        4          5
    |----||-----------------------------[    RS     D100     K9     D200     K9 ]--------|
    |----||--------------------[SET Transmit Message (กำหนดข้อความ)   ]--------|
    |                |------------------------------------------------------[SET M8122 ]----|
    |----|M8123|-----------------------[ PROCESS RECEIVED MESSAGE ]---|
    |                        |---------------------------------------------------[RST M8123]---|

โดยที่
1. กำหนดชุดคำสั่ง เพื่อเริ่มการใช้งาน
2. Data register สำหรับจัดเก็บข้อมูลที่จะส่งออกไปด้วยคำสั่ง RS (ข้อมูล ASCII ทั้งหลายแหล่จะเก็บไว้ที่นี่) โดยเริ่มจาก D100 เป็นต้นไป คือเริ่มเก็บใน D100 D101 D102...
3. จำนวน character ที่จะส่ง
4. สำหรับเก็บข้อมูลตอบกลับ เริ่มเก็บจาก D200...
5. จำนวนของข้อมูลตอบกลับมาที่จะเก็บ

เรื่องที่ต้องเข้าใจต่อไปก็คือ การจัดเก็บข้อมูลของ Data Register ว่ามันเก็บข้อมูลแบบไหน เรียงกันยังไง
    byte order

Fig.1 Byte order [source:Intel byte order https://cse.unl.edu]

    PLC นี้ Data register( D) มันเก็บได้ 1word หรือ 2 characters โดยที่ 1 character = 1 byte = 8 bit จำได้ไหมว่า 8 bit นี่มันประกอบด้วย Hex 2 ตัว (อย่างเช่น FF = 255 DEC = 1111 1111 BIN )
การจัดเรียงข้อมูลใน Data register( D) นั้นมันเรียงแบบไม่เข้ากับสามัญสำนึกเรา ทั้งนี้มันเลือกได้ว่าจะเก็บ 16bit หรือ 8bit ใน 1 Register ทีนี้ลองดู 16bit เทียบกับ 8 bit เมื่อเก็บข้อมูล String ABCD

        8bit                                                    16bit
UPPER LOWER                            
    UPPER LOWER
    [ -]     [A ]        D100               
            [B]     [A]        D100
    [ -]     [B ]        D101                            [D]     [C]        D101
    [ -]     [C ]        D102                            [-]       [-]         D102
    [ -]     [D ]        D103                            [-]       [-]         D103   
 
16 bit ใช้ D น้อยกว่า คำสั่งก็สั้น แต่ก็เข้าใจยากหน่อย
การจะใช้ 8 หรือ 16bit สามารกำหนดได้ โดยใช้ flag M8161 ถ้า ON 8bit และ OFF 16bit

    |----|M8002|-----------[SET M8161]---|         กำหนดแบบนี้ใช้การเก็บ 8bit

อยากส่งค่าอะไร ก็ MOV Hxx Dxxx  

    ตัวอย่าง Ladder ที่เขียนไว้ ใช้แบบ 16 bit ส่งคำว่า TEST ออกไป ค่าที่ส่งต้องเปิดตาราง ASCII Table เพื่อเอาค่า Hex มาใช้งาน
    ลืมเขียนถึงการกำหนดรูปแบบสื่อสารเลย ต้องกำหนด protocol สื่อสาร เพราะเราต้องส่งข้อมูลหาอุปกรณ์อื่น ฉะนั้นต้องตั้งค่าไว้ให้เหมือนกัน ไม่เหมือนกันก็ส่งหากันไม่ได้
กำหนดค่าให้กับ flag M8120 อ้างอิงตามคู่มือ ตามตัวอย่างใช้ HC086 ( 9600bps 7E1)



Fig.2 Example Ladder


Fig.3 Devices Monitoring.


Fig.4 Receiving message from RS command.


เอาคร่าวๆ แค่นี้ก่อน
ที่ทดลองไว้มันส่งข้อมูลออกทาง RS485 port ของ FX3U ผ่านตัวแปลงสัญญาณ RS485/TTL เข้า FX2N

FX3U ---------------->[RS485/TTL]------------------>[FX2N]

A-------------------------A/ RX----------------------------RX
B-------------------------B/ TX-----------------------------TX
                                 /VCC---------------------------VCC
                                 /GND---------------------------GND


At Dormitory
Oct10,2021


     


วันพุธที่ 6 ตุลาคม พ.ศ. 2564

SPEED UP WRITING TO PLC, FX SERIES

     เคยได้ลองใช้งาน PLC จากจีน อันเล็กๆ ที่มีไม่กี่ IO ราคามันถูกมาก เหมาะกับงานเล็กๆ เอาแค่ FX series ก็เลือกใช้งานกันไม่หวาดไม่ไหว
    แต่อันเล็ก ราคาถูก มันก็ได้ตามราคา บางรุ่นไม่มี RS232 ไม่รองรับ RS485 ฯลฯ ก่อนจะซื้อก็ควรคิด ว่าต้องการอะไรบ้าง แล้วก็ซื้อให้ตรงตามที่ต้องการใช้งาน

    อันเล็กที่มีใช้งานอยู่ FX2N-10MT อันนี้มีแต่ TTL port และ baud rate ก็ต่ำ ต้องตั้งไว้ที่ 9600 7E1 (7 bit, even, 1 bit) เวลาจะ up load ต้องใช้ TTL-USB adapter
    การโหลดโปรแกรมมันนาน ไม่เหมือน FX3U ที่ baud rate 34800bps แต่ผู้ขายได้แนะนำวิธีการทำให้ไวขึ้นดังนี้

    ปรับค่า memory capacity ให้ต่ำสุด เอาแค่ 2000 steps ก็เพียงพอกับการใช้งานทั่วไป ส่วนวิธีตั้งทำได้ดังนี้



Fig.1 Enter to PLC parameter.

 
 
Fig.2 Selecting memory capacity to 2000 steps.
Fig.3 Writing to PLC.

 
การตั้งค่าประมาณนี้ ก็พอจะทำให้ write to PLC ไวขึ้นบ้าง แต่ไม่ถึงกับปรู๊ดปร๊าด
เขียนไว้กันลืม

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

PLC DISPLAY, JL1N-LED-0.56

      

Fig.1 FX2N+PLC display

 

    อยากรู้ว่า PLC FX2N-10MT ทั้งรุ่นที่มีและไม่มี RS232 port มันสื่อสารอะไรกับ display ผ่าน TTL port หรือ RS232 port 

    การทำลักษณะนี้เป็นการทำ reverse engineering เราเลือกใช้วิธีการ sniffer ข้อมูลที่ส่งไปมา เอาแบบง่ายหน่อยก็ไปหา MX-component driver แล้วก็ไปดูโค้ดในนั้น หรือไม่ก็ไปหาอ่านคู่มือการสื่อสารของตัว PLC และหนังสือมันน่าจะอ่านลำบากหน่อย อังกฤษทั้งดุ้น คงต้องพักทางนี้ก่อน เอาเป็นว่าต่อสายดูจาก serial monitor เอาก่อนละนะ

Fig.2 FX2N-10MT TTL port.

    เอา display มาต่อกับ PC ลองกดๆ ปุ่มโน่นนี่นั่นแล้วสังเกตุดูที่ Serial monitor (สำหรับ FX2N 9600,7E1 และ FX3U 38400_7E1) พบว่ามันส่ง ASCII มาหากัน มันส่งมารัวๆ เลย

        [display] ---send-request-----> [PLC]/[PC]
       
[display] <---send-reply------- [PLC]/[PC]

ข้อมูลที่ส่ง

Request: ถามค่าของ D0, D2

<STX>0100008<ETX>5C            //08 หมายถึง 8 bytes และ 5C คือ LRC
Reply: ตอบกลับค่า D0, D2

<STX>140000
0064000000<ETX>12  //12 คือ LRC

ซึ่งมันจะแสดงบน display เลข D2 = 64H = 100 ,  D0 = 14H = 20

Fig.3 Data displaying on PLC display

 

    PLC Display มันมีปุ่ม 1. MODE 2.UP 3.DOWN และ 4.RESET โดยที่
        UP            ใช้ในการ ON-OFF M171
        DOWN    
ใช้ในการ ON-OFF M172
        RESET    
ใช้ในการ ON-OFF M173

        MODE เอาไว้ปรับตั้งค่า register D ของ PLC โดย 1.กดปุ่ม mode ค้างไว้ 2.เลือกหมายเลข register (กด up-down เพื่อเปลี่ยนค่า) จากนั้นกด mode ค้าง 3.กำหนดค่า register เมื่อได้แล้วค่าที่ต้องการแล้วให้กด mode ค้างเพื่อบันทึก 4.จากก็กด mode ค้างเพื่อออกจากโปรแกรม

 
    พอเอาคำสั่งที่ใช้ ON/OFF M171 ไปลองส่งจาก PC หา PLC FX2N-10MT มันตอบกลับมาตามปกติ
และยังควบคุม PLC ได้อีกด้วย (ทั้งนี้เราต้องเขียนโปรแกรม PLC ให้ใช้ M171, M172 และ M173 ในการ ON-OFF  ใน Ladder)

    เลยเถิดจนถึงเอา NodeMCU ไปส่งคำสั่งให้ PLC ก็สามารถ ON-OFF ได้เช่นเดียวกัน

Fig.4 FX2N and NodeMCU communication.
 

นี่คือคำสั่งที่ใช้ในการส่งเข้าไปใน PLC ผ่านทาง TTL port เพื่อจะ ON/OFF coil M171-M173

    #STX7AB08#ETX25----------ON M171
    #STX8AB08#ETX26----------OFF M171

    #STX7AC08#ETX26----------ON M172
    #STX8AC08#ETX27----------OFF M172

    #STX7AD08#ETX27----------ON M173
    #STX8AD08#ETX28----------ON M173

และจากการใช้ HMI-OP320 เพื่อลองแบบเดียวกันทำให้ได้ว่า
    #STX70004#ETXFE------- ON X0
    #STX80004#ETXFF------- OFF X0

    ลองเอาไปใส่ NodeMCU ก็ ON-OFF ได้ตามที่ควรจะเป็น ประมาณนี้ เราก็ติดต่อกับ PLC Serial port ได้แล้ว จะเอาไว้ทำการควบคุม PLC ผ่าน NodeMCU /Wifi อีกชั้นก็คงได้

Fig.5 NodeMCU display number on L1N-LED


    แต่ที่ทำมาทั้งหมดทั้งปวง ทำไปก็แค่สนอง Need ตัวเอง
แค่นี้จริงๆ



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

INHAOS MD-Nano485

    ผ่านไปเห็นบอร์ด NANO ที่ใช้ชิป MD-3248P ไล่เรียงอ่านก็เห็นคุณสมบัติมันบางอย่างที่ต่างไปจากชิปฮิตๆ อย่าง Atmega328P อาทิ
    ADC 10-16bit ตรงจุดจุดนี้น่าจะดี มันละเอียด 0-65535 แต่ก็ใช้เวลา 8ms ในการทำงาน สามารถเลือกได้ว่าจะเอากี่ bit คือสั่งได้ alalogRead_11bit(), alalogRead_12bit(), alalogRead_13bit(), ... alalogRead_16bit()
    ADC ของ Atmega328P มันแค่ 10bit เอง มีค่าได้ทั้งหมด 2^10 = 1024 คิดแบบเลขก็ 0 -1023
ใน PLC FX3U ที่ใช้งานทั่วไป ก็ยังใช้งานที่ 12bit มีค่าระหว่าง 0-4095

นึกในใจก็ยังอยากจะลองหามาเล่นสักหน่อย เผื่อจะได้ประโยชน์อะไรกับมันบ้าง

Fig.1 MassDuino summary spec.

    อีกบอร์ดหนึ่งที่อยากลองคือ INHAOS MD NANO485 มันมี RS485 interface builtin กำหนด hardware address ได้ที่ dip switch 5 bit ก็ได้ 32 หมายเลข เริ่มจาก 0 -31 และมี onboard DC2DC ปรับ 8-48V เหลือ 3.3v, 5V เพื่อใช้งานในบอร์ด
มันแลกมาด้วยราคาที่สูงกว่าบอร์ดปกติ 2-3 เท่า

    ตอนนี้ใช้งาน serial pin ผ่าน adapter TTL-RS485 เพื่อติดต่อกับ RS-485 devices. ก็สะดวกดี ความคิดที่มีกับมันก็คือของที่เขาทำมาเฉพาะมันก็น่าจะดีกว่า แค่นั้นเอง

Fig.2 MassDuino NANO485
source:inhaos.com


ก็แค่คิด ไว้วันไหนลองจะเอามาเขียนไว้อ่าน

@Dormitory
Oct 2, 2021 00:30

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 มันก็ออกมาดูได้ระดับห...