后端工程师入手了树莓派 pi 3B和SIM 900

po 主是苦逼码农一枚,软件工程师,做服务端方向,主要写 nodejs & golang 偶尔写点 python,所以这是一篇刚刚拥有第一个开发板的小白写的小白文,以上是背景

前段时间为了改善生活买了一块树莓派3,装了 debian 8 jessie。

1. 换清华的源:

sudo vi /etc/apt/sources.list

注释掉其他的源插入这两个:

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ jessie main non-free contrib
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ jessie main non-free contrib

同时注释掉下面这个文件里面的源,不然还是会优先读这个

sudo vi /etc/apt/sources.list.d/raspi.list

2. 使用 ssh-tunnel 做内网穿透 (远程控制自己家里的树莓派):

主要参照的是 这篇文章 ,大致思路如下

利用 ssh 反向隧道的方式,通过一台外网 vps 做跳板,远程直接通过 ssh 连接到放在 NAT 之后的树莓派

有两个奇妙的点

  1. 使用 autossh 保持 ssh 隧道,因为 ssh 会超时断开,所以用 autossh 来保持连接
  2. 实测发现 autossh 的 -f 后台模式有点问题,暂时通过 tmux 保证这个 autossh 持续运行,接下来准备做成系统服务开机启动

具体步骤

准备:

1. 将树莓派中的 id_rsa.pub 公钥放进 vps,让树莓派 ssh 访问 vps 的时候可以不用输入密码
2. 安装 autossh (sudo apt-get install autossh || sudo yum install autossh)
3. 安装 tmux (sudo apt-get install tmux || sudo yum install tmux)

运行:

# --------------- 树莓派上运行
tmux
autossh -p 22 -M 6777 -NR 6766:localhost:22 -i /home/pi/.ssh/id_rsa [vps user]@[vps ip]
# 6777 监控服务状态
# vps 6766 端口映射到树莓派的 22 端口
# -i 是指定 id_rsa 文件路径,避免不同用户运行造成的 ssh 密钥错误

# --------------- 需要远程连接树莓派的终端上运行
ssh [vps user]@[vps ip] 
# 先连上 vps
ssh -p 6766 [pi user]@localhost
# 在 vps 上连接本地的 6766 端口,作用等效于连上映射的树莓派 22 端口

3. 连接 SIM 900

淘宝链接就不放了,不过就算做硬广应该也没人看见吧 (手动滑稽

大致思路如下

Raspberry pi 3 GPIO Pins 里面的 8/10 口连 SIM 900 的 TTL 接口,使用 minicom 监控 SIM 900 的输出,调试的时候可以直接向串口里面写 AT 指令

GPIO Pins 示意图

这是最坑的一个步骤,因为网上大部分的资料都是说的 pi 3 早期系统,或者直接就是 pi 2。

根!本!就!没!用!(来自小白浪费两天时间的咆哮

碰到的问题如下:

  1. pi 3 集成了蓝牙,占据了主要的 uart 口,所以没法儿像 pi 2 一样直接使用 TTL 需要的 TXD & RXD。

  2. 网上大部分现有的文档,都是在教大家怎么禁用蓝牙模块,然后将 ttyAMA0 重新映射到 TXD & RXD 口上。

    但是!我想用蓝牙啊!为啥我要放弃蓝牙!(其实是尝试了好几种方法都不成功万般无奈

  3. 有一种方法是将内核频率降低 core_freq=250,用来避免频率波动,从而顺利使用 uart1 接口,不过也是牺牲了一定的性能。

禁用蓝牙模块是有效的,推荐看 这篇文章 反正我是尝试失败了才推荐给大家的。

重头戏来了

看了这几篇之后 帖一 帖二 帖三 才有点明白 pi 3 里面 uart 接口的关系,主要是二、三,引用一段:

The Broadcom SOC's in all Pi's come with 2 serial ports, a full port and a mini port. Before the model 3, neither of theses were used internally, so the full port was routed out to the GPIO connector, and called ttyAMA0. 

The Pi 3 requires a serial port to talk to it's Bluetooth device, and the Pi's engineers decided to use the full serial port to talk to the Bluetooth chip as it was more capable then the mini serial port, and so the mini serial port was brought out to the GPIO connector, and called ttyS0. This has caused a few problems.

The mini serial port's baud rate is hard wired to the GPU's clock, and so when the GPU's clock speed changed, the baud rate of ttyS0 changed as well. The Pi 3 adjusts it's clock frequencies as demand goes up and down, and with it, ttyS0's baud rate. This is probably what caused the scrambled data in your first post. 

The first fix for this problem was to lock down the GPU's clock to a fixed frequency. This was done by adding the line: "core_freq=250" to 'config.txt'. This locks the baud rate of ttyS0, at the cost of a small decrease in the Pi's performance.

The second fix the Pi engineers came up with, was the problem of software backward compatibility with previous model Pi's. Any software written using ttyAMA0 would not work on a Pi 3B, as it calls it's port ttyS0. The second fix was to rename the serial ports on all models to 'serial0', and 'serial1'. On a Pi 3, ttyS0 is mapped to serial0, and on previous models ttyAMA0 is mapped to serial0. This means that software which refers to serial0 will work on all models.

Finally, the line "enable_uart=1" automatically locks the core frequency in a Pi 3, so "core_freq=250" is no longer required. Enabling the serial port in "Preferences" (raspi-config) will automatically add this line if required.

So, to summarize, to use the serial port on all model Pi's running an updated OS, add the line: "enable_uart=1" to '/boot/config.txt, and refer to the port as '/dev/serial0' in code. SystemD normally starts a terminal on this serial port which you are using but, if you don't want a terminal remove the section "console=serial0,115200" from '/boot/cmdline.txt'. 

Using this procedure, Bluetooth works normally on the Pi 3.

简而言之就是:

pi 3 现在是有两个 uart 口的,主要的 uart 给了蓝牙模块,所以正常来说 ttyAMA0 也就是 serial1 是不推荐使用的。

推荐使用 pi 3 的 mini-uart,而且是可以不用手动降频使用的,因为新版本里面如果打开了 uart 口,其实是会锁定内核频率的。我们要连的还是 RXD TXD,只不过 pi 3 里面这两个口被映射到了 mini-uart (ttyS0 | serial0)。

在系统设置里面 enable serial port,或者把 enable_uart=1 加到 /boot/config.txt 里面,mini-uart 就可以正常访问了。

po 主直接把 minicom 的串口设为 '/dev/serial0' 也就是 mini-uart,波特率不变还是 115200 8N1,可以达到 pi 2 里面使用 ttyAMA0 类似的效果。

po 主的流程

接线:# 不确定后续拨打电话之类的够不够,现在是为了省一个外接电源,所以直接用树莓派给 SIM900 供电

TTL
pi TXD(8) 连 SIM900 RXD
pi RXD(10) 连 SIM900 TXD
POWER 
pi 5V(2) 连 SIM900 VCC
pi GND(6) 连 SIM900 GND

树莓派:

# 安装 minicom 用来监控 uart 口
sudo apt-get install minicom
# 调整响应的端口,并且关闭硬件监控,以便于之后可能需要用 minicom 输入
sudo minicom -s 
Serial port setup
Serial Device 改为 /dev/serial0
Hardware Flow Control 改为 No
Save setup as dfl
Exit from Minicom
# 调整完毕,可以直接看到输出了
minicom

2017/06/22 更新

连上 minicom 一直不停的有乱码出现。检查了波特率,而且SIM900本身也是自适应的,心酸。

2017/07/03 更新

买了一根 USB 转 TTL,接上树莓派马上就可以用了。。。minicom 也能自动识别了,我是傻逼吗!
PS 还买了逻辑分析仪,果然也没派上用场。因为用 virtualbox 装windows 好像逻辑分析仪的采样率出了点问题,暂时就不用了。

未完待续

  1. 接下来要完善 autossh 稳定内网穿透。
  2. 在 vps 上再搞一个隧道(开个口,文章的说法)做到可以远程直接连 vps 固定端口就转到了 pi 3 上,不用现在的这种先 ssh 到 vps 上,再 ssh 到 pi 3。
  3. 在 SIM 900 上搞点事情
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容