国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【PHP】PHP實(shí)現(xiàn)與硬件串口交互,接收硬件發(fā)送的實(shí)時數(shù)據(jù)

這篇具有很好參考價值的文章主要介紹了【PHP】PHP實(shí)現(xiàn)與硬件串口交互,接收硬件發(fā)送的實(shí)時數(shù)據(jù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一、前言

目的:借助虛擬串口軟件(VSPD)模擬硬件串口發(fā)送數(shù)據(jù),使用PHP語言實(shí)現(xiàn)接收硬件發(fā)送的數(shù)據(jù)。

我這里的需求是連接天平,把天平的稱量數(shù)據(jù)實(shí)時的傳送到PHP使用。

使用工具:vspd+串口調(diào)試工具

使用語言:PHP

二、效果圖

【PHP】PHP實(shí)現(xiàn)與硬件串口交互,接收硬件發(fā)送的實(shí)時數(shù)據(jù),PHP,單片機(jī),php,單片機(jī),stm32

三、準(zhǔn)備

1、虛擬串口軟件

使用到的工具有VSPD和串口調(diào)試工具,其中VSPD是模擬硬件串口,串口調(diào)試工具是模擬硬件發(fā)送數(shù)據(jù),兩者配合使用,工具已打包,可直接下載使用:vspd+串口調(diào)試工具

2、安裝PHP擴(kuò)展

下載并安裝dio擴(kuò)展,下載地址PECL :: Package :: dio 0.2.0 for Windows,注意要與使用的PHP版本保持一致,下載后將php_dio.dll文件拷貝到/Extensions/php/php7.0.9nts/ext/目錄下,再打開php.ini,刪除掉“extension=dio”前面的分號,如果沒有則直接添加即可,最后重啟Apache

四、VSPD和串口調(diào)試工具使用

1、VSPD

VSPD可通過上面鏈接下載,下載解壓后,直接運(yùn)行vspd.exe按提示安裝即可。

安裝成功后在右側(cè)添加端口,注意端口是成對添加或刪除的,兩個端口可以互相收發(fā)數(shù)據(jù)。端口添加成功后,打開電腦“設(shè)備管理器”中的端口,就可以看到新添加的兩個端口。

【PHP】PHP實(shí)現(xiàn)與硬件串口交互,接收硬件發(fā)送的實(shí)時數(shù)據(jù),PHP,單片機(jī),php,單片機(jī),stm32

【PHP】PHP實(shí)現(xiàn)與硬件串口交互,接收硬件發(fā)送的實(shí)時數(shù)據(jù),PHP,單片機(jī),php,單片機(jī),stm32

2、串口調(diào)試工具

無需安裝,直接運(yùn)行文件夾里的exe文件即可,在左側(cè)設(shè)置好參數(shù),串口號、波特率、數(shù)據(jù)位、停止位等,這些一般由設(shè)備供應(yīng)商提供。最后點(diǎn)擊“打開串口”按鈕。

【PHP】PHP實(shí)現(xiàn)與硬件串口交互,接收硬件發(fā)送的實(shí)時數(shù)據(jù),PHP,單片機(jī),php,單片機(jī),stm32

3、測試串口是否可以互相收發(fā)數(shù)據(jù)

再打開一次串口調(diào)試工具,選擇串口COM4(注意必須是再VSPD里添加的串口組對之間才能互相通信,互相發(fā)送、接收數(shù)據(jù)),設(shè)置波特率等參數(shù)與COM3一致,在右側(cè)下面的發(fā)送數(shù)據(jù)區(qū)輸入數(shù)據(jù),點(diǎn)擊發(fā)送,則在COM3端口就會收到發(fā)送的數(shù)據(jù),同樣在COM3的發(fā)送數(shù)據(jù)區(qū)輸入數(shù)據(jù),則在COM4的接收數(shù)據(jù)區(qū)也可以接收到數(shù)據(jù),兩個是互相的。

如果能互相收發(fā)數(shù)據(jù),表示兩個端口是正常的。

【PHP】PHP實(shí)現(xiàn)與硬件串口交互,接收硬件發(fā)送的實(shí)時數(shù)據(jù),PHP,單片機(jī),php,單片機(jī),stm32

五、PHP實(shí)時接收COM串口的數(shù)據(jù)

后端實(shí)現(xiàn)邏輯

1、使用php_dio擴(kuò)展讀取串口傳送來的數(shù)據(jù)

2、設(shè)置參數(shù):com4、baud、data、stop,參數(shù)要與上傳串口調(diào)試工具上的參數(shù)一致

3、開始連接串口,并循環(huán)讀取數(shù)據(jù),以獲得實(shí)時變化的數(shù)據(jù)

4、關(guān)閉串口

5、下面代碼較為簡單,要考慮更多會出現(xiàn)錯誤的情況,比如說com端口連接失敗的情況,讀取數(shù)據(jù)為空時的情況等

5、apiResponse()是自己寫的一個返回json格式的函數(shù)

前端實(shí)現(xiàn)邏輯

1、使用定時器,輪詢請求結(jié)接口,并把返回的數(shù)據(jù)實(shí)時的更新到input上

2、定義全局變量change用來標(biāo)識新請求回來的數(shù)據(jù)是否和上次一致,即串口傳送的數(shù)據(jù)是否發(fā)生變化

3、定義全局變量flag用來標(biāo)識數(shù)據(jù)未發(fā)生變化時,請求的次數(shù)

4、其實(shí)第一步已經(jīng)實(shí)時獲取到了串口發(fā)送的數(shù)據(jù),如果沒有特殊的后續(xù)操作第2和3步可以不用。因?yàn)槲疫@里的需求是接收天平的實(shí)時數(shù)據(jù),當(dāng)天平數(shù)據(jù)穩(wěn)定時(說明天平上沒有再添加重量),所以加了這兩步用來觸發(fā)其他事件,比如說如果連續(xù)5次請求數(shù)據(jù)都沒有發(fā)送變化,即flag=5時,此時就可以判定天平上的重量沒有發(fā)生變化,就可以進(jìn)行后續(xù)操作了。文章來源地址http://www.zghlxwxcb.cn/news/detail-783507.html

PHP代碼

/*
 *前端顯示頁面 
 */
public function index(){
	return $this->fetch();
}

/**
 * 讀取天平數(shù)據(jù)  前端通過ajax請求以獲取實(shí)時數(shù)據(jù)
 */
public function getCom(){
	
	//定義com口 接收端口 COM3發(fā)送則COM4位接收,反之亦然,baud 波特率 data 數(shù)據(jù)位 stop 停止位  由供應(yīng)商提供
	$com='COM4'; $baud = '9600'; $data='8';  $stop = '1';

	set_time_limit(0);

	exec('mode '.$com.': baud='.$baud.' data='.$data.' stop='.$stop.' parity=n xon=on',$output);
	//打開串口  O_RDWR讀寫模式 O_RDONLY只讀
	$ck = dio_open($com . ':', O_RDWR);

	//如果打開串口失敗,停止腳本,并輸出“打開串口COM3失敗”
	if(!$ck){
			
		return apiResponse('110',"打開串口" . $com . "失敗");
	}

	//讀取串口數(shù)據(jù)
	//讀取長度
	$len = 80;
	//當(dāng)數(shù)據(jù)為空時
	do{
		// 讀取串口數(shù)據(jù)并將讀取到的數(shù)據(jù)賦給變量$shuju
		$shuju = dio_read($ck,$len);
	}
	while($shuju == null);

	// 獲取浮點(diǎn)值,并反轉(zhuǎn)  如果傳過來的數(shù)據(jù)為83.100,我們需要的正確的數(shù)據(jù)是1.38
	// $shuju = floatval(strrev($shuju));

	// 關(guān)閉串口
	dio_close($ck);
	//讀取發(fā)送串口的數(shù)據(jù)
	return apiResponse('200','success',$shuju);

}

前端代碼

<html>
<head>
	<title>實(shí)施接收COM串口數(shù)據(jù)</title>
	<script type="text/javascript" src="/static/index/js/jquery-1.11.3.min.js" ></script>
	<script type="text/javascript" src="/static/index/layui/layui.js"></script>
	<link rel="stylesheet" type="text/css" href="/static/index/layui/css/layui.css">
</head>
<body>
	<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
	  <legend>實(shí)施接收COM串口數(shù)據(jù)</legend>
	</fieldset>
	 
	<form class="layui-form layui-form-pane" action="" style="width:60%; margin: 0 auto;">
	  
	  	<div class="layui-form-item" >
		    <div class="layui-block" >
		      	<label class="layui-form-label">COM數(shù)據(jù)</label>
		      	<div class="layui-input-block" >
		        	<input type="text" name="data"  autocomplete="off" class="layui-input" value="">
		      	</div>
		    </div>
	  	</div>

		<div class="layui-form-item"  style=" padding: 10px; background-color: #F2F2F2; " >
		  	<div class='layui-card'>
			    <div class='layui-card-header' style="font-size: 18px">與上一次是否發(fā)送變化</div>
			    <div class='layui-card-body' id="result" style="font-size: 16px">
				    
			    </div>
		  	</div>
		</div> 

	</form>

</body>

<script>


layui.use(['form','element'], function(){
  var form = layui.form
  ,$ = layui.jquery
  ,element = layui.element;

 // setTimeout(getCom, 1000);
  $(document).ready(function(){
		c = setInterval(getCom,1500);   //每1.5秒執(zhí)行一次
  });

  // 記錄數(shù)據(jù)是否發(fā)生變化
  var change = '0';
  // 記錄未發(fā)生變化次數(shù)
  var flag = 0;

  function getCom() {

	  $.ajax({
	  	url:'getCom',
	  	type:'GET',
	  	dataType:'JSON',
	  	success:function (res) {
	  		console.log(res)
	  		if (res.code == '200') {

	  			$('#result').empty();
	  			var html = ''

	  			$("input[name='data']").val(res.data)

	  			if (change == res.data) {
	  				// 未發(fā)生變化
	  				flag++
	  				html = '<span style="color:green">未發(fā)生變化:'+flag+'</span>'
	  			}else{
	  				// 發(fā)生了變化
	  				flag = 0  //數(shù)據(jù)發(fā)生變化后重置變化次數(shù)
		  			change = res.data
	  				html = '<span style="color:red">發(fā)生了變化</span>'
	  			}
	  			$('#result').append(html)
	  		}else{
	  			layer.msg(res.data)
	  		}
	  	}
	  })
  }
})

</script>
</html>

到了這里,關(guān)于【PHP】PHP實(shí)現(xiàn)與硬件串口交互,接收硬件發(fā)送的實(shí)時數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM-32:USART串口協(xié)議、串口外設(shè)—數(shù)據(jù)發(fā)送/數(shù)據(jù)發(fā)送+接收

    STM-32:USART串口協(xié)議、串口外設(shè)—數(shù)據(jù)發(fā)送/數(shù)據(jù)發(fā)送+接收

    通信的目的:將一個設(shè)備的數(shù)據(jù)傳送到另一個設(shè)備,擴(kuò)展硬件系統(tǒng)。比如STM32芯片里面集成了很多功能模塊,如定時器計數(shù)、PWM輸出、AD采集等等,這些都是芯片內(nèi)部的電路,它們的配置寄存器、數(shù)據(jù)寄存器都在芯片里面,操作簡單,直接讀寫就行。但是有些功能STM32內(nèi)部沒有

    2024年02月04日
    瀏覽(93)
  • 串口通信-發(fā)送和接收數(shù)據(jù)

    串口通信-發(fā)送和接收數(shù)據(jù)

    目錄 通信方式 硬件電路 軟件部分 USART外設(shè)(同步/異步收發(fā)器) 波特率 引腳復(fù)用 初始化基本流程 發(fā)送 接收 語言簡述 常用的函數(shù) 使用的結(jié)構(gòu)體 引腳模式 打印數(shù)據(jù)的三種方法 使用printf 在實(shí)際的串口中,只能發(fā)送二進(jìn)制數(shù),也就是十六進(jìn)制的最直接數(shù)據(jù)。如果想發(fā)送字符,

    2024年02月12日
    瀏覽(95)
  • 串口發(fā)送數(shù)據(jù),只接收到00的原因之一

    串口發(fā)送數(shù)據(jù),只接收到00的原因之一

    1、環(huán)境: STM32F103RCT6 KEIL 5 2、現(xiàn)象: 不管我發(fā)送任何類型的數(shù)據(jù),在串口助手上顯示接收到的都是00, 我頭很大,去網(wǎng)上找了別人的代碼對比檢查。 終于,細(xì)心的我發(fā)現(xiàn),原來粗心的我少了一行代碼。 3、解決方案1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); 好了,加上這一行

    2024年02月12日
    瀏覽(108)
  • 最詳細(xì)STM32,cubeMX串口發(fā)送,接收數(shù)據(jù)

    最詳細(xì)STM32,cubeMX串口發(fā)送,接收數(shù)據(jù)

    這篇文章將詳細(xì)介紹 串口 發(fā)送數(shù)據(jù),接受數(shù)據(jù)。 實(shí)驗(yàn)開發(fā)板:STM32F103C8T6。 所需軟件:keil5 , cubeMX 。 實(shí)驗(yàn)?zāi)康模毫私?串口的基礎(chǔ)知識,掌握串口如何發(fā)送,接收數(shù)據(jù) 。 實(shí)驗(yàn):串口發(fā)送數(shù)據(jù)點(diǎn)亮 led。 如果想了解串口的基礎(chǔ)知識可以參考我之前的文章: STM32Cube串口USART發(fā)送

    2024年02月04日
    瀏覽(126)
  • C#與松下PLC串口通訊發(fā)送,接收數(shù)據(jù)

    C#與松下PLC串口通訊發(fā)送,接收數(shù)據(jù)

    記錄與學(xué)習(xí) 第一次跟PLC打交道,C#與松下plc交互讀寫功能,很多東西都是自己在網(wǎng)上找的,整理了下做個記錄 ?引入“Panasonic.dll”文件 下載地址 百度盤百度網(wǎng)盤 請輸入提取碼? 提取碼:8vnm ?public Panasonic.PLC Sp_PLC;? ?Sp_PLC.WCS(\\\"R\\\", \\\"1\\\", true);//提示PLC軟件初始化完成,可以正常工

    2023年04月12日
    瀏覽(97)
  • C#串口通信從入門到精通(26)——多個串口多個線程發(fā)送數(shù)據(jù)和接收數(shù)據(jù)

    C#串口通信從入門到精通(26)——多個串口多個線程發(fā)送數(shù)據(jù)和接收數(shù)據(jù)

    我們在開發(fā)串口程序的過程中有時候會遇到多個串口,并且多個串口也需要在多個線程進(jìn)行操作,本文就來講解如何實(shí)現(xiàn)多個串口在多線程下的安全發(fā)送與接收。 我們首先使用虛擬串口助手虛擬COM1、COM2這一對串口;COM3、COM4這一對串口,然后使用代碼操作COM1,然后打開一個

    2024年02月11日
    瀏覽(90)
  • Qt+C++串口調(diào)試接收發(fā)送數(shù)據(jù)曲線圖

    Qt+C++串口調(diào)試接收發(fā)送數(shù)據(jù)曲線圖

    程序示例精選 Qt+C++串口調(diào)試接收發(fā)送數(shù)據(jù)曲線圖 如需安裝運(yùn)行環(huán)境或遠(yuǎn)程調(diào)試,見文章底部個人 QQ 名片,由專業(yè)技術(shù)人員遠(yuǎn)程協(xié)助! 這篇博客針對Qt+C++串口調(diào)試接收發(fā)送數(shù)據(jù)曲線圖編寫代碼,代碼整潔,規(guī)則,易讀。 學(xué)習(xí)與應(yīng)用推薦首選。 一、所需工具軟件 二、使用步驟

    2024年02月11日
    瀏覽(96)
  • 串口通信——發(fā)送和接收數(shù)據(jù)(8位和16位數(shù)據(jù)之間的轉(zhuǎn)換)

    串口通信——發(fā)送和接收數(shù)據(jù)(8位和16位數(shù)據(jù)之間的轉(zhuǎn)換)

    1.發(fā)送兩個字節(jié)數(shù)據(jù),就是16位的數(shù)據(jù),每一次發(fā)送8位,發(fā)送兩次,這里要進(jìn)行數(shù)據(jù)的拆分,如發(fā)送一個0XFF56,接收得到的也是FF56(16進(jìn)制顯示); 2.接收兩個字節(jié)的數(shù)據(jù)(這里通過串口助手以16進(jìn)制發(fā)送一個數(shù)據(jù)),將拼接的數(shù)據(jù)(只能一個字節(jié)一個字節(jié)接收)除以100展示出來

    2024年01月17日
    瀏覽(631)
  • FPGA串口接收解幀、并逐幀發(fā)送有效數(shù)據(jù)——1

    FPGA串口接收解幀、并逐幀發(fā)送有效數(shù)據(jù)——1

    工程實(shí)現(xiàn)的功能:FPGA串口接收到串口調(diào)試助手發(fā)來的數(shù)據(jù),將其數(shù)據(jù)解幀。判斷到正確的幀頭和幀尾之后,將有效數(shù)據(jù)存入rx_data中;另一方面發(fā)送端將有效數(shù)據(jù)逐幀發(fā)送出去。 參考:正點(diǎn)原子官方FPGA串口通信實(shí)驗(yàn) 模塊構(gòu)成: 在原子哥的基礎(chǔ)上改的代碼。 添加了接收狀態(tài)機(jī)

    2024年02月05日
    瀏覽(29)
  • FPGA串口接收解幀、并逐幀發(fā)送有效數(shù)據(jù)-2

    FPGA串口接收解幀、并逐幀發(fā)送有效數(shù)據(jù)-2

    工程實(shí)現(xiàn)的功能:FPGA串口接收到串口調(diào)試助手發(fā)來的數(shù)據(jù),將其數(shù)據(jù)解幀。判斷到正確的幀頭和幀尾之后,將有效數(shù)據(jù)存入rx_data中;另一方面發(fā)送端將有效數(shù)據(jù)逐幀發(fā)送出去。 參考:正點(diǎn)原子官方FPGA串口通信實(shí)驗(yàn) 模塊構(gòu)成: 在原子哥的基礎(chǔ)上改的代碼。 添加了接收狀態(tài)機(jī)

    2024年02月05日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包