树莓派+SIM通信模块制作手机

作者: PokeBox
上传时间为: 2014-11-30 05:01 PM

title:树莓派+SIM模块制作手机

器材准备:

SIM900A 通讯模块  一个

树莓派一台

屏幕一个

首先,在这里我使用的是SIM900A的通信模块最小版,已经把必要的IO都引出了,并集成了SIM卡槽,东西还是挺不错的。

值得一提的是,SIM模块在启动的时候需要800mA以上的电流,虽然板子上也贴了两个很大的电容,但那还是完全不够用的,至少还得加上一个0.1F的电容才能保证上电的时候树莓派还能正常工作。当然,树莓派的供电也是非常重要的。特别是在拨打电话的时候,如果树莓派的供电电流达不到2A的话很有可能就会导致一打电话就重启……

QQ图片20141017201255.jpg

这是我自己焊上的一个0.1F的电解电容,比较难看~~

以及需要注意的是,这个SIM模块的供电电压范围是3.6-4.5V,所以是不能直接用5V的电源来供电的,否则会烧坏模块。而3.3V又供不起~也是比较纠结。不过我们可以串联一个二极管来降压,注意使用的二极管必须是硅管,电压降必须是0.7V以上。否则有些二极管的电压降仅仅是0.3V的,降压的电压对模块还是很危险。

这里我用的是1N4007的二极管,用了2个,目的就是增大电流……

QQ截图20141017204555.png

整个电路是这样的。

还有麦克风没找到元件图所以就没画在上面,麦克风连接的是图里的第六根线,第七根是复位按钮。

然后硬件上串口电源什么的和树莓派连接好,这里我用的是树莓派的GPIO的窗口。也就是/dev/ttyAMA0设备。

要用这个设备得需要设置一下,把系统的调试什么的输出都关掉这样才能用这个串口。

首先是/boot/cmdline.txt
里面的内容,要把console=ttyAMA0,115200 kgdboc=ttyAMA0,115200这一段删掉以禁用串口调试。
然后是/etc/inittab里的T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100用#注释掉或者直接删掉这行。
然后就可以用树莓派的GPIO引脚的串口了。

因为默认的波特率已经是115200了,所以不用过多的设置它。
如果要调试我们可以用命令来进行串口调试:

microcom -p /dev/ttyAMA0

话说我发现串口貌似不会被独占,也就是说,你可以开一个进程来监听串口的内容,然后同时还能进行数据的发送,ttyAMA0设备不会提示说设备被占用无法打开,这点挺好的~也许就是串口的双向通讯吧。

因为模块用的是AT指令,而这个指令也是有点略坑的,就是发送完命令必须要以<CR>标识符结尾,所以……bash上发送命令结尾都要加\r来发送<CR>这个标识符。比如下面的命令发送了个AT指令后如果通讯正常,那么模块将会返回一个OK。

echo -e 'AT\r' > /dev/ttyAMA0

至于操作命令,我们可以参考AT命令指令。这里我们打电话只需要2个命令就可以了,一个是拨打号码,一个是接听和挂断~

当前就先介绍下打电话的指令吧。

打电话的指令是ATD+号码;,比如要拨打10086,就使用下面的命令:

echo -e 'ATD10086;\r' > /dev/ttyAMA0

这里需要注意的是,号码后面一定要记得加分号,不然可能会打不出去哦~

如果需要挂断,那就使用ATH命令即可。

既然搞懂了通讯的方式,我就想要做个UI界面来进行交互式操作了,不然树莓派如果没有键盘是很蛋疼的……
但是怎么办呢?我又不会QT,也不会python,只会bash……但bash不能做图形界面。而且QT还需要搭建一个编译环境,比较麻烦。最后我还是决定采用python了。因为python可以像bash那样直接运行而不需要编译。
虽然我不会,但是我可以找方法嘛……最后百度到了一个支持python的界面设计软件wxFormBuilder,用这个就可以很方便的制作图形界面了。
设计效果如下……

QQ截图20141017210027.png

而需要注意的是这个工具生成的图形界面代码和QT的图形设计工具比较类似,设计完后都需要一个main来运行这个窗口。
所以在完成窗口的绘制后需要在生成的代码后面加上

class App(wx.App):
   def OnInit(self):
      frame = MyFrame1(None)        ##这里为我们生成GUI的Frame类名
      frame.Show()
      return True
app = App()
app.MainLoop()

这样就可以把代码保存到树莓派上运行看到效果了。

顺便分享一下我的拨号和挂断键的python代码,供大家参考。

        def CALLA( self, event ):
                OUTAD='ATD%s;\r' % (self.number.GetValue())	##把拨号的命令放到变量,后面的那些是输入框里的数字
                print OUTAD
                ser.write(OUTAD)        #写串口操作码
        def keyinnumber0( self, event ):
                self.number.WriteText("0")	##在文本框添加个数字0,前面1-9也是一样,用来输入号码

        def CALLH( self, event ):
                print 'ATH\r'
                ser.write("ATH\r")      #写串口操作码,挂断电话

QQ截图20141017210400.png

自己给加了个桌面图标,看上去还不错吧~
之前发过使用STM32F429开发板做树莓派的屏幕,那么就来张在STM32F429开发板上的屏幕运行的效果图~QQ截图20141017210633.png

QQ图片20141017210748.jpg

全部评论 ()

创建讨论帖子

登录 后参与评论
系统提示