本文將基于EsDA開發套件快速在開發板上搭建HTTP服務器,為HTTP客戶端提供了訪問板子的外設資源,數據以及文件讀寫等接口,實現設備與網絡服務的互聯互通。
?項目簡介
在物聯網應用中,在開發板上搭建HTTP服務器是一項很重要的技術,可以實現設備間的數據通信和遠程控制。本文將介紹如何使用EPC6450-AWI開發板,以及圖形化設計工具AWFlow Designer搭建HTTP服務器,對設備數據進行遠程訪問和控制。 ?項目概述當客戶端發送HTTP請求時,服務器接收請求,并根據請求的內容做出相應的處理,如讀寫開發板資源的配置和數據,讀寫文件等操作。開發板搭建的HTTP服務器,通過HTTP協議與客戶端進行通信。本文HTTP服務器的項目可為客戶端提供以下五個接口:
- 寫內容到開發板的文件中;
- 讀開發板中的文件內容;
- 提供讀取ADC通道的電壓值;
- 提供讀取溫濕度傳感器的溫度值和濕度值;
- 提供設置Modbus從站的寄存器值。本項目采用的Modbus從站是模擬Modbus從站設備的上位機Modbus Slave(工具使用請見【EsDA 應用】Modbus RTU Master 轉 MQTT 的“3.2.4、Modbus Slave安裝并使用”章節)。
?前期準備
讀者可以閱讀以下文章對HTTP通信和EsDA的一些基礎項目操作進行熟絡:
【EsDA應用】快速實現串口轉HTTP請求
【EsDA應用】Modbus應用詳解
【EsDA應用】5分鐘實現一個串口通信業務
【EsDA應用】常用IO設備節點詳解
1. 硬件準備
- 在標有絲印為TF Card 絲印的卡槽處,插入SD卡。
- 在標有絲印為DUART的調試串口模塊上,將TTL轉USB串口模塊的TX與板子絲印為RXD連接,TTL轉USB串口模塊的RX與板子絲印為TXD相連;并將TTL轉USB串口模塊的USB端口接入電腦。
- 在標有絲印為Type-C 的接口處,插上Type-C線,并將Type-C線的另一端USB口插入電腦。
- 在標有絲印為NET0或 NET1的RJ45插座處接上網線的水晶頭,網線另一端的水晶頭插在PC的網絡接口處。
1.1 提供溫濕度傳感器值的接口項目
在標有絲印為5V的排針針腳處接上溫濕度變送器的 DC5V_+ 引腳;在標有絲印為GND的排針針腳處接上溫濕度變送器的 DC5V_- 引腳;在標有絲印為485A的排針針腳處接上溫濕度變送器的 RS485_A 的引腳;在標有絲印為485B的排針針腳處接上溫濕度變送器的 RS485_B 的引腳上。
1.2 設置Modbus從站寄存器值的接口項目
在標有絲印位5V的排針針腳處接上USB轉485串口設備的 +5V 電源引腳;在標有絲印位GND的排針針腳處接上USB轉485串口設備的 GND 接地引腳;在標有絲印位485A的排針針腳處接上USB轉485串口設備的 RS485A引腳;在標有絲印位485B的排針針腳處接上USB轉485串口設備的 RS485B引腳。
2. 網絡搭建
打開串口調試助手,檢索并打開TTL轉USB串口模塊的設備端口號后,使用shell命令ip addr,查看網口的IP地址,根據下圖可知,本文使用的網口設備IP地址是192.168.137.251。
配置PC上的以太網的IP與開發板的IP地址在同一局域網下。
在串口調試助手輸入shell指令ping 192.168.137.223,ping成功即開發板可以單方面ping成功PC,若ping失敗則可以關閉PC端的防火墻之后再嘗試。
電腦端執行 WIN+R 輸入cmd 回車即可打開CMD命令提示符窗口,執行ping 192.168.137.251,ping成功則電腦可以單方面ping成功開發板。當開發板和PC可以互ping成功則聯網成功。
?項目實施1. 寫文件接口
本接口業務主要是將寫入的文件內容通過HTTP客戶端發送POST請求上傳到HTTP服務器,服務器收到請求后做出相應處理。可分為以下四個部分:
用戶在HTTP客戶端的body中編輯需要寫入的文件內容;
HTTP客戶端設置服務器對應的url接口和請求方式,向開發板搭建的HTTP服務器發送HTTP請求;
HTTP服務器監聽指定端口,處理對應接口的請求并響應;
查看寫入到文件的內容,檢驗是否成功通過開發板搭建的HTTP服務器提供的接口,實現遠程文件內容的輸入。
1.1 流圖繪制
添加http_in,fscript,http_out,timer,fscript和fileout節點到畫布中并連線如下圖。
1.2 節點配置
雙擊http_in節點,該節點主要是給HTTP客戶端提供一個POST方法的寫文件內容的接口,統一資源定位符可以根據用戶需要更改。點擊完成按鈕即可保存配置。
點擊http_server旁邊的鉛筆圖標對http_server節點進行配置,通常情況下修改訪問的端口號即可,點擊更新按鈕即可保存配置。
本項目其他的接口都是在同一個HTTP服務器上處理,所以后續的接口添加新的http_in節點,直接選中之前配置好的http_server,不用再重新添加新的http_server節點(不用重新創建一個http_server)。后面的接口項目不再贅述。
雙擊http_in節點的消費者節點fscript,該節點主要是接收HTTP客戶端上傳消息體的內容,并將接收寫文件接口請求的標志位置一。點擊完成按鈕即可保存配置。
global.put_file_status = 1global.putfile = str(msg.payload,true)
雙擊http_out節點,可以根據用戶實際需要設置響應碼和消息頭,本項目使用默認的就可以了。點擊完成按鈕即可保存配置。
雙擊timer節點,設置定時寫入文件的周期時間。雙擊timer的消費者節點fscript,該節點主要是處理當寫文件接口的http_in節點被觸發時那么put_file_status(寫文件標志位)置一,之后才將收到的請求體的內容寫入文件中。
if(global.put_file_status == 1) { wb = wbuffer_create() wbuffer_write_string(wb,global.putfile)
output.payload = wbuffer_get_data(wb) output.payloadLength = len(global.putfile) global.put_file_status = 0}
雙擊fileout節點,可根據用戶需要配置屬性參數。因為本項目的數據來源是從前節點fscript的payload中獲取的,所以屬性數據來源選擇payload選項。1.3 流圖下載
繪制完流圖后,點擊CTRL+S即可保存流圖,點擊下載流圖。
在HTTP客戶端postman上發起寫文件請求,HTTP服務器收到請求后將寫入的內容作為響應返回到客戶端進行顯示,并執行寫文件的操作,在串口調試助手上輸入cat flow/test.txt即可看到寫入文件的內容。結果如下圖所示則表示HTTP服務器搭建寫文件的接口已基本實現。
2. 讀文件接口
本接口業務主要是HTTP客戶端發送GET方法的讀文件請求,HTTP服務器接收到請求之后將文件內容作為響應返回到客戶端進行顯示。可分為以下兩個部分:
HTTP客戶端設置讀文件的url接口和請求方式,向開發板搭建的HTTP服務器發送HTTP請求;
HTTP服務器監聽指定端口,接收到讀文件的請求后將讀文件標志位置一,等待讀取文件內容,并將讀到的內容作為響應發送到HTTP客戶端。
2.1 流圖繪制
添加http_in,fscript,http_out,timer和filein節點到畫布中并連線如下圖。
2.2 節點配置
雙擊http_in節點,該節點主要是給HTTP客戶端提供一個GET方法的讀文件內容的接口,統一資源定位符可以根據用戶需要更改。點擊完成按鈕即可保存配置。
雙擊http_in的消費者節點fscript,該節點的主要功能是當HTTP服務器接收到了來自客戶端的讀文件接口的請求,那么將讀文件標志位(get_file_status)置一,延時等待讀取文件的業務,最后將讀取到的數據作為響應發送到HTTP客戶端。
global.get_file_status = 1sleep_ms(500)msg.payload = "you get file data is "+global.getfile
http_out節點在本項目中使用默認參數值即可。雙擊timer配置定時讀文件的周期時間。
雙擊timer的消費者節點fscript,該節點主要是檢測讀文件標志位(get_file_status)置一時,設置filein節點的配置參數。點擊完成即可保存配置。
if(global.get_file_status == 1) { set(msg.topic, "exec:read_all") set(msg.payload, 4096) global.get_file_status = 0}
雙擊filein節點,配置需要讀取的文件名。點擊完成即可保存配置。
雙擊filein的消費者節點fscript,該節點主要是將filein節點讀取出來的文件內容,賦值給可供其他節點訪問的全局參數。點擊完成即可保存配置。
global.getfile = str(msg.payload, true)
2.3 流圖下載
繪制完流圖后,點擊CTRL+S即可保存流圖,點擊下載流圖。
在postman中發送HTTP客戶端GET方法的讀文件請求,后續可以在響應報文部分看到由HTTP服務器發出的讀取文件內容的響應正文。結果如下圖所示則表示HTTP服務器搭建讀文件的接口已基本實現。
3. 讀取ADC通道值的接口
本接口業務主要是HTTP服務器提供ADC通道的電壓值的接口,當HTTP客戶端發起該請求時,HTTP服務器將采集到的ADC通道電壓值作為響應返回到HTTP客戶端進行顯示。可分為以下兩個部分:
- HTTP客戶端設置服務器獲取ADC通道值的url接口和請求方式,向開發板搭建的HTTP服務器發送HTTP請求;
- HTTP服務器監聽指定端口,接收到對應接口的請求后將采集到的ADC通道的電壓值作為響應并發送到HTTP客戶端。
3.1 流圖繪制
添加http_in,fscript,http_out和adc節點到畫布中并連線如下圖。
3.2 節點配置
雙擊http_in節點,該節點主要是給HTTP客戶端提供一個GET方法的獲取ADC通道電壓值的接口,統一資源定位符可以根據用戶需要更改。點擊完成按鈕即可保存配置。
雙擊http_in的消費者節點fscript,該節點主要目的是將采集到的ADC通道的電壓值作為響應發送到HTTP客戶端。點擊完成即可保存配置。
var a = "adc status is "+ global.adc_valuewb = wbuffer_create()wbuffer_write_string(wb,a)msg.payload = wbuffer_get_data(wb)msg.payloadLength = len(a)
本項目中http_out節點使用默認配置即可。
雙擊adc節點,配置需要采集的通道號。點擊完成即可保存配置。
雙擊adc的消費者節點fscript,該節點主要是將采集到的ADC電壓值賦值給全局變量,供其他節點使用。點擊完成即可保存配置。
global.adc_value="adc value is :"+" "+msg.payload + "mv"
3.3 流圖下載
繪制完流圖后,點擊CTRL+S即可保存流圖,點擊下載流圖。
在postman中發送HTTP服務器提供的采集ADC通道值的接口請求,后續可以在響應部分看到HTTP服務器返回的實時采集到的ADC電壓值。結果如下圖所示則表示HTTP服務器搭建的獲取ADC通道電壓值的接口已基本實現。
4. 提供讀取傳感器值的接口
本接口業務主要是HTTP服務器提供溫濕度傳感器采集的溫度和濕度值的接口,當HTTP客戶端發起該請求時,HTTP服務器將采集的溫濕度值作為響應返回到HTTP客戶端進行顯示。可分為以下兩個部分:
- HTTP客戶端設置獲取溫濕度傳感器值的url接口和請求方式,向開發板搭建的HTTP服務器發送HTTP請求;
- HTTP服務器監聽指定端口,接收到對應接口的請求后將采集到的溫濕度值作為響應并發送到HTTP客戶端。
4.1 流圖繪制
添加http_in,fscript,http_out,modbus_master_in和modbus_parse_in節點到畫布中并連線如下圖。
4.2 節點配置
雙擊http_in節點,該節點主要是給HTTP客戶端提供一個POST方法的接收溫濕度傳感器數據的接口,統一資源定位符可以根據用戶需要更改。點擊完成按鈕即可保存配置。
雙擊http_in節點的消費者節點fscript,該節點主要處理是將采集到的溫濕度傳感器的值作為響應發送給HTTP客戶端。點擊完成按鈕即可保存配置。
msg.payload = global.temp_value
http_out節點配置在本項目中不需要任何更改,使用默認配置即可。雙擊modbus_master_in節點,配置溫濕度傳感器從站的相關配置信息如下。點擊完成即可保存配置。
點擊modbus_master_in節點的屬性主機參數配置旁邊的鉛筆圖標,因為是通過RS485進行Modbus通信,所以選擇rtu傳輸模式并選擇對應的串口設備名,其他串口參數配置根據實際需要進行配置,點擊更新即可保存配置。
雙擊modbus_parse_in節點,因為地址0是溫度值,1是濕度值,所以配置節點參數如下所示。點擊完成即可保存配置。
雙擊modbus_parse_in的消費者節點fscript,本節點主要是解析處理采集到的數據,并賦值給可供其他節點使用的全局變量。點擊完成即可保存配置。
global.temp_value = "temp:"+array_get(msg.payload,0)/10+"C, "+"humi:"+array_get(msg.payload,1)/10+"RH"
4.3 流圖下載
繪制完流圖后,點擊CTRL+S即可保存流圖,點擊下載流圖。
在postman中發送HTTP服務器提供的采集溫濕度傳感器值的接口請求,后續可以在響應部分看到HTTP服務器返回的溫度值和濕度值。結果如下圖所示則表示HTTP服務器搭建的獲取溫濕度傳感器值的接口已基本實現。
5. 設置Modbus從站寄存器值的接口
本接口業務主要是將需要寫入的Modbus從站寄存器值通過HTTP客戶端發送POST請求上傳到HTTP服務器,服務器收到請求后做出相應處理。可分為以下四個部分:
用戶在HTTP客戶端的body中編輯需要寫入的Modbus從站寄存器值內容;
HTTP客戶端設置對應的url接口和請求方式,向開發板搭建的HTTP服務器發送HTTP請求;
HTTP服務器監聽指定端口,處理對應接口的請求并響應;
查看寫入到Modbus從站寄存器的內容,檢驗是否成功通過開發板搭建的HTTP服務器提供的接口,實現Modbus從站寄存器值的遠程輸入。
5.1 流圖繪制
添加http_in,fscript,http_out,modbus_parse_out和modbus_master_out節點到畫布中并連線如下圖。
5.2 節點配置
雙擊http_in節點,該節點主要是給HTTP客戶端提供一個POST方法的設置Modbus從站寄存器值的接口,統一資源定位符可以根據用戶需要更改。點擊完成按鈕即可保存配置。
點擊http_in的消費者節點fscript,該節點主要是處理將客戶端發送的請求消息體解析為modbus_parse_out節點可以接收的類型。內容如下:
a = array_create();
str b = str(msg.payload,true)b = replace(b,',',":")data1 = one_of(b,1,":")data2 = one_of(b,3,":")data3 = one_of(b,5,":")array_insert(a, 0, u16(data1))array_insert(a, 1, u16(data2))array_insert(a, 2, u16(data3))
output.payload = a;output.slaveID = 1;output.address = 0;
本項目中http_out節點使用默認配置即可。
雙擊modbus_parse_out節點,配置需要從哪個寄存器開始寫值。點擊完成即可保存配置。
雙擊modbus_master_out節點,配置從機ID和寫入的寄存器類型。點擊完成即可保存配置。
雙擊modbus_master_out節點的屬性主機參數配置旁邊的鉛筆圖標,因為是通過RS485進行Modbus通信,所以選擇rtu傳輸模式并選擇對應的串口設備名,其他串口參數配置根據實際需要進行配置,點擊更新即可保存配置。
5.3 流圖下載
繪制完流圖后,點擊CTRL+S即可保存流圖,點擊下載流圖。
在postman中發送HTTP服務器提供的設置Modbus從站寄存器值的接口請求,后續可以在Modbus Slave上位機中查看寫入的寄存器的值。結果如下圖所示則表示HTTP服務器搭建的設置Modbus從站寄存器值的接口已基本實現。
-
物聯網
+關注
關注
2927文章
45832瀏覽量
387421 -
服務器
+關注
關注
12文章
9673瀏覽量
87211 -
HTTP
+關注
關注
0文章
520瀏覽量
32436
發布評論請先 登錄
存儲服務器怎么搭建?RAKsmart實戰指南
服務器怎么搭建
windows搭建ftp服務器的步驟
ftp服務器怎么搭建
華為 Flexus 云服務器搭建螢火商城 2.0

服務器如何處理 HTTP 請求
采用 Flexus 云服務器 X 實例搭建 RTSP 直播服務器

評論