RS232 with Arduino
今天來聊一下RS232這個介面,這個介面至今也還在工廠或是一些設備上可以發現,那不免除的還是要來了解一下歷史,根據網路上查到的資料,可以先從它的物理特性來認識。
RS232
介紹
RS-232是美國電子工業聯盟(EIA)制定的序列資料通訊的介面標準,它被廣泛用於電腦序列介面外設連接,像是早期電腦的Comport、PLC 的 通訊或是現在的工業電腦也都還看的到。
那為甚麼工廠設備會喜歡使用RS232介面呢?
1.
電壓允許範圍: 訊號大小在正的和負的3-15v之間
2.
傳輸距離較ttl遠,約15米以內
雖然現在較多工廠開始轉成透過RJ45 或是無線的方式,為了方便擴充或布置,詳細的細節請看這裡https://zh.wikipedia.org/wiki/RS-232
電壓可以跟據電路設計,從3-15V之間,在有些場合或環境下,通訊間的電壓,提高,有助於避免通訊時被干擾。
常見的RS232 模組在使用時需要注意
1.
ttl轉RS232晶片型號
2.
該模組設計的電壓為多少
3.
支援的baudrate 到多少
4.
TxRx有沒有接對
RS232
通訊波形
這邊我先透過邏輯分析儀觀察TTL的波形,再用示波器觀察波形
(透過comport 發送’F’,在邏輯分析上得到的波形及結果)
這邊可能會有人有疑惑波形怎麼不像,不過沒關係,透過示波器的反向功能就可以了
(反向完的結果與TTL的波形相同)
1.
USB 轉 RS232
2.
RS232 轉 TTL
3.
Arduino NANO
4.
Arduino NANO 擴展版
5.
杜邦線若干條
軟體
1.
Arduino IDE
2.
Realtern
軟體載點連結
https://www.arduino.cc/en/software
https://sourceforge.net/projects/realterm/
安裝完後開啟
1.
點選port->找到USB to Rs232的port
2.
設定通訊相關參數
3.
發送ASCII 文字
實驗目標
透過RS232 控制arduino NANO 上的 LED燈
Step1 了解模組晶片
先看一下晶片模組晶片的規格
晶片規格
結論
1. 使用arduino 板子上的5V供電-OK
2. BaudRate 不可以開超過120000
Step2、接線
接線說明
要注意有些模組的TX RX腳位沒有替換掉,如果照下面接線沒有反應,記得把TX pin RX Pin對調一下(ps因為我這個模組試完之後需要Rx 接 Rx才有資料)
Arduino
NANO |
RS232
模組 |
5V |
Vcc |
D10 |
Rx |
D11 |
Tx |
Gnd |
Gnd |
這邊先說解說一下,可能有讀者覺得奇怪,D10跟D11不是數位腳位嗎?為甚麼可以接RS232模組的RxTx,原因是因為這是透過控制IO的輸出入控制來達到接收發送資料,細節下次再寫一篇跟大家分享。
Step3、寫程式
※測試接收發送
透過接收來自usb to RS232的資料並顯示在arduino comport上
程式碼燒錄完後開啟arduino IDE 的 COMPRT及Realterm,在arduino IDE 的COMPORT丟資料可以顯示在Realterm上面,Realterm傳送資料可以顯示在arduino IDE 的COMPORT上。這邊沒有問題後才可以進到下一步。
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()
{
// Open serial
communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port
to connect. Needed for Native USB only
}
// set the data rate for the
SoftwareSerial port
mySerial.begin(9600);
}
void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
在void setup()裡面加入 pinMode(13,OUTPUT);
void setup()
{
// Open serial
communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port
to connect. Needed for Native USB only
}
// set the data rate for the
SoftwareSerial port
mySerial.begin(9600);
pinMode(13,OUTPUT);
}
※撰寫控制命令
String cmd="";
void
loop() // run over and over
{
if (mySerial.available())
{
char recive = mySerial.read();
Serial.write(Serial.read());
if(recive=='\n')
{
if(cmd.equals("HIGH"))
digitalWrite(13,HIGH);
else if(cmd.equals("LOW"))
digitalWrite(13,LOW);
cmd="";
}
else
cmd+=recive;
}
if (Serial.available())
mySerial.write(Serial.read());
}
結果影片
https://github.com/windyman24/Arduino_RS232
參考資料
https://makerpro.cc/2019/08/the-difference-between-rs232-and-uart/
沒有留言:
發佈留言