这篇文章是自己入手树莓派之后的一些使用记录 前些天看 v2ex 上有人讨论树莓派,于是出于好奇在淘宝上淘了一只树莓派来玩玩
体积超级小…
一个板子,一个塑料盒子装上完工
刚开始的时候尝试了一下官方的NOOBS工具安装raspbian系统,这个系统是为树莓派定制的基于Debian的 linux 系统,但不知什么原因总是间歇性卡死,加之个人偏好 ubuntu 一点,于是安装了Ubuntu_MATE
系统安装基本步骤:
- 下载系统镜像
- 将下载的
ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img
镜像解压后使用dd
命令将镜像写入到 sd 卡中(我的环境为 macOS),注意写入完成后一定要使用unmount
将 sd 卡推出,然后拔出 sd 卡 - 将 sd 卡插入树莓派,并连接好所有外设后开机,然后像安装 QQ 一样完成了Ubuntu_MATE的安装过程
简易播报系统:
当时冒出一个想法:写一个每天定时播放未来两天天气预报的小程序(非彼小程序),涉及的功能点:天气预报接口;一个基于轻量级的 api 框架实现的 api;一个定时任务;一个文字转语音脚本;一个音频文件播放器;当然还需要一个外接小音箱…
于是安装了 lnmp 环境(当下没有用到 mysql),mplayer,git,文字转音频使用的百度sdk(php),通过 git 安装了lumen
接口开发
- 路由
$router->get('/get_weather','WeatherController@getWeather');
- 控制器
WeatherController.php
<?php
namespace AppHttpControllers;
use GuzzleHttpClient;
use IlluminateSupportFacadesCache;
class WeatherController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
//基于树莓派的简易天气预报系统
public function getWeather()
{
//获取天气信息
$client = new Client(); // 实例化
$city = '成都';
$city_code = urlencode($city);
$aqi = [
'好',
'中等',
'不适于敏感人群',
'不健康',
'非常不健康',
'危险',
];
if (Cache::has('report') === false) {
$url = 'https://www.sojson.com/open/api/weather/json.shtml?city=' . $city_code; // 设置一个可访问的 url
$http = $client->request('GET', $url); // 执行
// 判断 http 状态码为 200 的时候,执行成功
$aqi_content = '未知';
if ($http->getStatusCode() == 200) {
$weather = json_decode($http->getBody()->getContents(), true);
if ($weather['data']['forecast'][0]['aqi'] <= 50) {
$aqi_content = $aqi[0];
} else if ($weather['data']['forecast'][0]['aqi'] <= 100) {
$aqi_content = $aqi[1];
} else if ($weather['data']['forecast'][0]['aqi'] <= 150) {
$aqi_content = $aqi[2];
} else if ($weather['data']['forecast'][0]['aqi'] <= 200) {
$aqi_content = $aqi[3];
} else if ($weather['data']['forecast'][0]['aqi'] <= 300) {
$aqi_content = $aqi[4];
} else if ($weather['data']['forecast'][0]['aqi'] <= 500) {
$aqi_content = $aqi[5];
} else {
}
//拼装字符串
$report = '现在预报,' . $city . '未来两天天气情况,' . $city . ',' . date('Y年m月', time()) . $weather['data']['forecast'][1]['date'] . ',天气情况,' . $weather['data']['forecast'][1]['high'] . ',' . $weather['data']['forecast'][1]['low'] . ',' . $weather['data']['forecast'][1]['type'] . ',' . $weather['data']['forecast'][1]['fx'] . ',风力,' . $weather['data']['forecast'][1]['fl'] . ',日出时间,' . $weather['data']['forecast'][1]['sunrise'] . ',日落时间,' . $weather['data']['forecast'][1]['sunset'] . ',空气污染指数,' . $aqi_content;
$report .= ',' . $city . ',' . date('Y年m月', time()) . $weather['data']['forecast'][2]['date'] . ',天气情况,' . $weather['data']['forecast'][2]['high'] . ',' . $weather['data']['forecast'][2]['low'] . ',' . $weather['data']['forecast'][2]['type'] . ',' . $weather['data']['forecast'][2]['fx'] . ',风力,' . $weather['data']['forecast'][2]['fl'] . ',日出时间,' . $weather['data']['forecast'][2]['sunrise'] . ',日落时间,' . $weather['data']['forecast'][2]['sunset'] . ',空气污染指数,' . $aqi_content;
Cache::add('report', $report, 60);
}
}
$report = Cache::get('report');
generate_audio($report);
}
}
以上的generate_audio()
即是自行封装后的百度的文字转语音sdk
定时任务
- 创建一个目录
/data/weather_reports/
用于保存mp3临时文件 crontab -e
添加定时任务130 19 * * * curl http://localhost/get_weather && /usr/bin/mplayer /data/weather_reports/weather_forecast.mp3 > /dev/null 2>&1
以上是每天19点30分使用curl
命令请求本地的api并使用mplayer
打开位于/data/weather_reports/
目录的weather_forecast.mp3
文件
简易播报系统完成
至此,一个定时播报小程序已完成,同时还可以利用内网穿透开放公网对该树莓派的ssh访问,实现远程遥控播放? 为了进一步方便操作(因为除了第一次安装系统,其他时候都希望直接通过命令行操作树莓派而不是外接一个显示器,资源有限…),将frp客户端的连接命令加入了开机启动
开机启动步骤
- 在
frp
客户端所在目录新建sh文件frp_start.sh
文件,并赋予执行权限 1 2touch ./frp_start.sh chmod x ./frp_start.sh - 写入命令 1 2 3 4 5 6 7 8 9 10 11 12#!/bin/bash ### BEGIN INIT INFO # Provides: lestat # Required-Start: $local_fs $network # Required-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start frp service # Description: start frp service ### END INIT INFO cd frp客户端所在目录 nohup ./frpc -c ./frpc.ini &
- 将文件连接到
/etc/init.d/
目录 1ln -s frp客户端所在目录/frp_start.sh /etc/init.d/frp_start - 在
/etc/init.d/
使用update-rc.d
命令进行配置 1sudo update-rc.d frp_start defaults 99 - 配置成功后可以在
/etc/rc[对应的系统运行级别].d/
目录中看到frp_start
未完待续…