2017年10月17日 星期二

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

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

Excel 的收發 ESP8266 TCP 資料程式(ESP8266 AP_v1.01)是不能作用作 UDP(User Data Protocol,用戶資料報協定) 上,需要修改才可以用在 UDP 收發。
 
Excel 收發 ESP8266 UDP 資料程式
OS 操作系統: Windows 7 
Excel 版本:Excel 2003 
Excel UDP 資料程式:Excel VBA - UDP Client Data Logger v1.0

Excel 收發 ESP8266 UDP 資料程式的 UI 設計
由於 Excel 編寫 UDP Server 收發程式是會使用網絡功能,所以除了使用了 Microsoft Excel VBA,還會使用到 WinSock API(wsock32.dll),要確定 WinSock API(wsock32.dll)已經安裝在 C:\WINDOWS\system32\ ,並在 Microsoft Visual Basic 的編輯器內設定引用。 

Microsoft Visual Basic 編程: 
  1. 檔案 → 開新檔案,打開新檔案 (或按 Ctrl + N) 。 
  2. 工具 → 巨集 → Visual Basic 編輯器,進入 VBA 編輯器 (或按 Alt + F11) 。 
  3. 選擇功能表命令 插入 → 點擊模組 (Insert → Module) 。 
  4. 編寫 VBA 程式。 執行 VBA 模組 (或按 F5) 。 
  5. 檔案 → 關閉並回到 Microsoft Excel (或按 Alt + Q) 。 儲存檔案。

Open UDP
Start Logging
Data Logging
連接 ESP8266 UDP網路
Microsoft Visual Basic – UDP Declare:
' UDP Declare
Public Declare Function bind Lib "wsock32.dll" (ByVal s As Long, addr As sockaddr_in, ByVal namelen As Long) As Long
Public Declare Function recvFrom Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal Flags, fromAddr As sockaddr_in, fromAddrSize As Long) As Long
 

Microsoft Visual Basic – OpenSocket UDP:
Function OpenSocket(ByVal Hostname As String, ByVal PortNumber As Integer) As Integer
  
    Dim I_SocketAddress As sockaddr_in
    Dim IPAddress As Long
    Dim iProtocol As Integer
   
    IPAddress = inet_addr(Hostname)
    iProtocol = IPPROTO_DUP
   
    'Create a new socket TCP
    'socketId = socket(AF_INET, SOCK_STREAM, 0)
    'Create a new socket UDP
     socketId = SOCKET(AF_INET, SOCK_DGRAM, iProtocol)
   
    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 UDP:
Sub CloseConnection()

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

End Sub

2017年 10月 17日 天氣報告
氣溫:25.7@ 20:00
相對濕度:百分之 88%
天氣:微雨


沒有留言:

張貼留言