前言
之前玩树莓派都是使用Qt去做开发,偶然一次导师要我去研究一下Simulink,用Simulink做树莓派开发,才知道matlab可以玩硬件,虽然之前参加建模的时候有用过matlab(功能强大到只能窥探到冰山一角),在此记录一下,方便自己以及大家后续学习!
一、踩坑记录
-
环境只支持window系统;
-
树莓派开发版只支持B版;
-
树莓派需要使用MATLAB定制版镜像,且镜像和你安装的MATLAB的版本要对应;
-
下载时常会中断,导致下载不成功,所以建议夜间下载;
镜像下载地址:https://github.com/mathworks/Raspbian_OS_Setup/releases
-
MATLAB支持包中有两个支持包,一个是MATLAB的支持包(用于在MATLAB中编写代码控制树莓派硬件),一个是simulink的支持包(进行simulink仿真),分别是:
MATLAB Support Package for Raspberry Pi Hardware
Simulink Support Package for Raspberry Pi Hardware -
MATLAB树莓派定制镜像安装好后,默认没有图形界面需要自行配置,具体操作如下;
sudo apt-get update
sudo apt-get install xorg -y
sudo apt-get install lxde openbox -y
sudo apt-get install pix=icons pix-plym-splash rpd-wallpaper -y
sudo apt-get install raspberrypi-ui-mods -y
- 使用MATLAB操作树莓派时,GPIO引脚与wiringPi不一样
二、具体安装步骤
2.1、安装硬件支持包
2.2、找到树莓派支持包并安装
2.3、开始烧录镜像
点击右侧齿轮进行安装:
选择树莓派版本:
建议提前下好安装镜像:
连接无线网:
插入内存卡开始烧录matlab定制镜像:
烧录完成之后把内存卡插入树莓派并上电:
注意:稍微等一会再点Next,给树莓派启动时间
测试连接成功:
安装完成:
三、具体使用步骤
3.1、安装MATLAB Support Package for Raspberry Pi Hardware
1、GPIO操作
mypi=raspi(‘192.168.0.10’,'pi,‘123456’); //创建树莓派对象mypi
mypi.AvailableDigitalPins; //查看树莓派可使用GPIO引脚
showPins(mypi); //显示树莓派引脚图
configureDigitalPin(mypi,4,‘input’); //初始化GPIO4为输入
readDigitalPin(mypi,4); //从GPIO4读取
configureDigitalPin(mypi,7,‘output’); //初始化GPIO4为输入
writeDigitalPin(mypi,7,1); //从GPIO4读取
实例:
mypi=raspi('192.168.0.10','pi,'123456');
configureDigitalPin(mypi,7,'output');
while(true)
writeDigitalPin(mypi,7,1);
pause(0.5);
writeDigitalPin(mypi,7,0);
pause(0.5)
end
2、UART操作
mypi=raspi(‘192.168.0.10’,‘pi,‘123456’); //创建树莓派对象mypi
myserialdevice=serialdev(mypi,’/dev/ttyAMA0’); //创建串口对象myserialdevice,默认115200 8 n 1
myserialdevice=serialdev(mypi,’/dev/ttyAMA0’,115200,8,‘none’,1);
write(myserialdevice,[10 12],‘uint16’); //通过串口发送一个数组,默认是uint8
output=read(myserialdevice,100); //通过串口读取数据
使用串口控制台
system(mypi,‘sudo rpi-serial-console enable’);
system(mypi,‘sudo shutdown -r now’);
clear mypi;
3、I2C操作
mypi = raspi(‘192.168.0.10’,'pi,‘123456’); //创建树莓派对象mypi
mypi.AvailableI2CBuses; //看出I2C设备
mypi.I2CBusSpeed; //查看I2C总线速率
addr = scanI2CBus(mypi,‘i2c-1’); //获取挂载在I2C总线的I2C设备地址 addr= 0x62
i2cdac = i2cdev(mypi,‘i2c-1’,char(addr));
write(i2cdac,4092);
read(i2cdac,1);
writeRegister(i2cdac,3,hex2dec(‘08’),‘uint16’); //想寄存器3中写入十六进制08
readRegister(i2cdac,3);
disableI2C(mypi); //关闭I2C引脚使能,使用GPIO
enableI2C(mypi,400000); //使能I2C,并将总线速率设为400000
4、SPI操作
mypi = raspi(‘192.168.0.10’,'pi,‘123456’); //创建树莓派对象mypi
enableSPI(mypi); //使能SPI
mypi.AvailableSPIChannels; //获取通道
myspidevice = spidev(mypi,‘CE1’,0); //创建SPI对象myspidevice
out = writeRead(myspidevice,[hex2dec(‘08’) hes2dec(‘D4’)]); //读写SPI设备
3.2、安装Simulink Support Package for Raspberry Pi Hardware
打开Simulink:
创建Simulink文件:
从库中添加组件,搭建模型:
找到Simulink对树莓派的支持包:
在组件上右键添加到模型中:
接线:
点击开始运行:
运行结果:
(因为我手边没有摄像头,所以树莓派没有接摄像头,故没有视频信号)