GPIO - Shaofa/AliOS-Things-Certification-Manual GitHub Wiki

#GPIO API

API
说明
GPIO.open(id)
功能:打开gpio
参数: id:和板级配置文件中的id保持一致
返回值:返回资源handle
GPIO.close(handle)
功能:关闭gpio
参数: handle:资源handle,为GPIO.open的返回值;
返回值:0=ok other=fail
GPIO.write(handle,level)
功能:设置gpio输出电压
参数: handle:资源handle,为GPIO.open的返回值;  
          level:电平值,0或1
返回值:0=ok other=fail
GPIO.read(handle)
功能:获取gpio输入电压
参数: handle:资源handle,为GPIO.open的返回值;
 返回值:引脚电平值
GPIO.on(handle,edge,cb)
功能:gpio中断监听
参数: handle:资源handle,为GPIO.open的返回值;
edge:中断触发类型,"rising"上升沿触发,"falling"下降沿触发,"both"双边沿触发;  
cb:服务function;
返回值:0=ok other=fail

#板级配置参数

参数名
类型/功能/值
说明
"id"
功能:资源唯一性标志
类型:string
值:任意,保持数组内id值唯一;
该id值和js层GPIO.open时的id值保持一致;
"port"
功能:端口值;
类型:number
值:和板级资源描述保持一致;
该port值和HAL层API对应的port保持一致;
"dir"
功能:配置gpio的输入或输出;
类型:number
值:0="output" 1="input" 2="irq"  3="analog";
配置gpio中断触发功能,有些场景使用"imput",有些场景使用"irq",需要根据实际的场景设定。
"pull"
功能:配置gpio的上拉下拉开漏;
类型:number
值:0="pulldown" 1="pullup" 2="open";

#板级配置示范

{
	"GPIO":[
		{
		"id":"beep",
		"port":22,
		"dir":0,
		"pull":1
		},
		{
		"id":"key",
		"port":23,
		"dir":2,
		"pull":1
		}
	]
}

#DeveloperKit之LED

#硬件

1.jpg | left | 410x458.96613190730835

#接线

#配置

/*apps/js/board_config.json*/
{
	"GPIO":[
		{
		"id":"gled",
		"port":60,
		"dir":0,
		"pull":1
		}
	]
}

#代码

print('start gled test.....................');
var gled_level = 0;
var gled_handle = GPIO.open('gled'); 
setInterval(function() {
    GPIO.write(gled_level,1-gled_level);
    gled_level = 1-gled_level; 
}, 5000);
print('end gled test........................');

#现象

gled 间隔5s进行闪烁。

#ESP32之按键

#硬件

1)ESP32开发板; 2)按键模块;

key.png | left | 458x332

#接线

EPS32 IO23引脚 连接 按键模块的OUT引脚; EPS32 GND引脚 连接 按键模块的GND引脚; EPS32 3.3V引脚 连接 按键模块的VCC引脚;

#配置

/*apps/js/board_config.json*/
{
	"GPIO":[
		{
		"id":"key",
		"port":23,
		"dir":2,
		"pull":1
		}
	]
}

#代码

print('start key test.....................');

var key_handle = GPIO.open('key');
GPIO.on(key_handle,'both',function(value){
	print('key_value:'+value);
});	
print('end key test........................');

#现象

按下按键,终端会打印对应的状态

#硬件

1)ESP32开发板; 2)DHT11模块;

dht112.png | left | 363x353

#接线

EPS32 IO19引脚 连接 DHT11模块的OUT引脚; EPS32 GND引脚 连接 DHT11模块的GND引脚; EPS32 3.3V引脚 连接 按键模块的VCC引脚;

#配置

/*apps/js/board_config.json*/
{
        "GPIO":[
            {
                "id":"dht11",
                "port":19,
                "dir":3,
                "pull":1
            }
        ]
}

#代码

/*samples/js/dht11.js*/
var dht11_handle = GPIO.open('dht11');
setInterval(function() {
		var dht11_buff = HW.getDht11(dht11_handle);
		console.log('dht11->hum:'+dht11_buff[0]+ '  temp:'+dht11_buff[1]);
}, 5000);

#现象

系统每间隔5s打印温湿度值。

test.jpg | left | 434x245

#TODO

⚠️ **GitHub.com Fallback** ⚠️