<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

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

被折叠的 条评论
为什么被折叠?



