MBD(一)-下载包-getstart-raspberry串口设置问题
跟着官方文档做
- 1. matlab和simulink支持包下载
- 2. matlab-树莓派demo
- 2.1-通过matlab命令控制LED灯闪烁
- 2.2 matlab代码部署到raspberry上
- 2.3 引脚模式设置
- 2.4 通过matlab命令执行linux终端指令
- 3. Simulink-树莓派demo
- 3.1 用simulink做树莓派灯闪烁demo
- 3.2 simulink做树莓派串口通信
- 4.总结
matlab和simulink版本-2020b
树莓派版本-3B+
最近接触到基于模型的编程技术(MBD),即基于Matlab和simulink自动生成嵌入式C代码,可以手动或通过TLC自动部署到嵌入式硬件上去,实验室这边常用的开发板是树莓派和Jetson TX2,由于官方文档有Matlab和simulink对树莓派的支持包,所以这里记录一下这两天跟着官方文档给出的示例程序做的时候会遇到的一些坑。
之后还要探究如何移植到其他板子上,本章内容简要有:
- 下载并设置matlab-raspberry包和simulink-raspberry包;
- matlab文档的例子;
- simulink文档的例子;
- 树莓派板子串口通信设置问题。
1. matlab和simulink支持包下载
所需硬件:
- 树莓派+sd卡;
- 读卡器;
- 网线;
- 路由器(够得着的)
step1:matlab主界面上添加附加功能,下载这两个包,这个过程基本上没什么问题,下载完成后会让你进行设置。
step2: 树莓派硬件设置-点上图中那个齿轮图标进入设置界面
这里点next之后,下一个界面如下图所示,这里是让你选树莓派要用的操作系统.
- 第一个是mathwork官方给树莓派提供的一个raspbian系统,安装好了与matlab相关的库;
- 第二个用你的树莓派现成的系统,但是要自己下载缺失的库,包,这个参考https://github.com/mathworks/Raspbian_OS_Setup
个人推荐使用第一种,省些时间,不过要重新刷树莓派SD卡
之后按照提示下载官方的系统镜像(向导里有),也可以通过下面的链接下载,要与matlab版本对应,比如我是matlab2020b,下载版本就要是20开头的
https://github.com/mathworks/Raspbian_OS_Setup/releases
tip: 可能会由于网络原因下不下来,多试几次或者…总之加油,我也是下了一上午才下下来的
下下来之后按照提示刷写SD卡,应该比较顺利,提一下这一步:
这一步选第一个,需要把树莓派用网线连到路由器上,你的主机(装了matlab的电脑)也要连到这个路由器上(最好也用网线连,wifi可不可以没有试过)
step3:查询树莓派网络ip
完成以上工作之后,将SD卡插到树莓派上,连接屏幕(第一次为了连接wifi需要一个屏幕,连了一次之后会自动连接,就不需要屏幕了)
查询树莓派ip,我是连的笔记本热点,在笔记本上可以查到,当然linux系统查ip也可以通过命令:
ifconfig
step4: SSH连接
matlab官方系统默认开启了ssh,如果没有默认开启,需要下载xrdp,这个请自行搜索。
- 用win10自带的远程连接可以连
win+r -> 输入mstsc -> 输入树莓派ip
-> 树莓派用户名密码 默认:
username: pi
password: raspberry
- 用Xshell软件连
这个我觉得比上面的方案好一些,Xshell非商业用途可以免费用,下载,使用这里不详细说明了
至此,matlab-simulink包下载和树莓派系统就搞定了。
tip:simulink包和matlab包的设置一样,都是给树莓派下载系统用的,所以上面两个包中只用设置一个就行了
2. matlab-树莓派demo
这里跟着官方文档做demo
2.1-通过matlab命令控制LED灯闪烁
该demo对应文档中
通过matlab命令行逐行执行:
% 创建树莓派操作对象
% raspi(ip_addr, username, password); 如果不写参数,默认连上一次的
rpi = raspi('192.168.137.50', 'pi', 'raspberry') writeLED(rpi, 'LED0', 1); % 灯亮
writeLED(rpi, 'LED0', 0); % 灯灭
以上实现了用代码控制树莓派上的LED灯亮灭,可以编写一个m函数控制灯的闪烁行为:
function blinkLED()
%UNTITLED2 此处显示有关此函数的摘要
% 此处显示详细说明
r = raspi('192.168.137.50', 'pi', 'raspberry');for count = 1:100% led onwriteLED(r, 'LED0', 1);pause(0.5);% led offwriteLED(r, 'LED0', 0);pause(0.5);
end
end
之后在命令行或者编写m脚本调用:
clear rpi;
blinkLED();
就可以看到灯闪烁效果。这个demo实现起来还是比较顺利的,效果是灯亮灭0.5s/次持续100s。
2.2 matlab代码部署到raspberry上
2.1中通过命令行可以控制树莓派的硬件,本质上是通过网络通信传信号的(本人对网络TCP/IP也不太懂,总之是这个意思吧)。
matlab支持包可以让我们将m文件里要实现的功能编成C代码并部署到树莓派本地上,同时生成可执行文件。这里还是以2.1中的闪灯程序为例
上图中为工作空间的文件(没有部署之前,只需要编写blinkLED.m的代码即可,代码与2.1相同)
matlab命令行执行命令:
clear;
rpi = raspi('192.168.137.50', 'pi', 'raspberry');
board = targetHardware('Raspberry Pi'); % 目标板对象
board.CoderConfig.GenCodeOnly = true; % 只生成代码,不执行(可省,默认编译执行)
deploy(board, 'blinkLED'); % 部署代码,第二个参数对应m函数名
生成的代码以及可执行文件的路径为:
在树莓派终端执行
sudo ./blinkLED.elf
可以看到和2.1的灯闪烁相同的效果
2.3 引脚模式设置
给出m函数:
function setPinExample()
%UNTITLED 此处显示有关此函数的摘要
% 此处显示详细说明
rpi = raspi('192.168.137.50', 'pi', 'raspberry');% 1.可用GPIO引脚
rpi.AvailableDigitalPins;% 2.显示树莓派的引脚图
showPins(rpi);% 3.设置引脚模式 - pin4 input(读入)模式
configurePin(rpi, 4, 'DigitalInupt');% 4.读取引脚数据 - pin4
readDigitalPin(rpi, 4);% 5.设置引脚模式 - pin7 output(写)模式
configurePin(rpi, 7, 'DigitalOutput');% 6.写引脚数据 - pin7 out 1
writeDigitalPin(rpi, 7, 1);end
2.4 通过matlab命令执行linux终端指令
这里列举几个常用的指令(文档里也有,建议有事没事查文档,毕竟别人大公司弄出来成体系的东西还是比这种博客要具体全面得多,可惜matlab文档的汉化工作还很不到位)
1.system函数
system(rpi, 'shell命令');
% 例如
system(rpi, 'ls'); % 获取当前目录下(默认/home/pi)的文件名称
system(rpi, 'cat hello.txt'); % 获取hello.txt文件的内容(前提是有)
2.openShell函数
system函数只能进行查看(读),不能做创建用,如果要对树莓派文件进行修改啥的,用openShell
openShell(rpi);
这将打开一个远程连接ssh窗口(和XShell的窗口差不多,建议还是用XShell对树莓派的文件进行编写修改)
3.getFile
该函数将树莓派里的指定文件拷贝到Matlab当前工作目录下
getFile(rpi, '/usr/share/pixmaps/debian-logo.png');
4.putFile
将PC机上的文件拷贝到树莓派上
putFile(rpi, 'debian-logo.png', '/home/pi/debian-logo.png.copy')
5.deleteFile
将树莓派上指定文件删除
deleteFile(rpi, '/home/pi/debian-logo.png.copy');
3. Simulink-树莓派demo
对应另一个文档的内容
设置simulink参数:
step1. 设置目标板
注意一下:matlab2020b的simulink界面和之前版本有很大不同,但大致功能是一样的,如果是之前版本,Model Settings的位置和这里不一样。
step2:修改code generator(可以不做,建议设置)
同样在Model Settings下>>Code Generation>>Report把上图中两个选项选上,生成代码后会有详细报告。
3.1 用simulink做树莓派灯闪烁demo
完成以上设置后,搭建模型,具体请参考这个Example
搭好模型后,可以run一下看看,这里其实已经可以在树莓派上看到效果了,但是由于仿真时间和现实时间可能不同步,观察到的闪烁频率和预期的不一致,但功能是有的。
run一下主要是看模型会不会报错。
下一步:部署到树莓派上
这一步做的事情和2.2里做的是一样的,只是用了simulink自动完成,并且可以看到编译过程
如果勾选了上面step2的生成报告,此时还会弹出生成的C代码:
同样地,可执行文件部署树莓派上和2.2中相同的文件位置
使用m命令控制脚本的启动,停止
rpi = raspberrypi;
% 查询程序是否在跑 第二个参数对应 simulink模型名 1-是 0-否
isModelRunning(rpi, 'LED_blink01')
% 停止程序
stopModel(r,'LED_blink01')
% 开启程序
runModel(r,'LED_blink01')
% 查看log
system(r,'cat LED_blink01.log')
% copy log文件到matlab
getFile(r,''LED_blink01'.log')
3.2 simulink做树莓派串口通信
这里主要说明一下树莓派的串口设置问题(每次用新的树莓派都会遇到这个坑,记录一下给自己长点记性)
参考:树莓派3B/3B+的串口使用
step1: 开启树莓派串口功能
matlab提供的树莓派默认开启了串口功能,这一步可以不做(保险起见,确认一下比较好)
sudo raspi-configure
选5.Interfacing Options >> 6.Serial >> No >> Yes
意思是禁止串口作为ssh登录口,而作为串口功能使用。
tip: 还有一种方式是直接修改某个boot文件,其实是一样的,上述操作的本质也是修改这个启动文件,上述操作做完后,可能要求重启(如果前后没有改变的话就不会要你重启),总之重启就行。
step2: 改变串口映射功能
树莓派里面有两个串口,一个/dev/Serial0
,一个/dev/ttyAMA0
,默认使用第一个串口,通过shell命令,查询串口映射关系
ls -l /dev # 查映射关系的
ls /dev/tty* # 查串口设备的
可以看到映射关系(这里是设置好以后的,初始状态下,这里的serial0应该指ttyS0,serial1-ttyAMA0),应该把映射关系设置成下图所示
我们要调换映射关系,因为ttyAMA0的传输效率更高一些,默认给蓝牙用的,这里禁用蓝牙,设置为串口。
# 这里vim是我下载的,用默认的nano也行
sudo vim /boot/config.txt
# 用这个也行
sudo nano /boot/config.txt
在文件最后添加一句
dtoverlay=pi3-miniuart-bt
保存文件后,再上面的命令查看映射关系应该就是step2里的样子,ok
step3: simulink串口通信
目前只做到能传数据,但是解析数据还在进一步学习
所需硬件:
- PC机(串口收发)
- 导线;
- USB-TTL模块
串口接线稍微提一下带过了,PC端我的电脑是Ubuntu系统下的cutecom,如果是win10的话可以在应用商店搜索"串口调试助手",win10自带的比网上下的小工具个人认为要高级一些。
% 查询树莓派3B+的针脚功能
rpi = raspi();
showPins(rpi);
rasp | TTL-USB |
---|---|
TX- | -RX |
RX- | -TX |
GND- | -GND |
3.3V | -3.3V(可以不接) |
simulink模型
模块在simulink的Library Browser - simulink raspberry Package里。
搭好之后,run如果没有报错,此时在PC端的串口调试助手上可以收到东西了,用串口调试助手发数据simulink上的display模块也能显示。
至此,实现了simulink和树莓派的串口通信功能。
4.总结
本篇主要讲了
- matlab-simulink-树莓派硬件支持包的下载,树莓派系统下载及设置;
- matlab-树莓派的操作demo;
- simulink-树莓派的操作demo,重点树莓派的串口设置。
之后会看看怎么利用串口的数据。
MBD(一)-下载包-getstart-raspberry串口设置问题相关推荐
- fedora17用yum下载包而不安装包
fedora17用yum下载包而不安装 1, 设置yum保存安装的临时rpm软件包 vi /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/ ...
- 最新gcc下载和linux环境变量设置
最新gcc下载和linux环境变量设置 一.gcc下载 提供最新gcc下载路径:点这里跳转 http://ftp.gnu.org/gnu/gcc/ 安装 /gcc_package/configure ...
- 饥荒服务器模组全部显示冲突,饥荒联机版TGP多层世界服务端整合包及MOD添加设置教程_游戏堡...
今天游戏堡小编为大家带来的是饥荒联机版TGP多层世界服务端整合包及MOD添加设置教程,还不清楚的玩家下面一起来看看吧! 下载地址:<饥荒联机版> TGP多层世界服务端整合包及MOD添加设置 ...
- yum 安装oraclejdk_linux服务器上安装jdk的两种方法(yum+下载包)
前言 对于开发者来说,安装jdk按理说是非常简单的事,但在linux下安装着实费了我这个一直玩windows的小白不少劲.这里简单把步骤梳理下,希望能帮助像我这样的纯小白人士少踩点坑. 这里介绍两种安 ...
- final cut pro安装教程【含软件下载包】MAC专用支持m1+m2+Intel
final cut pro安装教程[含软件下载包] final cut pro安装教程及下载地址:点我查看 Final Cut Pro,你能以前所未有的速度和灵活性,将复杂的多机位项目组合起来.64 ...
- 解除R中从github上下载包API限制的问题(Error: Failed to install ‘unknown package‘ from GitHub: HTTP error 403. )
最近在github上下载包,出现了API下载速率限制的问题,返回error 403,并要求使用github_token()取消api rate 的限制.这是因为github会扫描需要安装的依赖程序,如 ...
- golang 下载包报错, 无法下载包
项目场景: 下载并安装了golang, 然后打算安装Gin包, 在终端输入了以下指令 go get github.com/gin-gonic/gin 问题描述 在上文的指令输入之后, 便出现了以下报错 ...
- R语言使用lubridate包的tz函数设置和查询日期、时间对象的时区信息( time zone)
R语言使用lubridate包的tz函数设置和查询日期.时间对象的时区信息( time zone) 目录
- R语言可视化包ggplot2包通过因子变量设置图像颜色实战
R语言可视化包ggplot2包通过因子变量设置图像颜色实战 目录 R语言可视化包ggplot2包通过因子变量设置图像颜色实战 <
最新文章
- Boosting 简介--A (small) introduction to Boosting
- 三因子两水平doe_DOE试验设计案例
- Java并发编程(9):死锁(含代码)
- 微信整人假红包图片_警惕:千万别点!这些红包是假的
- [转]Windows Shell编程 第十五章【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988016】...
- python类方法是什么_python中什么是类方法
- python分布式计算框架_分布式计算框架Spark
- 好消息好消息——带计算机课程的希捷移动硬盘发货啦
- 计算缓存文件大小、清除缓存的Cell
- (附代码)基于Python对交通路口的红绿灯进行颜色检测
- Ubuntu 16.04下开启Mysql 3306端口远程访问
- 扔垃圾前得先“刷脸”?北京这个小区垃圾分类真的用上了“人脸识别”!
- Spring boot 获取本机的IP地址mac地址以及电脑名称!
- Spring|Spring知识点总结思维导图
- ESP32s3-EYE ESP-IDF环境搭建Ubuntu18.04 Micropython环境搭建Pycharm 物联网
- 【IoT】产品设计:包装盒型设计
- java电商商品搜索_Java生鲜电商平台-搜索模块的设计与架构
- plt.contour()功用
- 实现汽车租赁系统的计价功能
- 多用户php商城源码,bymall B2B2C多用户开源商城系统 php版 v1.0.4