Arduino的本质:全世界各厂商主雹激流微控制器底层程序标准化。由顶级高手们编写主流微控制器底层驱动,固化封装成更易用语言,减少BUG,增加终端产品开发效率。弱化项目中嵌入式软件工程师的作用,强化硬件工程师和PCB设计工程师的作用。随着PCB打样技术成熟,价格低廉,完美符合当前市场价值要求。频繁快速打样的价格远远低于程序开发价格。可以避免以往前期平台软件开发大量资金和时间投入,快速进入到项目运营研讨和量产研讨阶段。
树莓派的本质:固化硬件系统,尺寸,性能,外设增减都不可改,必须购买树莓派原版硬件。避免硬件设计,避免PCB工程设计,打样,焊接,调试。使用LINUX系统,强化嵌入式软件工程师尤其是LINUX软件工程师的作用,弱化硬件工程师和PCB设计工程师的作用。随着电子技术的不断进步,硬件新芯片日新月异,这种模式不符合发展潮流,LINUX的随意更改,大量底层驱动软件开发人员水平的良莠不齐,意味着层出不穷的软件BUG和混乱的应用逻辑,最终影响终端产品的效果和源陵袜数据安全性,可以参考早期各行业繁多昙花一现的LINUX嵌入式终端,开发软件平台建设时间久,资金大,运营研讨和量产研讨拖得很久,变数大,风险高,成功率小。好处是,这种模式可以让桌面 *** 作系统的软件工程师和互联网软件公司,找到微控制器应用领域的一个切入点,。应用LINUX系统去分ST,AT,TI,MICOCHIP等硬件芯片公司的终端产品一杯羹,实现过度,后期仍然要转换到灵活硬件设计,固化软件平台开发的轨道上来。
首先树莓派得安装 python-smbus, i2c-tools,然后修尺耐迅改文件:sudo nano /etc/modules,添加上 i2c-bcm2708 和i2c-dev 这两行,Raspbian还需要在raspi-config中激活i2c.
用 sudo i2cdetect -y 1 查看设备地址,
例子1:LCD2004,设备地址 为0x27;
先写个驱动亩迅调用程陵此序 i2c_driver_lcd.py
import smbus
from time import *
# LCD Address
ADDRESS = 0x27
# commands
LCD_CLEARDISPLAY = 0x01
LCD_RETURNHOME = 0x02
LCD_ENTRYMODESET = 0x04
LCD_DISPLAYCONTROL = 0x08
LCD_CURSORSHIFT = 0x10
LCD_FUNCTIONSET = 0x20
LCD_SETCGRAMADDR = 0x40
LCD_SETDDRAMADDR = 0x80
# flags for display entry mode
LCD_ENTRYRIGHT = 0x00
LCD_ENTRYLEFT = 0x02
LCD_ENTRYSHIFTINCREMENT = 0x01
LCD_ENTRYSHIFTDECREMENT = 0x00
# flags for display on/off control
LCD_DISPLAYON = 0x04
LCD_DISPLAYOFF = 0x00
LCD_CURSORON = 0x02
LCD_CURSOROFF = 0x00
LCD_BLINKON = 0x01
LCD_BLINKOFF = 0x00
# flags for display/cursor shift
LCD_DISPLAYMOVE = 0x08
LCD_CURSORMOVE = 0x00
LCD_MOVERIGHT = 0x04
LCD_MOVELEFT = 0x00
# flags for function set
LCD_8BITMODE = 0x10
LCD_4BITMODE = 0x00
LCD_2LINE = 0x08
LCD_1LINE = 0x00
LCD_5x10DOTS = 0x04
LCD_5x8DOTS = 0x00
# flags for backlight control
LCD_BACKLIGHT = 0x08
LCD_NOBACKLIGHT = 0x00
# set init LCD BACKLIGHT ON or OFF
def lcd_backlight(lcdbl=1):
if lcdbl == 0 :
return LCD_NOBACKLIGHT
return LCD_BACKLIGHT
En = 0b00000100 # Enable bit
Rw = 0b00000010 # Read/Write bit
Rs = 0b00000001 # Register select bit
class lcd(object):
#initializes objects and lcd
def __init__(self,lcd_bl,port=1):
self.addr = ADDRESS
self.bus = smbus.SMBus(port)
self.lcd_bl = lcd_bl
self.lcd_write(0x03)
self.lcd_write(0x03)
self.lcd_write(0x03)
self.lcd_write(0x02)
self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)
self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON)
self.lcd_write(LCD_CLEARDISPLAY)
self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT)
sleep(0.2)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)