闪烁 LED – 使用 IoT 开发工具包操作 Intel® Galileo 板上的数字 GPIO





0/5 (0投票)
此示例代码使用物联网开发工具包的Live USB镜像来运行一个主机系统,该系统可以使用Yocto应用程序开发工具和Eclipse*控制英特尔® Galileo板。
引言
此示例代码使用物联网开发工具包的Live USB镜像来运行一个主机系统,该系统可以使用Yocto应用程序开发工具和Eclipse*控制英特尔® Galileo板。此示例假定英特尔 Galileo板使用SD镜像启动,该镜像也包含在物联网开发工具包中。可以直接在板上使用此代码,但这将是未来论文的主题。
英特尔 Galileo板是一款Arduino*认证的板卡,它为创建项目和实现物联网创意提供了无限的可能性。下图显示了如何从操作系统访问数字GPIO的控制。
每个GPIO的逻辑表示都可以在/sys/class/gpio目录中找到。Sergey的博客对模块和GPIO的映射进行了出色的介绍,包括上述映射,解释了系统中GPIO背后的硬件。
对于此示例,我们将使用引脚编号5、6和7,因为它们直接映射到硬件,并且没有其他输入(例如,与引脚#3不同)。我们将一个LED连接到这些引脚中的每一个。由于每个LED都有其自身的所需输入电压,我们添加了电阻来调整电压。电路图如下所示
以下是提供操作GPIO所需步骤的示例代码
(1) 将GPIO编号导出到/sys/class/gpio/export文件
(2) 设置方向:输入为in,输出为out
这些步骤使用openGPIO函数实现,该函数打开相应的文件并返回此文件标识符,以便将来根据声明的方向进行读取或写入。
int openGPIO(int gpio, int direction )
{
char buffer[256];
int fileHandle;
int fileMode;
//Export GPIO
fileHandle = open("/sys/class/gpio/export", O_WRONLY);
if(ERROR == fileHandle)
{
puts("Error: Unable to opening /sys/class/gpio/export");
return(-1);
}
sprintf(buffer, "%d", gpio);
write(fileHandle, buffer, strlen(buffer));
close(fileHandle);
//Direction GPIO
sprintf(buffer, "/sys/class/gpio/gpio%d/direction", gpio);
fileHandle = open(buffer, O_WRONLY);
if(ERROR == fileHandle)
{
puts("Unable to open file:");
puts(buffer);
return(-1);
}
if (direction == GPIO_DIRECTION_OUT)
{
// Set out direction
write(fileHandle, "out", 3);
fileMode = O_WRONLY;
}
else
{
// Set in direction
write(fileHandle, "in", 2);
fileMode = O_RDONLY;
}
close(fileHandle);
//Open GPIO for Read / Write
sprintf(buffer, "/sys/class/gpio/gpio%d/value", gpio);
fileHandle = open(buffer, fileMode);
if(ERROR == fileHandle)
{
puts("Unable to open file:");
puts(buffer);
return(-1);
}
return(fileHandle); //This file handle will be used in read/write and close operations.
}
在主函数中,我们为要操作的每个引脚调用openGPIO
fileHandleGPIO_5 = openGPIO(GP_5, GPIO_DIRECTION_OUT);
fileHandleGPIO_6 = openGPIO(GP_6, GPIO_DIRECTION_OUT);
fileHandleGPIO_7 = openGPIO(GP_7, GPIO_DIRECTION_OUT);
一旦我们验证了没有错误,我们就可以进行有趣的部分,即更改GPIO值到0或1,从而有效地启用或禁用端口中的电压,并使LED闪烁
for(i=0; i< 10; i++)
{
//LED ON
writeGPIO(fileHandleGPIO_LED, 1);
writeGPIO(fileHandleGPIO_5, 1);
writeGPIO(fileHandleGPIO_6, 1);
writeGPIO(fileHandleGPIO_7, 1);
sleep(BLINK_TIME_SEC);
//LED OFF
writeGPIO(fileHandleGPIO_LED, 0);
writeGPIO(fileHandleGPIO_5, 0);
writeGPIO(fileHandleGPIO_6, 0);
writeGPIO(fileHandleGPIO_7, 0);
sleep(BLINK_TIME_SEC);
}
完整的代码可以在这里找到。要执行它,请在物联网开发工具包的Live USB镜像中打开Hello World示例,并将那里的代码替换为BlinkingLEDs.c文件的代码。它应该可以正常运行。
Intel 和 Intel 标志是 Intel Corporation 在美国和/或其他国家/地区的商标。
版权所有 © 2014 英特尔公司。保留所有权利。
*其他名称和品牌可能被声明为他人的财产。