PHP操作串口 --- 操作发送短信mod应用(真实项目)

这篇博客详细介绍了如何使用PHP进行串口通信,特别是应用于实际项目中的短信发送功能。通过引入php_serial.class.php类文件,实现了串口操作,从而达到发送短信的目的。

<span style="font-size:12px;"><strong>首先来一个模块应用的文档截图:</strong></span>
<img src="https://img-blog.youkuaiyun.com/20140822184417003?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Via28=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />




<?php
header('Content-type:text/html;charset=UTF-8');
/**
 *  PHP向串口发送数据,操作短信model
 *  
 *  ===============短信 model 通信协议说明========
 *  
 *  发送数据协议格式:SMS13821987654#短信内容区
 *  其中:
 *		SMS:			固定指令
 *		13821987654:	为接收短信的手机号码  		
 *  	#:				表示短信内容中文。可选值":",表示短信内容英文。本用例统一使用#,兼容中英文。
 *  	短信内容区:	需要发送的短信内容	
 *  如果短信内容为中文的指令编码规则:
 *  	第一部分:SMS13821987654#---分别取各个字符的ASCII码,然后转换成对应的16进制表示值。每个字符占1个字节。如:53 4D 53 31 33 38 32 31 39 38 37 36 34 35 23
 *  	第二部分:短信内容区-------分别取各个字符的UNICODE编码的16进制表示值,每个字符占2个字节。如:77 ed 4f e1 51 85 5b b9 53 3a
 *									(注:字符串"短信内容"的Unicode编码为:\u77ed\u4fe1\u5185\u5bb9\u533a)
 */

$tel = '13323332222';	// 接收短信的电话号码
$sms = '《PHP也能干大事之PHP与串口通信》,@小蛮子&晚点,QQ:467166260';	// 短信内容

send($tel, $sms);


// 发送短信
function send($tel, $sms){
	//include "php_serial.class.php";	// 加载php操作串口的类
	
	$serial = new phpSerial;
	$serial->deviceSet("COM3");			// 这个硬件设备在COM3上
	
	if( $serial->deviceOpen() ){
		$code = format_tel('SMS'.$tel.'#').' '.format_sms($sms); // 格式:SMS13821987654#短信内容区
		$order = pack_arg($code);
		return $serial->sendMessage($order);
	}
	else
		return false;
}

 /**
 * 将形如“53 4D 53 31 33 39 35 30 30 36 35 30 30 30 23 4F 60 59 7D”的数据装入一个二进制字符串进行组包,以待通信
 */
 function pack_arg($str){
	$args = explode(' ', $str);
	$php = 'return pack("c*",';
	
	for($i=0; $i<count($args); $i++){
		$php = "{$php}0x{$args[$i]},";
	}
	$php = rtrim($php, ',');
	$php .= ');';
	
	return eval($php);
}

//=======================  两个自定义工具函数 =====================
 /**
 * 将字符串转换成ACSII码所对应的十六进制,每个字符占1个字节。例:13518250288=>31 33 35 31 38 32 35 30 32 38 38
 */
function format_tel($str){
	$rt = '';
	for($i=0; $i<strlen($str); $i++) {
		$rt = $rt.' '.dechex(ord($str{$i}));
	}
	
	return trim($rt);
}

 /**
 * 取字符串的unicode编码的十六进制表示方法,以2个字节来表示一个字符。例:你好=>4F 60 59 7D  Aa=>00 65 00 97 
 */
function format_sms($str){
	$rt = '';
	
	for($i=0; $i < mb_strlen($str, 'UTF-8'); $i++){
		$c = mb_substr($str, $i, 1, 'UTF-8');
		$ord = ord($c);
		
		if($ord > 127) { //中文
			$tmp = strtolower(trim(json_encode($c), '"')); //形如:\U0E74
			$rt = $rt.' '.substr($tmp, 2, 2).' '.substr($tmp, 4, 2);
		} 
		else {
			$rt .= ' 00 '.dechex($ord);
		}
	}
	
	return trim($rt);
}

其中用到了一个类:php_serial.class.php

<?php
define ("SERIAL_DEVICE_NOTSET", 0);
define ("SERIAL_DEVICE_SET", 1);
define ("SERIAL_DEVICE_OPENED", 2);

/**
 * Serial port control class
 *
 * THIS PROGRAM COMES WITH ABSOLUTELY NO WARANTIES !
 * USE IT AT YOUR OWN RISKS !
 *
 * @author R閙y Sanchez <thenux@gmail.com>
 * @thanks Aur閘ien Derouineau for finding how to open serial ports with windows
 * @thanks Alec Avedisyan for help and testing with reading
 * @copyright under GPL 2 licence
 */
class p
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值