#申请原创#
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 字符显示效果
|