教你如何通過MCU配置S2E為TCP Server的工作模式

串口轉以太網, 博客, 物聯網
在上一篇文章中講了“如何通過MCU配置S2E為UDP模式”,相信小夥伴們已經了解了S2E的基本功能,在這一篇中,我們再接再厲,繼續學習一下“如何通過MCU配置S2E為TCP Server的工作模式”,無論是配置UDP模式還是配置TCP模式,都是通過串口轉以太網的方式實現的: 1、接線方式 2、例程說明 打開“通過MCU配置S2E為TCP Server例程”,主程序中第一部分TIM3_Init();是設定一個幀中斷的時間定時器,這是因為該例程MCU的串口是通過幀中斷來接收AT命令配置S2E後返回的數據的。 第二部分USARTX_Init();初始化MCU用到的串口,這裡用USART1_Config();是printf功能,用於查看調試信息。USART2_Config();用於配置S2E,需要注意的是該串口的配置參數需要同S2E的串口配置參數一致,否則配置失敗。 第三部分主循環中的TCP_Server_Mode();用於配置S2E為TCP Server模式。S2E的AT命令列表詳見各個S2E型號的用戶手冊AT命令章節介紹。配置成功,串口打印“TCP Server Config Success!”,配置失敗串口打印“TCP Server Config Fail!”。 /**************************************************** 函數名: TCP_Server_Mode 形參: 無 返回值: 無 函數功能: 通過串口發送AT命令配置S2E模塊 ****************************************************/ volatile uint8_t SendFlag = 0; void TCP_Server_Mode(void) { uint8_t RecvFlag = 1; char * state; switch (SendFlag) { case 0: { Usart_Send(USART2, "AT\r\n"); //終端檢測命令 while (RecvFlag) { if (RX2_Point & amp; FRAME_LEN) { //如果接收到數據 state = strstr((char * ) RecvBuff, "OK"); //判斷回復的數據中是否有“OK” if (state != NULL) { //有 RX2_Point = 0; //接收緩衝區指針置零 RecvFlag = 0; //接收標緻位置零 SendFlag = 1; //發送標誌位置零 printf("Recv:%s\r\n", RecvBuff); memset(RecvBuff, 0, RECV_LEN); //接收緩存清零 } else { //無 SendFlag = 100; //配置失敗 RecvFlag = 0; } } } } break; case 1: { Usart_Send(USART2, "AT+ECHO=0\r\n"); //開啟(1)/關閉(0)回顯命令 RecvFlag = 1; while (RecvFlag) { if (RX2_Point & amp; FRAME_LEN) { //如果接收到數據 state = strstr((char *…
Read More

教你如何通過MCU將S2E配置為UDP的工作模式

串口轉以太網, 博客, 物聯網
W5500S2E-S1是一款工業級串口轉以太網模塊,支持TCP Server,TCP Client和UDP三種工作模式,串口波特率最高可達1.152Mbps,並提供配套的上位機配置軟件,也可通過網頁或AT命令等方式輕鬆配置。 W5500S2E-S1模塊集成了全硬件TCP / IP協議棧以太網接口芯片W5500,網絡通信更加快速,穩定,安全。用戶只需根據手冊中推薦的參考設計原理圖,即可快速完成硬件電路的設計,降低開發難度,節省開發時間。 今天我們就實際的來了解一下W5500S2E-S1基於UDP工作模式的具體操作流程是什麼樣的,下面我們就來看看吧: 具體操作流程 (1),接線方式: (2)、例程說明: 打開“通過MCU配置S2E為UDP例程”,主程序中第一部分TIM3_Init();是設定一個幀中斷的時間定時器,這是因為該例程MCU的串口是通過幀中斷來接收AT命令配置S2E後返回的數據的。 第二部分USARTX_Init();初始化MCU用到的串口,這裡用USART1_Config();是printf功能,用於查看調試信息。USART2_Config();用於配置S2E,需要注意的是該串口的配置參數需要同S2E的串口配置參數一致,否則配置失敗。 第二部分USARTX_Init();初始化MCU用到的串口,這裡用USART1_Config();是printf功能,用於查看調試信息。USART2_Config();用於配置S2E,需要注意的是該串口的配置參數需要同S2E的串口配置參數一致,否則配置失敗。 /**************************************************** 函數名: UDP_Mode 形參: 無 返回值: 無 函數功能: 配置S2E為UDP模式 ****************************************************/ volatile uint8_t SendFlag = 0; void UDP_Mode(void) { uint8_t RecvFlag = 1; char *state; switch (SendFlag) { case 0: { Usart_Send(USART2, "AT\r\n"); //終端檢測命令 while (RecvFlag) { if (RX2_Point & FRAME_LEN) //如果接收到數據 { state = strstr((char*) RecvBuff, "OK"); if (state != NULL) { RX2_Point = 0; //接收標誌位置零 RecvFlag = 0; //狀態標誌位置零 SendFlag = 1; printf("Recv:%s\r\n", RecvBuff); memset(RecvBuff, 0, RECV_LEN); } else { SendFlag = 100; RecvFlag = 0; } } } } break; case 1: { Usart_Send(USART2, "AT+ECHO=0\r\n"); //開啟(1)/關閉(0)回顯命令 RecvFlag = 1; while (RecvFlag) { if (RX2_Point & FRAME_LEN) //如果接收到數據 { state = strstr((char*) RecvBuff, "OK"); if (state != NULL) { RX2_Point = 0; RecvFlag = 0; SendFlag…
Read More

手把手教你如何實現自動固件更新-嵌入式篇

博客
※已刊登在“無線電”07月刊上手把手教你如何實現自動固件更新 —— 嵌入式篇 作者:常席正,魏文龍 我們在上期 “手把手教你如何實現自動固件更新——服務器篇”那篇文章中介紹了通過雲服務器更新固件的方法,並着重介紹了服務器端的前期準備以及軟件設計。這次小熊和大家分享下嵌入式端的軟件設計。相對於服務器端的軟件設計,嵌入式軟件設計需要更為嚴謹,因為固件升級出錯的後果會非常嚴重,因為這個功能一般使用在批量的設備上,而固件是控制系統的核心軟件,因此固件更新出錯的話,會造成設備大面積癱瘓。所以嚴重性不言而喻。 本期我們來介紹一下客戶端的具體實現過程,如圖1所示,根據我們的自動固件更新協議,在與更新服務器建立連接後,服務器會要求客戶端進行一系列驗證,嵌入式設備在通過驗證後,更新服務器會告知此嵌入式設備的最新固件信息,嵌入式設備根據這些信息下載並更新固件 圖1 自動固件更新協議 “下載並更新固件”幾個字囊括了我們所要執行的所有步驟。我們將按照以下步驟分別介紹。 1.下載準備--對Flash進行分區 為了實現‘下載並更新固件’我們先要做一些準備工作,我們把MCU的Flash分為三個區分別為BOOT區,APP區和Backup區,如圖2所示 圖2 內存空間分配 了解了空間分配之後,我們再來看一下我們這個演示中各部分的主要功能: BOOT區: 清空APP區,為新APP寫入做準備; 把暫存在Backup區的新版本程序拷貝到APP區; APP區 APP區是應用程序運行區域,實現正常的網絡連接,並更新固件。 配置網絡參數; 在線固件升級; 每次上電都會從Boot區引導,若判斷上層APP區載入程序是否成功,成功則直接從Boot區跳轉到APP區,正常運行主程序。 Backup區 從服務器接收並備份需要更新的新應用程序,也就是固件存儲區域。 備註:由於備區的大小為112K,所以意味着APP的大小最大為112K ; 程序流程設計 我們完成了對閃存的分區規劃後,就要設計我們程序的流程,圖3是程序執行的流程圖。 圖3嵌入式設備固件更新流程圖 每次啟動嵌入式設備,均從首地址開始執行程序: (1)啟動進入BOOT區,若BOOT檢測APP區的不為空,則跳轉到APP區的首地址執行主程序; (2) APP內的代碼主要實現: 配置網絡參數:配置IP地址,MAC地址,建立網絡連接。 遠程更新固件:客戶端向服務器發送固件版本查詢報文條件符合設定則進入步驟(3) (3)當APP將新版本的固件下載完成後,進入步驟(4) (4)跳轉到BOOT區,執行更新操作; (5) BOOT將APP區擦除,並將新APP從備份區寫入到APP區,寫入完畢後擦除備份區的固件; (6)重啟,重新執行程序。 我們將程序主要分為兩個部分,分別為BOOT程序和APP程序.APP程序即是我們的固件下載程序對應流程圖的(1)(2)(3)步,BOOT程序既是固件更新程序對應流程圖的(4)(5)(6)步: APP 程序設計(固件驗證與下載) APP代碼程序初始化網絡配置參數,實現嵌入式設備與服務器的正常連接,下載固件到備區,圖4描述的為嵌入式設備與服務器的通信過程。 圖4服務器-嵌入式設備通信過程示意圖 固件服務器-嵌入式設備的通信過程大致分為三步: 連接:嵌入式設備分配socket並連接到服務器。 通信:連接建立後。服務器在接收到來自嵌入式設備的請求後發送應答。 關閉:請求/應答完成後關閉連接。 我們APP區的函數主要做的就是下載固件,在程序里我們是通過w5500_version()和w5500_update()兩個函數來實現的,w5500_version()用來驗證當前的版本號與服務器上的版本號是否相同,如果當前版本號小於服務器上的版本號就進行更新。 [sourcecode language="c"]void w5500_version(void) { uint8 recv_buffer[2048]; uint8 version[10]; switch (getSn_SR(W5500_UPDATE)) { case SOCK_ESTABLISHED: if (getSn_IR(W5500_UPDATE) & Sn_IR_CON) { setSn_IR(W5500_UPDATE, Sn_IR_CON); } send(W5500_UPDATE,(const uint8 *)postH,sizeof(postH));//發送驗證 Delay_ms(5000); if ((len = getSn_RX_RSR(W5500_UPDATE)) > 0) { len = recv(W5500_UPDATE, (uint8*)recv_buffer, len); //接收數據 if (strstr((char*)recv_buffer,"\"error\"")) { //報文內包含error,就結束函數 printf("upload error\r\n"); return; } printf("%s\r\n",recv_buffer);//打印服務器響應報文 mid((char*)recv_buffer,"\"version\":",",",(char*)version);//可以獲取路徑 /*********讀取版本號************/ if (strncmp(ver_num,version,7)<0) { update_flag=1; mid((char*)recv_buffer,"\"http://W5500.com/fw_update/upload/","\",",(char*)bin_name);//可以獲取路徑 snprintf(post_msg,sizeof(post_msg), "POST /fw_update/upload/%s HTTP/1.1\r\n"\ "Host:w5500.com\r\n"\ "Accept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*\r\n"\ "Pragma:no-cache\r\n"\ "Accept-Encoding: gzip,deflate\r\n"\ "Connection:keep-alive\r\n"\ "\r\n",bin_name); printf("The version is %s\r\n",ver_num); } else { printf("The version is %s\r\n",version); printf("The version is…
Read More

手把手教你如何實現自動固件更新-服務器篇

博客
※已刊登在“無線電”06月刊上手把手教你如何實現自動固件更新 - 服務器篇   作者:常席正,張博 常見的嵌入式設備的固件更新有兩種方式:上位機工具更新和HTTP嵌入式網頁更新但兩種方式都無法批量更新,都需要用戶手動操作,如果用戶有大量模塊需要更新固件,絕不可能像“把大象放進冰箱”那樣三步就可以解決問題,而且很多廠商的固件因為保密的問題是不開放給客戶的。即使所有問題都不是問題,而用戶更新失敗以及更新錯誤的固件,所造成設備變“磚”的風險也是設備開發者不得不考慮的。        下面給大家介紹一種嵌入式設備批量實現固件更新的方法----通過固件服務器自動更新。只需要有一台雲服務器,一些HTML / PHP和數據庫方面的知識,然後再在模塊里植入HTTP客戶端固件更新的相關代碼。之後用戶只需要將模塊聯網,固件更新就能自動完成。        本人思路如圖1所示。 首先,模塊需要給客戶開放一個可選配置項,即是否允許模塊自動進行固件更新操作。 然後,當模塊自動進行固件更新被允許時,模塊作為HTTP客戶端通過HTTP POST的方式將驗證信息(一般為模塊的MAC地址)以JSON的格式發送至雲服務器。 接着,服務器解析JSON以獲取模塊的MAC地址,跟數據庫中預先保存的MAC地址列表進行對比驗證。如果驗證通過,服務器將通過HTTP POST回復關於最新固件版本的必要信息(包括固件版本號,下載路徑,文件長度,文件校驗HASH值)發給模塊;如果驗證通過,但服務器端出現異常,則服務器給模塊報錯;如果驗證不通過,服務器告訴模塊“該設備未註冊”。 最後,模塊通過解析服務器回復的JSON格式的報文,獲取最新固件版本的信息,並與自身固件版本作比對,如果設備本身固件不是最新固件,則進一步完成下載最新固件並完成更新。 圖1自動固件更新流程 通過以上流程描述可知,實現這套方案同時需要服務器端和嵌入式模塊兩部分的配合,這篇先給大家教一下服務器端需要做哪些工作。 網站服務器環境搭建和網站的建立 首先,需要擁有一個域名和一台雲服務器。關於域名的解析,備案等大家可以自行了解。國內做雲服務器的廠商眾多,易邁雲,阿里雲,騰訊雲等等,我們要實現的這個功能非常簡單,對服務器開銷不大,根據實際需要選一款即可。我用的是阿里雲服務器Windows Sever 2008標準版SP2 32位中文版,配置是1核2G內存2Mbps帶寬掛載40G的系統盤和40G的數據盤。 搭建服務器主要包括3個核心環境,即Web服務器軟件(常用的有IIS服務器和Apache等),PHP和數據庫(常用的有MySQL和SQL Server)。由於這3種核心的軟件更新很快,版本眾多,且相互之間有版本要求的限制,因此推薦使用建站集成軟件包XAMPP.XAMPP集成了Apache的+ PHP + MySQL的,簡單實用,配置靈活,非常利於快速實現一些簡單的服務器功能.XAMPP軟件界面如圖2所示。 圖2 XAMPP軟件界面        XAMPP軟件的安裝很簡單,需要提醒大家的是服務器需要提前安裝最新VC運行庫,否則會導致安裝失敗。安裝好後如圖2所示安裝的Apache和MySQL的服務模塊(綠色√),分別點擊“開始“按鈕啟動Apache Web服務器和MySQL。 網絡服務器搭建完畢,域名也完成了解析和備案,就可以通過瀏覽器訪問到用戶的默認網站。接下來要做的需要將自動固件更新服務器端的一整套代碼,包括HTML和PHP文件替換原有的默認網頁,服務器端環境和網站就搭建完畢了。下面進行詳細說明。   關係數據庫搭建 固件的所有關鍵信息都是通過數據庫保存的,PHP文件只是用於對數據庫進行必要操作腳本,因此完善,清晰的數據庫內容和結構對於後續的PHP代碼編寫非常重要。接下來我們需要先完成數據庫的搭建。 點擊MySQL的模塊同行的“管理”按鈕,進入數據庫。 如下表1所示,新建一個數據庫“fw_update”,排序規則為utf8_general_ci。該數據庫下新建3個數據表,分別是“fw_list”,“device_list”以及“DEVICE_TYPE”。 device_type:設備類型數據表,廠商的產品可以有多種型號(默認每種設備類型只有一種固件)。下設2個字段,包括一個自增長的主鍵uId和設備類型名稱uName。 fw_list:固件清單數據表,記錄廠商上傳至服務器的每一個固件的詳細信息,包括typeId(設備類型名稱編號),uPath(固件大小),uHash(固件哈希校驗值) ,哈希的作用是文件在傳輸前和傳輸後分別計算一個校驗值,如果兩個校驗值相同,則說明文件傳輸沒有發生錯誤),版本號(3分段,v1.v2.v3) 。其中,TYPEID字段需要設置為同DEVICE_TYPE中的的uId相關聯。 device_list:設備列表,記錄出廠模塊的MAC地址和設備類型,typeId字段也需要設置為同device_type中的uId相關聯。 表1數據庫結構        該數據庫的理解是:每一個設備對應唯一的一個MAC地址,也對應一種設備類型,而每一種設備類型對應有多個版本的同一類固件這樣,關係數據庫就建好了,目前還是一個空的數據庫,後續需要管理員通過固件上傳操作,將不同設備類型,不同版本的固件上傳至服務器即可。   固件上傳部分 固件上傳網頁如圖3所示,管理員上傳固件時需要選擇設備類型,選擇需要上傳的固件以及填寫固件版本號,然後點擊“確定”,上傳的固件信息將會交給服務器腳本PHP去處理。 圖3固件上傳界面 HTML代碼如下: 01 < html > 02 <頭> 03      < meta http-equiv = “Content-Type”content = “text / html ; charset = utf-8” /> 04      < title >遠程自動固件更新系統</ title > 05 </ head > 06 <身體> 07 < BR > < BR > 08 < H1對齊= “中心” >遠程自動固件更新系統</ H1 > < BR > 09 < H2對齊= “中心” >固件上傳</ H2 > < BR > 10 < form method = “post”enctype = “multipart / form-data” > <! -用POST方式- >…
Read More

W5500通過MQTT連接阿里雲平台

博客
1、簡介 1.1 開發環境與連接平台 本文主要介紹W5500如何通過MQTT協議將設備連接到阿里雲IoT,並通過MQTT協議實現通信。MQTT協議是基於TCP的協議,所以我們只需要在單片機端實現TCP客戶端代碼之後就很容易移植MQTT了, +W5500實現TCP客戶端的代碼我們以前已經實現過,程序下載:[wpdm_package template='link-template-default-wdc' id='16045'] 軟件環境:Windows 硬件環境:STM32F103+W5500 開發工具:Keil uVision5 調試工具:Wireshark、串口調試助手 連接平台:阿里雲-華東2節點(https://www.aliyun.com) 1.2 MQTT簡介: MQTT官網地址:(http://mqtt.org/) 1.2.1 MQTT協議特點 MQTT是一個基於客戶端-服務器的消息發布/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(M2M)通信和物聯網(IoT)。其在,通過衛星鏈路通信傳感器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用。 MQTT協議當前版本為,2014年發布的MQTT v3.1.1。除標準版外,還有一個簡化版MQTT-SN,該協議主要針對嵌入式設備,這些設備一般工作於百TCP/IP網絡,如:ZigBee。 MQTT協議運行在TCP/IP或其他網絡協議,提供有序、無損、雙向連接。其特點包括: 使用的發布/訂閱消息模式,它提供了一對多消息分發,以實現與應用程序的解耦。 對負載內容屏蔽的消息傳輸機制。 對傳輸消息有三種服務質量(QoS): 最多一次,這一級別會發生消息丟失或重複,消息發布依賴於底層TCP/IP網絡。即:<=1 至多一次,這一級別會確保消息到達,但消息可能會重複。即:>=1 只有一次,確保消息只有一次到達。即:=1。在一些要求比較嚴格的計費系統中,可以使用此級別 數據傳輸和協議交換的最小化(協議頭部只有2字節),以減少網絡流量 通知機制,異常中斷時通知傳輸雙方 MQTT協議原理及實現方式 實現MQTT協議需要:客戶端和服務器端 MQTT協議中有三種身份:發布者(Publish)、代理(Broker)(服務器)、訂閱者(Subscribe)。其中,消息的發布者和訂閱者都是客戶端,消息代理是服務器,消息發布者可以同時是訂閱者。 MQTT傳輸的消息分為:主題(Topic)和消息的內容(payload)兩部分 Topic,可以理解為消息的類型,訂閱者訂閱(Subscribe)後,就會收到該主題的消息內容(payload) payload,可以理解為消息的內容,是指訂閱者具體要使用的內容 連接 阿里雲連接步驟: 以aliyun賬號直接進入IoT控制台,如果還沒有開通阿里雲物聯網套件服務,則 申請開通 接入引導 (1)、創建產品 (2)、添加設備 (3)、獲取設備的Topic 創建產品 初步進入控制台後,需要創建產品。點擊創建產品。產品相當於某一類設備的集合,用戶可以根據產品管理其設備等。 產品名稱:對產品命名,例如可以填寫產品型號。產品名稱在賬號內保持唯一。 productKey:阿里雲IoT為產品頒發的全局唯一標識符 添加設備 創建完產品之後,可以為該產品添加設備。進入產品管理頁面下的設備管理,點擊添加設備。 說明:用戶可以自定義設備名稱(即deviceName),這個名稱即可作為設備唯一標識符,用戶可以基於該設備名稱與IoT Hub進行通信,需要指出的是,用戶需要保證deviceName產品內唯一。 設備證書:添加設備之後,物聯網套件為設備頒發的唯一標識符,設備證書用於設備認證以及設備通信,詳細的請參考設備接入文檔。 deviceName:用戶自定義設備唯一標識符,用於設備認證以及設備通信,用戶保證產品維度內唯一。 deviceSecret:物聯網套件為設備頒發的設備秘鑰,用於認證加密,與deviceName或者deviceId成對出現。 獲取設備的Topic 添加設備之後,可以獲取設備的Topic。點擊Topic列表 說明:創建產品之後,物聯網套件都會為產品默認定義三個Topic類。那麼,在添加設備之後,每個設備都會默認有三個Topic,即圖中所示。如果想要增加、修改、刪除Topic,請到消息通信重新定義Topic類。 設備可以基於Topic列表中的Topic進行Pub/Sub通信,例如列表中有/1000118502/test9/update,且設備擁有的權限是發布,這就意味着設備可以往這個Topic發布消息;同樣,列表中/1000118502/test9/get,權限是訂閱,這就意味着設備可以從這個Topic訂閱消息。 設備接入 獲得productKey、設備證書以及設備的Topic這些參數,就可以基於aliyun IoT device SDK for C將設備連接上IoT Hub並進行通信,具體請參考《MQTT配置》部分 MQTT移植步驟: MQTT代碼源碼下載地址:(http://www.eclipse.org/paho/) MQTT的移植非常簡單,將C/C++ MQTT Embedded clients的代碼添加到工程中,然後我們只需要再次封裝4個函數即可: int transport_sendPacketBuffer(unsigned char* buf, int buflen); 通過網絡以TCP的方式發送數據; int transport_getdata(unsigned char* buf, int count); TCP方式從服務器端讀取數據,該函數目前屬於阻塞函數; int transport_open(void); 打開一個網絡接口,其實就是和服務器建立一個TCP連接; int transport_close(void); 關閉網絡接口。 如果已經移植好了socket方式的TCP客戶端的程序,那麼這幾個函數的封裝也是非常簡單的,程序代碼如下所示: /** * @brief  通過TCP方式發送數據到TCP服務器 * @param  buf數據首地址 * @param  buflen數據長度 * @retval 小於0表示發送失敗 */ /*訂閱消息*/ int Subscribe_sendPacketBuffer(unsigned char* buf, int buflen) { return send(SOCK_TCPS,buf,buflen); } /*發布消息*/ int Published_sendPacketBuffer(unsigned char* buf, int buflen) { return send(SOCK_TCPC,buf,buflen); }…
Read More
W5500檢測溫濕度上傳到oneNET平台

W5500檢測溫濕度上傳到oneNET平台

博客, 應用, 物聯網
前言 關於本文內容的一些名詞解釋 1、產品 產品是指用戶手上的真實設備在OneNET上對應的虛擬名稱,是用戶在OneNET上最上層的雲端資源。 2、產品ID 產品ID是指由OneNET後台為您的某一款真實產品分配的一個獨立的ID號,如果您旗下的某一款產品有兩款不同的系列(如 iPhone 7 / iPhone 7 Plus),那麼建議創建兩款產品來分別獲得兩個產品ID。 3、APIKey 用於對OneNET進行操作的鑒權以及權限控制,在使用OneNET Restful API時,HTTP請求消息的頭域必須攜帶該APIKey字段,OneNET會依據APIKey字段判別該用戶是否具有對應操作的權限。 APIKey的權限模型是通過設定對雲端資源是否可以增加、查看、修改、刪除等方式來描述的,最低的權限級別可細化到對某個數據流的訪問權限。APIKey分為兩種: ①產品APIKey: 在創建產品時,OneNET會為該產品生成一個默認的APIKey,這個APIKey是Masterkey,具有最大權限,能夠對本產品下所有資源進行訪問。 ②設備APIKey: 用戶為某一產品下的某一台設備創建的Key稱為設備APIKey,設備APIKey的作用權限只限於本設備的資源,而不能對其他設備進行訪問操作。 4、設備 雲端的“設備”是指在上面提到的“產品”下的實體,亦指用戶的某一台真實設備在OneNET上對應的唯一的虛擬名稱。 5、設備ID(Device ID,DID) 設備ID是指由OneNET後台為您的某一台真實設備分配的一個獨立且唯一的ID號,一款產品下可以有多台設備,每一台獨立的設備都有唯一的設備ID。 6、設備編號 用戶在OneNET上創建設備時,如果設備接入協議選擇HTTP,則需要填寫“設備編號”。設備編號是每一台真實設備所擁有的唯一識別號,不需要OneNET後台分配,用戶可以自定義設備編號,但必須保證每台設備之間的獨立性和唯一性,建議用戶在輸入設備編號時採用原有產品線的序列號。 7、數據流(Datastream) 一個數據流可以理解為一類數據,如傳感器之溫度、位置之經緯度,空氣之濕度等。用戶可以自定義數據流名稱,即數據流ID;一個設備可以添加多個數據流。 8、數據點(Datapoint) 即一個數據流中的一個具體的數據值。數據點採用“Key-Value”的方式存儲。其中Key的組成包括設備ID、數據流ID、時間等信息,value部分可以為任何數據對象,如整數、字符串或者JSON數據類型。 一、實驗目的:W5500通過DHT11採集環境溫濕度並上傳到OneNET平台,登錄賬號可查看到溫濕度數據的變化圖。 二、實驗過程: 1、註冊oneNET平台賬號; (more…)
Read More

DSP+W5500移植教程

博客
        以DSPF28335與W5500基於SPI通信為例:  一、特性 1、W5500特性   支持硬件 TCP/IP 協議:TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE   支持 8 個獨立端口(Socket)同時通訊   支持掉電模式   支持網絡喚醒   支持高速串行外設接口(SPI 模式 0,3)   內部 32K 字節收發緩存   內嵌 10BaseT/100BaseTX 以太網物理層(PHY)   支持自動協商(10/100-Based 全雙工/半雙工)   不支持 IP 分片   3V 工作電壓,I/O 信號口 5V 耐壓   LED 狀態顯示(全雙工/半雙工,網絡連接,網絡速度,活動狀態)   LQFP48 無鉛封裝(7x7mm,間距5mm)   嵌入式服務器 2、DSPF28335特性   基於TMS320F28335浮點DSP控制器   高性能的靜態CMOS技術,指令周期為6.67ns,主頻達150MHz   6通道的DMA控制器   8個外部中斷   增強型外設模塊:18個PWM輸出,包含6個高分辨率脈寬調製模塊(HRPWM)、6個事件捕獲輸入、2通道的正交調製模塊(QEP)   3個32位的定時器,定時器0和定時器1用作一般的定時器,定時器0   接到PIE模塊,定時器1接到中斷INTI3、定時器2用於DSP/BIOS的片上實時系統,連接到中斷INT14,如果系統不使用DSP/bios,定時器2可用於一般定時器   串行外設2通道CAN模塊、3通道SCI模塊、2個McBSP(多通道緩衝串行接口)模塊、1個SPI模塊、1個I2C主從兼容的串行總線接口模塊   12位的A/D轉換器具有16個轉換通道、2個採樣保持器、內外部參考電壓、轉換速度為80ns,同時支持多通道轉換   88個可編程的復用GPIO引腳   TI主推高性能TMS320C28x系列DSP控制器,主頻高達150MHz   具備I2C、SPI、eCAN、ePWM等總線接口,適用於各種控制類工業設備   體積小、性能強、便攜性高,同時適用於多種手持設備   符合高低溫、振動要求,滿足工業環境應用 3、引腳分配圖:   DSPF28335引腳分配圖:   W5500引腳分配圖:   4、環境:   軟件環境:Windows xp/Windows 7/Windows 8/Windows 10   硬件環境:DSPF28335 、 W5500   開發工具:Code Composer studio 6.0.0 、 USR-TCP232-Test(調試工具) 二、步驟 1、連接DSPF28335與W5500(選擇引腳)   首先確認W5500與DSPF28335開發板上分別需要連接的引腳 (1)W5500:引腳描述 (2)DSPF28335引腳描述: 選擇好兩塊開發板上的引腳後,對兩塊開發板進行連接: 序號型號 W5500 DSPF28335 連接方式 1 MISO 54 從輸入主輸出 2 MOSI 55 從輸出主輸入…
Read More
工業物聯網協議:Modbus

工業物聯網協議:Modbus

博客
物聯網應用大部分來自於在工業領域的需求。 正如預期的那樣,這些應用通常遵循的工業標準協議。典型的例子有 Modbus、EtherCAT、和以太網。其中,Modbus 是在嵌入式市場中最受歡迎的項目之一。開放的硬件平台 Arduino,也有備 Modbus 庫。這意味着有大量的需求,並很多人都在使用它。當然,MODBUS 的規格並不需要大量的資源,這使得它更加吸引人。 Arduino 我上面提到Modbus 協議可以使用 Arduino 的基礎上。 由於 Arduino 是一個開源的硬件平台,任何人都可以輕鬆地使用它。 通常情況下,工業設備可得來不易,但開放的平台,如 Arduino 解決了這樣的可使用性的問題。 特別是,存在一些用戶在使用Arduino的用的Modbus標題項目可視化網絡儀錶建設策略。 您可以如下圖所示用 Arduino 和 Modbus,把你的儀錶數據放在網絡上。 與此類似,使用 Arduino 可以很容易與行業中的標準設備進行通信。 有人會說,“你可以用 Arduino 製造工業產品嗎?” 然而,也有將使用 Arduino 作為是產品! 有一個叫產品 Lono  - 它可以在工業和住宅環境中使用。它也可以在以太網環境中使用。 以太網產品,特別是可以使用 Modbus 協議。如果你想使用的 Modbus 與這個產品,只需從 Arduino 的 IDE 上傳 Modbus sketch。 有了 Arduino,可以為開發者和用戶提供方便。 如果你想看到的Modbus更多的例子與Arduino的使用,請參見下面的鏈接。 Modbus TCP 的 2 個例子  Arduino 與安卓通過 Modbus 通信 RTU Miniuno 家庭自動化 其他設備 你可在網上搜索到許多 WIZnet 產品並非用在開放式硬件。 WIZnet 產品本來並不支持 Modbus 協議。 然而,在使用以太網芯片的情況下,由於硬件 TCP / IP 技術,只需要使用很少功夫就能夠實現一個協議,如 Modbus。 這就是為什麼 WIZnet 產品廣泛應用在工業中使用的原因。 例如此產品,使用 W7100A 的 el/O Ethernet 。 eI/O 擁有一系列以太網數字 I/O 以滿足嵌入式OEM應用。對於需要嵌入式以太網 I/O 解決方案的商業和工業計算應用,eI/O OEM 模塊提供系統設計者提供了一個簡潔,低成本的監視和控制的另類選擇用於各種應用,包括過程控制,設施管理,安全性和廣播自動化。 eI/O 模塊使用行業標準的 Modbus TCP 協議或者 SeaMAX 軟件進行通信。該軟件套件支持 eI/O 系列產品,旨在與該 SeaMAX API 的第三方應用程序工作。SeaMAX 軟件驅動程序和實用工具使安裝,簡單在微軟 Windows 上操作使用。 如果您想了解使用其他 WIZnet 的產品,請參考下面的鏈接。 WizFi250 工業用WizFi250監控系統 W5500 Modbus/TCP 通信 使用 DE0-Nano、NIOS-2 和 WIZ550io [embed]https://youtu.be/iuy2-zllveA[/embed]
Read More
WIZnet芯片在智能家居市場的應用

WIZnet芯片在智能家居市場的應用

博客, 物聯網
2014年是智能家居和可穿戴設備集中發力的一年。傳統家電廠商、互聯網企業和智能終端企業都虎視眈眈的盯着這個巨大的蛋糕,初創企業也藉助各種眾籌平台將自己的新奇創意轉換為實際產品並推進市場,各種智能家居設備和智能穿戴設備層出不窮。預測2015年這種趨勢還將繼續,而且還會湧現一些新的趨勢,比如:新型傳感器技術和網絡技術會進一步融合,必將迸發出新的火花;更多的智能設備網絡平台會出現,產品應用會打破APP的壁壘,用戶數據直接融合到智能設備網絡平台內;智能產品會有“同質化》》差異化》》整合》》擴展”的趨勢,並脫離當前只是一部分人嘗鮮的階段,而更貼合具體的應用,並越來越易用;傳統的家電廠商會加入這個市場,並將更多的傳統門類的白色家電帶入“互聯互通”網絡家電新時代等。 由於人們對於個人信息的保密要求和數據傳輸的私密性要求越來越高,而且智能設備的開發的前提本就應該是數據安全,所以數據傳輸加密應該是非常重要的一環。而且由於無線技術“無邊界”的特點,在數據加密傳輸上有先天的不足,以太網技術雖然“有線”但也是不可替代的,成熟而且簡單,因此“以太網”和“數據加密”也應是智能家居系統中不可或缺的一個組成部分。比如很多智能穿戴設備是基於BLE技術開發的,但是由於BLE無法直接同IP網絡通信,所以只能直接和手機通訊而無法上傳數據到網絡平台,所以BLE+以太網網關的方式不失是一種很好的選擇。 WIZnet的產品是以硬件以太網芯片為核心的一系列產品,將以太網通信協議以硬件TCP/IP的方式來實現,降低了MCU處理協議棧的負擔,從而降低了對MCU的要求。相較於其他的以太網實現方案,WIZnet系列芯片對MCU的要求很低,而且可以很方便的實現上層應用層協議。WIZnet在網絡安全方面有自己獨特的優勢,Simple but Powerful是其產品的最大特點。 智能家居不是任何單一技術的智能家居,也不是任何一家廠商的智能家居,只有越來越多的廠商加入進來,形成新的智能設備網絡平台的步驟才能越走越快,大家更願意看到“傳統家電廠商+互聯網企業+智能終端企業”集中發力,促使這個市場走向成熟。 原文鏈接:http://www.elecfans.com/tongxin/tongxinxinpian/2015/1013/385991.html
Read More
充電樁通過WiFi實現付費和管理方案

充電樁通過WiFi實現付費和管理方案

博客, 能源
隨着電動車產業的快速發展,需要與之配套的充電樁產業也趨於批量化、標準化。從全國範圍內來看,北京、上海、廣州、深圳等一線城市對電動車的推廣力度非常大,因此對於充電樁這一基礎設施建設的投入也排在前列。從長遠國家戰略層面來看,在不久的將來,電動車產業必將跟傳統能源汽車產業平起平坐。 根據實際應用場所的不同,充電樁的充電及付費管理系統的方案各異。應用最多的場所是在充電站內充電,其實現方案是每台充電樁內嵌以太網芯片,例如W5500、W5100等,然後通過以太網接入局域網管理中心,用戶通過RFID刷卡的方式進行付費等操作。 目前,行業內出現了一種通過WiFi來進行付費和管理的方案。這種方案的應用場所主要是在高速以及充電站建設不便的區域。其大概實現方式如下圖a所示。  圖a 充電樁WiFi付費和管理系統 充電樁安裝在距離公路約300m左右的距離,通過地埋將電纜插座引到公路邊上,充電樁內安裝WIZnet的C2W模塊CAN轉WiFi的C2W模塊,車內也裝有帶C2W模塊的設備。車內的設備搜索到並接入充電樁的AP熱點,登陸後進行付費和充電操作。這種方案的改進型可以考慮將車內的WiFi設備用用戶的手機代替,通過登陸APP軟件來實現更多的功能應用。 總之,隨着電動車產業的大跨步發展,充電樁相關方案也會迅速充斥市場,但人性化、便捷、安全、穩定始終是產品發展的主流,大家也都在關注這一市場的需求,我們拭目以待吧!
Read More