2017年8月28日 星期一

DIY - ESP8266:用 Excel 收發 ESP8266 TCP 資料程式(三十五)

DIY - ESP8266:用 Excel 收發 ESP8266 TCP 資料程式(三十五):

完成了 ESP8266 模塊 Soft-AP TCP Server 程式, 便需要考慮用什麼程式接收傳送數據,特別要將接收數據作處理,最好是用 C 語言編寫一個收發程式,但要編寫數據處理或圖像顯示,便要化上較多的時間,筆者覺得如果能使用 Excel 作收發程式,這樣便簡化和縮短編程了,而且數據處理和圖像顯示都是 Excel 的強項,所以便決定選擇 Excel 編寫 TCP Server 收發程式。

Excel 收發 ESP8266 模塊 TCP 資料程式
OS 操作系統: Windows 7 
Excel 版本:Excel 2003 
Excel TCP 資料程式:ESP8266 AP_v1.01 
ESP8266 TCP 收發程式:DIY - ESP8266 - 006 TCP Server UART TX+RX - 20170516

由於 Excel 編寫 TCP Server 收發程式是會使用網絡功能,所以除了使用了 Microsoft Excel VBA,還會使用到 WinSock API(wsock32.dll / mswsock.dll),要確定 WinSock API 已經安裝在 C:\WINDOWS\system32\ ,並在 Microsoft Visual Basic 的編輯器內設定引用。
進入 Excel 編輯器 → 按[工具] (T)→ 點[引用] (R)→ 勾選需要的程式庫 → 確定
WinSock API: C:\WINDOWS\system32\wsock32.dll 
DTPickerDate:C:\WINDOWS\sysWOW64\mscomct2.ocx

程式的設計是收發 ESP8266 TCP 資料,可以設定 IP 地位、Port 位置、收發時間開始和終結、收發的時間段落、單位和儲存檔案。
Excel 程式的 UI 設計
完成設定和安裝後,便可以作 Microsoft Visual Basic 的編程。
Microsoft Visual Basic 編程
Excel VBA 編程: 
檔案 → 開新檔案,打開新檔案 (或按 Ctrl + N) 。 
工具 → 巨集 → Visual Basic 編輯器,進入 VBA 編輯器 (或按 Alt + F11) 。 
選擇功能表命令 插入 → 點擊模組 (Insert → Module) 。 
編寫 VBA 程式。 執行 VBA 模組 (或按 F5) 。 
檔案 → 關閉並回到 Microsoft Excel (或按 Alt + Q) 。
儲存檔案。

Microsoft Visual Basic - OpenSocket:
Function OpenSocket(ByVal Hostname As String, ByVal PortNumber As Integer) As Integer
  
    Dim I_SocketAddress As sockaddr_in
    Dim IPAddress As Long
   
    IPAddress = inet_addr(Hostname)

    'Create a new socket
    socketId = socket(AF_INET, SOCK_STREAM, 0)
    If socketId = SOCKET_ERROR Then
        MsgBox ("ERROR: socket = " + Str$(socketId))
        OpenSocket = COMMAND_ERROR
        Exit Function
    End If

    'Open a connection to a server

    I_SocketAddress.sin_family = AF_INET
    I_SocketAddress.sin_port = htons(PortNumber)
    I_SocketAddress.sin_addr = IPAddress
    I_SocketAddress.sin_zero = String$(8, 0)

    x = connect(socketId, I_SocketAddress, Len(I_SocketAddress))
    If socketId = SOCKET_ERROR Then
        MsgBox ("ERROR: connect = " + Str$(x))

        OpenSocket = COMMAND_ERROR
        Exit Function
    End If

    OpenSocket = socketId

End Function

Microsoft Visual Basic - CloseConnection:
Sub CloseConnection()

    x = closesocket(socketId)
   
    If x = SOCKET_ERROR Then
        MsgBox ("ERROR: closesocket = " + Str$(x))
        Exit Sub
    End If

End SubESPCONN_UDP = 0x20, // ESPCONN_UDP Group
};

相關網址:
※ 安裝 MSCOMCT2.OCX 的 DTPicker 控制項:
※ DIY - ESP8266:Excel 收發 ESP8266 TCP 資料程式問題(三十六)

2017年 8月 28日 天氣報告
氣溫:26.0@ 20:00
相對濕度:百分之 97%
天氣:微雨

1 則留言: