作者weii (迷惑失道)
看板SFFamily
标题[转录]Re: [问题] 在Linux底下写程式对GPRS模组下AT COMMAND
时间Mon Jul 28 23:01:32 2008
※ [本文转录自 LinuxDev 看板]
作者: phterry (小风) 看板: LinuxDev
标题: Re: [问题] 在Linux底下写程式对GPRS模组下AT COMMAND
时间: Fri Jul 25 10:03:12 2008
※ 引述《MaxBiaggi (Targets for Life)》之铭言:
: 大家好,
: 我在Linux作业系统环境底下写程式,
: 想透过RS232对SIM 300的 GPRS模组下AT COMMAND,
: 执行此程式後会自动发一个简讯到某手机号码,
: 於是我参考AT COMMAND之後,
: 一般以windows的超级终端机下AT COMMAND传短信息(简讯)的步骤为:
: AT+CMGS="+886XXXXXXXXX"
: 按Enter之後会出现这个符号 >
: 然後可以在此符号>後面输入要传的内容,例如:
: > hello
: 输入之後按键盘上的ctrl加Z 就可传送出去,
: 可是在linux的C语言程式中,要怎麽写出这个ctrl-Z的语法?
: 然後执行程式就可自动传,
: 请教各位前辈,谢谢
在 Linux 底下有一个类似 Windows 超级终端机的程式叫做 minicom.
利用 minicom, 你可以设定要传的 RS232 port, 如下
COMA(或称 COM1): /dev/ttyS0
COMB(或称 COM2): /dev/ttyS1
若使用 USB 转接, 则为 /dev/ttyUSB0, /dev/ttyUSB1....以此类推
先用 minicom 试, 会减少你很多不必要的问题
试成功之後, 你要使用 Linux C 写一支程式来达成这个功能的话,
你必须要会使用 termios 来设定 baud rate, parity check, flow control等等
大致的流程(方向)如下:
1. 用 open() 打开 RS232 Port
2. 用 tcgetattr() 备份 RS232 Port 的状态
3. 用 tcsetattr() 设定 baud rate, parity check, transfer bit,...
4. 用 read() 以及 write() 读取及传送资料
5. 收工时, 别忘了 close()
其中还会涉及一些课题, 比如说你传了一串资料(指令)而期待装置回传结果给你,
但是他一直没有回传, 但程式也不能一直等着, 就必须设一个 timeout, 这种情形
可以使用 select() 来解决.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.139.161.63
1F:推 TroyLee:超级终端机 跟 minicom 比...XX比鸡腿.. XD 07/25 10:17
2F:→ phterry:是啊,超级终端机一点也不超级,minicom功能强太多了 07/25 12:33
--
三月的柳絮不飞 你的心如小小的寂寞的城
我达达的马蹄是美丽的错误 我不是归人 我是马~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.201.208.96