树莓派用wiringPi控制SPI口的方法有什么 树莓派和Arduino串口通信的问题
树莓派用wiringPi控制SPI口的方法有什么?
方案——使用GIT工具:
如果在你的平台上还没有安装GIT工具,可以输入以下命令:
sudo apt-get install git-core
如果在这个过程中出现错误,尝试更新软件,例如输入以下指令:
sudo apt-get update
sudo apt-get upgrade
紧接着可以通过GIT获得wiringPi的源代码
git clone git://git.drogon.net/wiringPi
若需要更新wiringPi。
cd wiringPi
git pull origin
进入wiringPi目录并安装wiringPi
cd wiringPi
./build
build脚本会帮助你编译和安装wiringPi
WiringPi简介:
WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3。wiringPi使用C或者C 开发并且可以被其他语言包转,例如python、ruby或者PHP等。WiringPi中的函数类似于Arduino的wiring系统,这使得熟悉arduino的用户使用wringPi更为方便。
树莓派具有26个普通输入和输出引脚。在这26个引脚中具有8个普通输入和输出管脚,这8个引脚既可以作为输入管脚也可以作为输出管脚。除此之外,树莓派还有一个2线形式的I2C、一个4线形式的SPI和一个UART接口。
树莓派上的I2C和SPI接口也可以作为普通端口使用。如果串口控制台被关闭便可以使用树莓派上的UART功能。如果不使用I2C,SPI和UART等复用接口,那么树莓派总共具有8 2 5 2 =17个普通IO。wiringPi包括一套gpio控制命令,使用gpio命令可以控制树莓派GPIO管脚。
用户可以利用gpio命令通过shell脚本控制或查询GPIO管脚。wiringPi是可以扩展的,可以利用wiringPi的内部模块扩展模拟量输入芯片,可以使用MCP23x17/MCP23x08(I2C 或者SPI)扩展GPIO接口。
另外可通过树莓派上的串口和Atmega(例如arduino等)扩展更多的GPIO功能。另外,用户可以自己编写扩展模块并把自定义的扩展模块集成到wiringPi中。WiringPi支持模拟量的读取和设置功能,不过在树莓派上并没有模拟量设备。但是使用WiringPi中的软件模块却可以轻松地应用AD或DA芯片。
树莓派和Arduino串口通信的问题
如果和Arduino连接的串口,必须始终处于打开的状态。如果关闭重新打开,那么,Arduino就会重启,这是Arduino的Bootload里设置的功能。
如果你有足够的能力,可以尝试修改你对应的Arduino板子的Bootload,使其不会重启,当然这比较麻烦。当然,你也可以修改你在派上的程序,使其保持对端口的打开后的占用,不要用完了就关闭,这样也可以。
不过,看你说是用PHP调用的C程序,估计调用完了串口就会自动关闭,你需要重新设计你的调用了。
求教树莓派用wiringPi控制SPI口的方法,高分!!
#include
#include
#include
void main(void)
{
int spi1
unsigned char date[2],rec[2]
int spiChannel = 0
int clock = 1000000
wiringPiSetup()
spi1 = wiringPiSPISetup(spiChannel,clock)
if(spi1!=-1)
{
printf("Starting SPI Test
")
printf("Write:
")
date[0]=0x80//寄存器地址
date[1]=0x55//要写的数据
wiringPiSPIDataRW(0,date,2)
printf("date[0] : %d ",date[0])
printf("date[1] : %d
",date[1])
delay(500)
printf("Read:
")
rec[0]=0x00//寄存器地址
rec[1]=0x00
wiringPiSPIDataRW(0,rec,2)
printf("rec[0] : %d ",rec[0])
printf("rec[1] : %d
",rec[1])//返回的数据是这个
}
}
我试过可行的,编译gcc -Wall -o testSPI testSPI.c -lwiringPi
sudo ./testSPI
关于树莓派与c51通过串口来通信的问题
c51似乎很久没有听说过了。大约很早以前用过做电话的计费器。 8位机。 按理应该是没有问题。
GPIO不是串口,应该算是并口。 一个针脚可以给一个信号。有一个扫描频率。 也许我说的不对。 它就是串口,不过几对针脚可以同时使用。
英国产的树莓派元件通常结实些。试验一下也没有问题。
印象中工作串口似乎有一定的电流的。有些串口电流还有些大。 不过C51应该还好。
GPIO似乎是3.3V的。 如果是这样子(你再确认一下),就不应该与5V的串口直接连接。可以通过一块转接板。网上有卖的。不贵。还会有其它的附加功能。
树莓派怎么安装wiringpi库
1.简介wiringPi
wiringPi , 安装好这个库后可以直接 调用函数配置和控制GPIO功能
下图中左边是wiringPi封装好后的引脚,右边是树莓派本身的引脚(bcm2835库也使用它)
还有一张图可以参考:
2.树莓派中安装wiringPi方法:
mkdir temp
cd temp
wget http://project-downloads.drogon.net/files/wiringPi.tgz
tar xf wiringPi.tgz
cd wiringPi/wiringPi/
make
make install
测试LED的程序:#include
#include
#include
int main (int argc,char* argv[])
{
if (argc < 2) {
printf("Usage example: ./led 4
")
return 1
}
int pinNumber = atoi(argv[1])
if (-1 == wiringPiSetup()) {
printf("Setup wiringPi failed!")
return 1
}
pinMode(pinNumber, OUTPUT) // set mode to output
while(1) {
digitalWrite(pinNumber, 1) // output a high level
delay(800)
digitalWrite(pinNumber, 0) // output a low level
delay(800)
}
return 0
}
3.相关问题
使用wiringPi的程序进行测试编译时出现了如下问题:
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../ libwiringPi.so: undefined reference to `i2c_smbus_write_byte
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../ libwiringPi.so: undefined reference to `i2c_smbus_read_byte
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../ libwiringPi.so: undefined reference to `i2c_smbus_write_byte_data
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../ libwiringPi.so: undefined reference to `i2c_smbus_write_word_data
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../ libwiringPi.so: undefined reference to `i2c_smbus_read_word_data
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../ libwiringPi.so: undefined reference to `i2c_smbus_read_byte_data
collect2: ld returned 1 exit status
网上少个相关资料,发现 是少装了库的原因:
需要安装这几个库: i2c-tools, libi2c-dev ,python-smbus
执行命令 sudo apt-get install libi2c-dev ,会自动安装这三个。
然后重新编译就可以了。
make clean
sudo make uninstall
make
sudo make install
之后就能正常编译了,别忘了最后要加连接动态库的选项 -l wiringPi 。