本書的目的是向讀者介紹如何把傳統的串口通信在網絡上實現,包括局域網和互聯網。首先介紹串口RS-232和RS-485的出現和發展,串口通信的原理和通信及編程;然后介紹以太網和互聯網的通信協議TCP/IP,以及它與串口之間的通信和編程;*后重點介紹幾種通過網絡實現串口通信的途徑,包括使用瀏覽器、基于云路由器和即時通信軟件、用Java的跨平臺語言等。書中的大部分內容為作者多年從事串口通信的研究成果及市場分析,并且加上了美國的*網絡通信技術。難能可貴的是,本書首次把作者的具有專利技術的互聯網串口通信技術的軟件源代碼,以及在美國的先進的研究成果予以公開,僅供讀者學習和研究。
前 言
串行口簡稱串口,可以說,人類文明史就是一部串行通信史。所謂有文明的標志就是有文字記載,而文字只能一個字一個字地寫和讀,這就是一種串行通信。相對于文字和聲音是串行的,圖像就算是并行的。我們不能一目十行地閱讀文字,也不能同時聽多個聲音并加以識別,卻能夠一眼看盡全幅圖像的上下左右。與文字信息相比,人類文明歷史上幾乎沒有留下圖像信息。耳朵聽到的聲音在每一時刻只能有一個音符或者發音,連貫起來就是音樂或者語音,這就是我們在接收串行信息。我們講話,每一瞬間只能講一個語音,這就是我們在發送串行信號。樂譜或者文字就是串行通信的信息。今天我們為了便于理解串行通信技術,經常打比方就像我們在講話溝通一樣。比如,只能有一個人講話(只能有一個主機或服務器),可以有多個人聽(多個從機或客戶端)。講話之前,先稱呼人名,這里的人名就相當于從機或客戶端的地址。講完一段話需要不時停頓,就相當于信號的空閑狀態。
中國古代的狼煙信號是最早的典型的二進制串行通信,在長期的停頓信號無狼煙(可以理解為0-無敵情)的間隔后,突然點燃狼煙(可以理解為信號1-有敵情),這就有效地傳遞了一位二進制信息:1代表有狼煙,同時也代表有敵情。但是在烽火戲諸侯這個故事中,周幽王為了讓褒姒開心,取悅褒姒,點燃了烽火臺,將眾多諸侯都戲弄了一番,果然褒姒覺得有趣,就哈哈大笑起來,后來由于褒姒因為覺得很有意思,就多次點燃烽火臺戲弄眾多諸侯,造成后來諸侯們都不相信周幽王的信號了。這是因為把編碼信號弄混亂了,本來是1表示有敵情換成了1表示無敵情,導致信號混亂而無法正常通信。古希臘的馬拉松為了傳遞一個簡單的信息1(我們贏了),連續跑了40多公里而累倒了。千年后,愛迪生用火車的汽笛來遠程傳輸二進制信號,用長音(代表1)和短音(代表0)組合可以傳輸英文字母的ASCII字符信息。至今我們仍然能夠聽見用輪船的汽笛聲表示到港或離港等信息。現在我們在互聯網上看到的文字、語音、圖像等信息仍然是通過串行通信來傳輸的,有時候網速很慢地打開一個圖像,才慢慢地顯示清晰,你就會懂得什么是串行通信。
互聯網是當今的高新技術。人類文明的未來不一定就是現在定義的互聯網,但一定是更加緊密的互聯關系。早期的人類局限在一個部落內的交流,一般不會超過400個人,這也是我們今天的人所能夠記得的人名的上限。但是今天借助互聯網,在我們的朋友圈和朋友的朋友圈等,我們已經大大地拓展了我們互聯的人數。今天世界人口大約70億,假設平均每人認識100個,理論上只要經過5個人的朋友圈的接力就可以到1005=100億,也就是可以認識全世界的人。人類發展的歷史也是越來越人口密集,同時分工更細、聯系更加緊密的過程,如果這種聯系可以稱為網絡,那么人類的未來還是更加緊密的互聯網絡。本書的副標題借用馬克思《共產黨宣言》扉頁上的一段文字全世界無產者,聯合起來!我改寫為全世界串行口,聯網起來!
可以說,互聯網等網絡串口通信把人類文明的未來與歷史聯系了起來,但是本書還遠沒有寫盡這個宏偉的過程。作者只是把串行口的通信從需要專門的布線到借助互聯網進行通信的發展過程進行了一個簡單的串行的描述。串行口通信在最近幾十年內造就了多個世界五百強的企業或者業界巨頭:Bell、Motorola、IBM、Hayes、MAXIM等。由于本書引用或涉及了許多公司或個人的產品和軟件,比如CAYEE、ZLG、BOSHIKA、zhaojun、張海瑞等,我們一并表示感謝,感謝大家的支持和幫助。如果本書能夠在串行通信的歷史上留下一點小小的火花,我們就已經很滿足了。如果有建議或者意見,歡迎聯系作者:592905661@qq.com(周云波)和Swchou435@gmail.com(Shiwei Zhou)。
作 者
2017年7月
周云波,男,1966年10月出生,現居武漢。華中科技大學教師,博士。曾經在北京航天研究院學習和工作。從事過軍工測控系統的研發、數字電路的教學與科研,串口通信的研究與開發,獲得國家專利十多項,在國內外雜志發表論文十多篇。
目 錄
第1章 串口通信接口介紹1
1.1 串口RS-232介紹2
1.1.1 RS-232接口的電氣特性及物理結構3
1.1.2 異步通信與同步通信及其格式4
1.1.3 RS-232傳輸電纜長度5
1.1.4 RS-232的實際應用5
1.1.5 RS-232接口的缺點及克服7
1.2 RS-485和RS-422簡介8
1.2.1 什么是RS-485接口8
1.2.2 什么是RS-422接口9
1.3 串口RS-422與RS-485的工程應用10
1.3.1 RS-422與RS-485傳輸線上匹配的一些說明11
1.3.2 RS-422與RS-485的接地問題11
1.3.3 RS-422與RS-485的網絡失效保護12
1.3.4 串口RS-485的新發展14
1.4 USB串口通信產品的發展15
1.4.1 第一代產品:USB/RS-232轉換器15
1.4.2 第二代產品:USB/RS-485/RS-422轉換器16
1.4.3 第三代產品:光電隔離USB/RS-232/485/422轉換器17
1.4.4 第四代產品:USB/串口光纖轉換器18
1.4.5 第五代產品:USB網絡串口轉換器18
1.4.6 USB虛擬串口的評論21
1.5 用單片機I/O口軟件模擬串口及實現遠程通信22
1.5.1 TTL電平轉換成差分電平的純軟件方法22
1.5.2 軟件串行口的實現原理23
1.5.3 軟件串行通信的編程24
第2章 串口通信的軟件編程27
2.1 串口調試助手軟件的使用27
2.1.1 一個串口的自己發送自己接收27
2.1.2 一臺計算機的兩個串口之間的通信28
2.1.3 兩臺計算機的兩個串口之間的通信29
2.2 串口通信與擴展的調試軟件29
2.2.1 4232A框內的串口擴展功能37
2.2.2 DIZ4232框內的串口擴展功能38
2.2.3 無串口擴展功能的簡化的串口通信軟件40
2.3 帶串口自動打開等功能的串口調試軟件40
2.4 超高速的串口調試軟件59
2.4.1 如何判斷USB/串口轉換器本身是否支持921.6 kbps波特率59
2.4.2 如何實現USB/串口轉換器的921.6 kbps波特率通信60
第3章 TCP/IP通信軟件編程62
3.1 TCP/IP通信的硬件連接62
3.2 TCP/IP測試工具軟件的使用65
3.3 簡單的VB的Winsock聊天程序實例68
3.4 用VC 編寫的Winsock聊天程序實例75
第4章 通過局域網實現串口通信84
4.1 基于局域網的純軟件串口即時通信84
4.2 通過以太網/串口轉換器實現串口通信107
4.3 串口信號通過以太網傳輸112
4.4 通過Wi-Fi/串口轉換器實現串口通信114
4.5 以太網串口通信產品的發展方向118
4.5.1 有線以太網向無線升級118
4.5.2 百兆向千兆以太網升級120
4.5.3 串口從電口到光纖的升級120
4.5.4 以太網從電口到光纖的升級121
4.5.5 單串口向多串口的發展122
4.5.6 虛擬串口軟件的標準化122
第5章 通過瀏覽器實現串口通信124
5.1 基于瀏覽器的遠程串口控制器125
5.2 基于瀏覽器的云串口通信軟件128
5.3 基于瀏覽器的Java串口編程原理簡介130
5.4 基于瀏覽器的云串口通信的網頁源代碼及解釋131
5.5 IE瀏覽器通過MSCOMM控件與串口外設通信的工程實例142
5.6 基于云串口服務器的互聯網串口通信前景144
第6章 通過路由器實現互聯網串口通信148
6.1 基于路由器的互聯網串口通信的原理148
6.2 已預先內置DDNS域名的云無線路由器150
6.2.1 功能特點150
6.2.2 硬件連接151
6.2.3 上網機器的設置151
6.2.4 無線網絡配置152
6.2.5 虛擬服務(端口映射)和DMZ152
6.2.6 路由器軟件功能界面152
6.3 基于專門云路由器的互聯網串口通信的實現153
6.3.1 本地計算機的設置153
6.3.2 以太網/串口轉換器的設置154
6.3.3 云串口通信測試及虛擬串口154
6.4 基于需要安裝花生殼DDNS的無線路由器156
6.4.1 域名申請,并將其與無線路由器綁定156
6.4.2 檢測動態域名是否正常156
6.4.3 端口映射158
6.4.4 串口聯網設備的配置158
6.4.5 啟動服務器,等待串口聯網設備的連接請求159
6.5 利用無線路由器本身的串口159
6.5.1 用OpenWrt修改無線路由器的程序159
6.5.2 用OpenWrt燒寫無線路由器的程序170
6.5.3 基于AR9331的OpenWrt 路由器核心模塊177
第7章 用即時通信軟件實現互聯網串口通信179
7.1 基于即時通信軟件的串口控制器180
7.2 好靈通即時通信:串口遠程通信的革命184
7.3 互聯網版好靈通串口即時通信軟件的代碼及解釋185
7.3.1 主窗體[frmMain(Client.frm)]窗體的源代碼188
7.3.2 登錄界面[frmLog(Log.frm)]窗體的源代碼199
7.3.3 登錄成功之后的界面[frmLogin(Login.frm)]的代碼201
7.3.4 通信界面窗體[frmChat(Chat.fra)]的源代碼203
7.3.5 接收文件窗體[frmReceiveFile(ReceiveFile.frm)]的源代碼209
7.3.6 發送文件窗體[frmSendFile(SendFile.frm)]213
7.3.7 自動調整界面大小的窗體[frmTip(Tip.frm)]217
7.3.8 顯示版本信息的窗體[frmTip(Tip.frm)]219
7.4 用于互聯網串口即時通信的USB/串口轉換器220
7.4.1 硬件和驅動程序安裝220
7.4.2 好靈通串口即時通信軟件的配合使用221
7.4.3 典型應用223
7.5 Wi-Fi串口即時通信使物聯網成為現實224
第8章 智能手機或平板電腦的互聯網227
8.1 智能手機或平板電腦互聯網串口通信的原理227
8.2 智能手機或平板電腦的設置228
8.3 互聯網/串口轉換器的設置229
8.4 智能手機或平板電腦互聯網串口通信測試230
8.5 安卓智能手機的USB/串口轉換器及互聯網串口通信230
8.6 帶USB-OTG功能的部分平板電腦互聯網串口通信232
8.7 智能手機的藍牙-串口轉換器及互聯網串口通信233
8.7.1 為計算機藍牙擴展無線串口(從模式)235
8.7.2 為安卓智能手機藍牙擴展無線串口(從模式)235
8.7.3 為蘋果智能手機藍牙擴展無線串口236
8.7.4 無線串口透明傳輸(一個主模式,另一個從模式)237
8.7.5 BLU232的設置指令237
8.8 基于FT312D的安卓智能手機USB轉串口設計238
8.8.1 FT312D接口芯片及其硬件連接239
8.8.2 FT312D的USB轉串口的軟件開發240
8.8.3 FT312D串口通信代碼示例241
8.9 智能手機的基于音頻傳輸的互聯網串口通信243
第9章 用Java實現互聯網串口通信246
9.1 使用Javax.comm對串口通信進行編程246
9.1.1 Javax.comm簡介246
9.1.2 下載247
9.1.3 安裝247
9.1.4 API247
9.1.5 實例248
9.1.6 安裝Java Communications API252
9.1.7 硬件的準備252
9.1.8 Comm API基礎252
9.1.9 通信方式254
9.1.10 完整的程序257
9.2 使用Java Socket對TCP/IP通信進行編程263
9.2.1 Java關于TCP/IP通信的Socket添加庫介紹263
9.2.2 簡單的客戶端到服務器單方向TCP/IP信息傳輸264
9.3 本地串口通過TCP/IP 傳輸到遠端串口275
9.3.1 將串口讀入數據輸出到TCP/IP275
9.3.2 將TCP/IP得到的數據傳輸到串口280
9.4 基于Linux服務器的互聯網串口通信283
9.4.1 Linux環境的設定與連接283
9.4.2 連接283
9.4.3 遠端文件的視覺化傳輸285
參考文獻287