#申请原创#
HaaS610 Kit 4G开发板由阿里云、广和通、旗点科技及电子发烧友联合推出,它搭载有阿里云HaaS轻应用框架,基于广和通4G Cat1模组,拥有丰富的io资源、并配有wif通信性能,是一款面向4G开发的有效工具,其外观如图1所示。 图1 HaaS610 Kit 4G开发板 与常规的开发板有所不同的是,该开发板的编程语言为JavaScript,是互联网上流行的一种脚本语言,也是一种轻量级的编程语言。 这里所说的“轻应用”是指可运行在轻量级嵌入式设备上的JavaScript应用,而“轻应用框架”则是指封装了 JavaScript 引擎和 API 接口, 用于支持轻应用开发的软件框架。 轻应用框架的运行流程如图2所示,一个最精简的轻应用包最少由两个文件组成,必须放在项目文件夹的根目录,见图3所示。 图2运行流程 通常来说, js 文件用于存放我们实现业务的逻辑,而json 文件则用于配置一些全局变量,尤其是 io 引脚。
图3轻应用最小构成 1. 引脚使用分配 出于扩展的需要,HaaS610 Kit 4G开发板配有Arduino 接口,其引脚分布如图4所示。
图4 Arduino接口引脚分布 所使用的色彩OLED屏的引脚排列顺序为: GND VCC SCL SDA RES DC CS BLK 鉴于OLED屏的电源引脚与Arduino接口的方向不一致,故不能直接将OLED屏插到Arduino接口来使用。 出于使用方便的需要,OLED屏各引脚与开发板的连接关系为: SCL—P40 SDA—P39 RES—P38 DC—P37 CS—P121 BLK—P119 为将这些引脚配置为输出口,故json的文件内容为: {
"version": "1.0.0",
"io": {
"blk": {
"type": "GPIO",
"port": 119,
"dir": "output",
"pull": "pulldown"
},
"scl": {
"type": "GPIO",
"port": 40,
"dir": "output",
"pull": "pulldown"
},
"sda": {
"type": "GPIO",
"port": 39,
"dir": "output",
"pull": "pulldown"
},
"res": {
"type": "GPIO",
"port": 38,
"dir": "output",
"pull": "pulldown"
},
"dc": {
"type": "GPIO",
"port": 37,
"dir": "output",
"pull": "pulldown"
},
"cs": {
"type": "GPIO",
"port": 121,
"dir": "output",
"pull": "pulldown"
}
},
"debugLevel": "DEBUG"
}
2. 引脚输出能力检测 为保证引脚的输出能力,在使用前需进行相应的验证。 验证的js文件内容为: vargpio = require('gpio');
var blk = gpio.open({
id: ' blk ',
success: function() {
console.log('gpio: open led success')
},
fail: function() {
console.log('gpio: open led failed')
}
});
varscl = gpio.open({
id: 'scl',
success: function() {
console.log('gpio: open scl success')
},
fail: function() {
console.log('gpio: open scl failed')
}
});
var sda = gpio.open({
id: 'sda',
success: function() {
console.log('gpio: open sda success')
},
fail: function() {
console.log('gpio: open sda failed')
}
});
var res = gpio.open({
id: 'res',
success: function() {
console.log('gpio: open res success')
},
fail: function() {
console.log('gpio: open res failed')
}
});
var dc = gpio.open({
id: 'dc',
success: function() {
console.log('gpio: open dc success')
},
fail: function() {
console.log('gpio: open dc failed')
}
});
var cs = gpio.open({
id: 'cs',
success: function() {
console.log('gpio: open cs success')
},
fail: function() {
console.log('gpio: open cs failed')
}
});
varvol = 0;
functionledblink() {
console.log('ledblink');
blk.toggle();
scl.toggle();
sda.toggle();
res.toggle();
dc.toggle();
cs.toggle();
}
var id1 = setInterval(ledblink, 1000);
var id2 = setInterval(function() {
console.log('setInterval');
}, 500);
在程序下载后,经外挂LED模块的验证,各引脚均具有实现的驱动能力。 3. 函数设计与验证 在OLED屏的显示驱动中,字节数据发送函数是至关重要的,这里所采用的实现方式是以GPIO口来模拟SPI发送数据。 模拟发送数据的验证程序为: functionLCD_Writ_Bus(dat){
var i;
cs.writeValue(0);
for(i=0;i<8;i++)
{
scl.writeValue(0);
if(dat&0x80){
sda.writeValue(1);
console.log('d=1');
}
else
{
sda.writeValue(0);
console.log('d=0');
}
scl.writeValue(1);
dat<<=1;
}
cs.writeValue(1);
}
functionledblink() {
console.log('dat=0x64');
LCD_Writ_Bus(0x64);
}
经程序下载,该函数的验证结果如图5所示,说明功能正确。 图5验证结果 4. 点亮OLED屏 有了字节发送函数的支持,是否就能点亮OLED屏呢? 这还要由实际效果来检验,以色彩清屏的函数为: function LCD_Clear(Color) {
vari,j;
LCD_Address_Set(0,0,159,79);
for(i=0;i<160;i++)
{
for (j=0;j<80;j++)
{
LCD_WR_DATA(Color);
}
}
}
经下载测试,其显示效果如图所示,说明显示驱动已具备了基础。 图6彩色清屏效果 5. 字模提取与显示 字符显示要依赖字模的支持,为此可用PCtoLCD2002来提取所需的字模来构建字库。提取字模的选项设置如图7所示,其提取结果见图8的内容。 图7 选项设置 图8 提取结果 相应的字模存储形式为: var F8X16=[ //Haas610Kit 0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,//"H",0 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x30,0x2C,0x22,0x32,0x6C,0x00,0x00,//"a",1 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x30,0x2C,0x22,0x32,0x6C,0x00,0x00,//"a",2 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x42,0x02,0x3C,0x40,0x42,0x3E,0x00,0x00,//"s",3 ... ]; 对应字符显示函数为: function LCD_ShowChar(x,y,num,color) {
var temp;
varpos,t;
var x0=x;
LCD_Address_Set(x,y,x+8-1,y+16-1);
for(pos=0;pos<16;pos++)
{
temp=F8X16[num*16+pos];
for(t=0;t<8;t++)
{
if(temp&0x01) LCD_WR_DATA(color);
else LCD_WR_DATA(BACK_COLOR);
temp>>=1;
x++;
}
x=x0;
y++;
}
}
经下载验证,其显示效果如图8所示,至此OLED屏的显示驱动就完成了! 图8 字符显示效果
|