c# 溫溼度變送器感測器開發(一)
阿新 • • 發佈:2019-02-05
c# 溫溼度感測器開發用的是tcp或者udp通訊,這裡介紹udp用法
程式碼就不上傳了,想要可以私聊我,在開發過程中,不可避免出現問題,需要先除錯走通,我是用的
裝置是用的這款
新建一個工程,直接傳送請求資料命令
/// <summary> /// 傳送資訊 /// </summary> /// <param name="obj"></param> private void SendMessage(object obj) { string message = (string)obj; //00 B0 D0 2A B7 3C FF 03 00 00 00 06 byte[] mybyte = new byte[12]; mybyte[0] = 0x00; mybyte[1] = 0xB0; mybyte[2] = 0xD0; mybyte[3] = 0x2A; mybyte[4] = 0xB7; mybyte[5] = 0x3C; mybyte[6] = 0xFF; mybyte[7] = 0x03; mybyte[8] = 0x00; mybyte[9] = 0x00; mybyte[10] = 0x00; mybyte[11] = 0x06; IPEndPoint remoteIpep = new IPEndPoint( IPAddress.Parse(ConfigurationManager.AppSettings["IP"]), Int32.Parse(ConfigurationManager.AppSettings["Port"])); // 傳送到的IP地址和目標埠號 udpcSend.Send(mybyte, mybyte.Length, remoteIpep); udpcSend.Close(); } private void sendMessage() { // 實名傳送 try { IPEndPoint localIpep = new IPEndPoint( IPAddress.Parse(ip), Int32.Parse(ConfigurationManager.AppSettings["CurrentPort"])); // 本機IP,本機埠號 udpcSend = new UdpClient(localIpep); Thread thrSend = new Thread(SendMessage); thrSend.Start(); } catch { } }
傳送成功後,感測器會反饋給你結果,然後就是接收資料
/// <summary> /// 開關:在監聽UDP報文階段為true,否則為false /// </summary> bool IsUdpcRecvStart = false; /// <summary> /// 執行緒:不斷監聽UDP報文 /// </summary> Thread thrRecv; /// <summary> /// 執行緒:監聽是否停止工作 /// </summary> Thread thrWork; /// <summary> /// 按鈕:接收資料開關 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnRecv() { if (!IsUdpcRecvStart) // 未監聽的情況,開始監聽 { IPEndPoint localIpep = new IPEndPoint(IPAddress.Any, Int32.Parse(ConfigurationManager.AppSettings["CurrentPort"])); // 本機IP和監聽埠號 udpcRecv = new UdpClient(localIpep); thrRecv = new Thread(ReceiveMessage); thrRecv.Start(); IsUdpcRecvStart = true; Trace.Write("UDP監聽器已成功啟動"); this.tbOut.AppendText("UDP監聽器已成功啟動"+"\n"); } else // 正在監聽的情況,終止監聽 { //thrRecv.Abort(); // 必須先關閉這個執行緒,否則會異常 //udpcRecv.Close(); //IsUdpcRecvStart = false; //Trace.Write("UDP監聽器已成功關閉"); } } public static string byteToHexStr(byte[] bytes) { string returnStr = ""; if (bytes != null) { for (int i = 0; i < bytes.Length; i++) { returnStr += bytes[i].ToString("X2"); } } return returnStr; } /// <summary> /// 接收資料 /// </summary> /// <param name="obj"></param> private void ReceiveMessage(object obj) { IPEndPoint remoteIpep = new IPEndPoint(IPAddress.Any, 0); while (isOpen) { try { byte[] bytRecv = udpcRecv.Receive(ref remoteIpep); dealData(bytRecv); string message = byteToHexStr(bytRecv); status = GetStatus.SUCCESS; //FileUtils.SaveFile("\\log\\logData.txt", message); //Trace.Write(message+"\n"); //this.tbOut.AppendText(message); } catch (Exception ex) { Trace.Write(ex.Message); break; } } }