×÷Ϊ¼ÆËã»úÓ²¼þÓëÍⲿÉ豸֮¼ä´«ÊäÊý¾ÝµÄ½Ó¿Ú£¬GPIO²»½öÄܹ»¶ÁÈ¡Ðźţ¬»¹ÄÜÊä³öÐźţ¬ÊÇǶÈëʽϵͳÉè¼ÆÖв»¿É»òȱµÄÒ»¸ö²¿·Ö
ͨ¹ýGPIO£¬¿ª·¢Õß¿ÉÒÔ¿ØÖÆLEDµÆ¡¢¶ÁÈ¡°´Å¥×´Ì¬¡¢Çý¶¯µç»úµÈ¶àÖÖÓ²¼þÉ豸
ÔÚLinuxϵͳÖУ¬GPIOͨ¹ýÒ»ÖÖÌØÊâµÄ·½Ê½±»·ÃÎʺͿØÖÆ£¬±¾ÎĽ«Ïêϸ½éÉÜLinuxÖÐGPIOµÄʹÓúͲÙ×÷
GPIO»ù´¡ GPIO£¬¼´Í¨ÓÃÊäÈëÊä³ö¶Ë¿Ú£¬ÊÇÒ»Öַdz£Áé»îµÄ½Ó¿Ú£¬¿ÉÒÔ±»ÉèÖÃΪÊäÈë»òÊä³öģʽ
ÔÚÊäÈëģʽÏ£¬GPIO¿ÉÒÔ¶ÁÈ¡ÍⲿÉ豸µÄÐźţ¬Èç°´Å¥µÄ°´Ñ¹×´Ì¬»ò´«¸ÐÆ÷µÄÊý¾Ý£»ÔÚÊä³öģʽÏ£¬GPIOÔò¿ÉÒÔÊä³öÐźţ¬Èç¿ØÖÆLEDµÆµÄÁÁÃð»òÇý¶¯µç»ú
GPIO¶Ë¿Úͨ¹ý±àºÅÀ´±êʶ£¬ÕâЩ±àºÅ¶ÔÓ¦ÓÚÓ²¼þÉϵľßÌåÒý½Å£¬±àºÅ·½Ê½ÒÀÀµÓÚʹÓõÄÓ²¼þƽ̨ºÍ²Ù×÷ϵͳ
ÀýÈ磬ÔÚÊ÷Ý®ÅÉÉÏ£¬Ã¿¸öGPIO¶Ë¿Ú¶¼ÓÐÒ»¸öΨһµÄ±àºÅ£¬ÈçGPIO18»òGPIO24
GPIOµÄÓÃ;¹ã·º£¬°üÀ¨µ«²»ÏÞÓÚ£º - LED¿ØÖÆ£ºÍ¨¹ýGPIOÊä³ö¸ß»òµÍµçƽÀ´¿ØÖÆLEDµÄÁÁÃð
- °´Å¥¶ÁÈ¡£ºÍ¨¹ýÉèÖÃGPIOΪÊäÈëģʽÀ´¶ÁÈ¡°´Å¥µÄ°´Ñ¹×´Ì¬
- ´«¸ÐÆ÷½Ó¿Ú£ºÐí¶à´«¸ÐÆ÷Èçζȡ¢Êª¶È´«¸ÐÆ÷Êä³öµÄÐźſÉÒÔͨ¹ýGPIO¶ÁÈ¡
- µç»ú¿ØÖÆ£ºÍ¨¹ýGPIO¶Ë¿Ú·¢ËÍ¿ØÖÆÐźÅÀ´Çý¶¯µç»ú
ÔÚLinuxϵͳÖУ¬GPIO¿ÉÒÔͨ¹ýÒ»¸öÌØÊâµÄÎļþϵͳ£¨Í¨³£ÊÇ`/sys/class/gpio`£©À´·ÃÎʺͿØÖÆ
ÕâÒ»ÎļþϵͳÌṩÁËÒ»¸ö±ê×¼½Ó¿ÚÀ´¿ØÖÆÓ²¼þGPIOÒý½Å
LinuxÖеÄGPIOÎļþϵͳ LinuxµÄGPIOÎļþϵͳλÓÚ`/sys/class/gpio`Ŀ¼Ï£¬Í¨¹ý¸Ã·¾¶¿ÉÒÔ·ÃÎÊËùÓе¼³öµÄGPIO¶Ë¿Ú
ÿ¸öGPIO¶¼ÓÐ×Ô¼ºµÄĿ¼£¬±ÈÈç`gpio58`£¬Ä¿Â¼ÄÚ°üº¬¿ØÖƸÃGPIOµÄ¼¸¸öÎļþ£º - export£ºÍ¨¹ýдÈëGPIO±àºÅµ½´ËÎļþÀ´µ¼³öGPIO£¬Ê¹Æä¿Éͨ¹ýÎļþϵͳ¿ØÖÆ
- unexport£ºÍ¨¹ýдÈë±àºÅÀ´È¡Ïûµ¼³ö£¬ÊÍ·ÅGPIO×ÊÔ´
- gpioXX£¨XXÊÇGPIO±àºÅ£©£ºÃ¿¸öµ¼³öµÄGPIO»áÓÐÒ»¸ö¶ÔÓ¦µÄĿ¼£¬°üº¬¿ØÖÆÆäÐÐΪµÄÎļþ
·ÃÎÊÓë¿ØÖÆGPIO ÔÚLinuxϵͳÖУ¬·ÃÎʺͿØÖÆGPIOÐèҪһϵÁв½Ö裬°üÀ¨µ¼³öGPIO¶Ë¿Ú¡¢ÉèÖÃGPIO¶Ë¿ÚµÄ·½Ïò¡¢¶ÁÈ¡ºÍдÈëGPIOÖµµÈ
1.µ¼³öGPIO¶Ë¿Ú ÔÚ¿ªÊ¼¿ØÖÆGPIO֮ǰ£¬ÐèÒªÏȽ«Æäµ¼³öµ½Óû§¿Õ¼ä
Õâ¿ÉÒÔͨ¹ýдÈëÌØ¶¨µÄGPIO±àºÅµ½`export`ÎļþʵÏÖ
ÀýÈ磬Ҫµ¼³öGPIO58£¬¿ÉÒÔʹÓÃÒÔÏÂÃüÁ echo 58 > /sys/class/gpio/export Ö´ÐдËÃüÁîºó£¬ÏµÍ³»áÔÚ`/sys/class/gpio`Ŀ¼Ï´´½¨Ò»¸öÃûΪ`gpio58`µÄÐÂĿ¼
2.ÉèÖÃGPIO¶Ë¿ÚµÄ·½Ïò ÿ¸öGPIO¶Ë¿Ú¿ÉÒÔ±»ÅäÖÃΪÊäÈë»òÊä³öģʽ
Êä³öģʽ½«`out`дÈëµ½`direction`Îļþ£¬ÊäÈëģʽ½«`in`дÈëµ½`direction`Îļþ
ÀýÈ磬Ҫ½«GPIO58ÉèÖÃΪÊä³öģʽ£¬¿ÉÒÔʹÓÃÒÔÏÂÃüÁ echo out > /sys/class/gpio/gpio58/direction ÉèÖÃÍê³Éºó£¬¿ÉÒÔ¼ì²é`direction`ÎļþÀ´È·ÈÏGPIO¶Ë¿ÚµÄ·½ÏòÊÇ·ñÕýÈ·ÉèÖ㺠cat /sys/class/gpio/gpio58/direction ´ËÃüÁîÓ¦·µ»Ø`out`£¬±íÃ÷GPIO58Òѳɹ¦ÉèÖÃΪÊä³öģʽ
3.¶ÁÈ¡ºÍдÈëGPIOÖµ µ±GPIOÉèÖÃΪÊäÈëģʽʱ£¬¿ÉÒÔͨ¹ý¶ÁÈ¡`value`ÎļþÀ´»ñÈ¡Æäµ±Ç°×´Ì¬
Õâ¸öֵͨ³£ÊÇ0£¨µÍµçƽ£©»ò1£¨¸ßµçƽ£©£¬±íʾÍⲿÐźŵÄ״̬
ÀýÈ磬Ҫ¶ÁÈ¡GPIO58µÄµ±Ç°Öµ£¬¿ÉÒÔʹÓÃÒÔÏÂÃüÁ cat /sys/class/gpio/gpio58/value Õâ¸öÃüÁ·µ»ØGPIO58µÄµçƽ״̬£¬°ïÖúÓû§Á˽âÍⲿÉ豸µÄµ±Ç°×´Ì¬£¬Èç°´Å¥ÊÇ·ñ±»°´ÏÂ
µ±GPIOÉèÖÃΪÊä³öģʽʱ£¬¿ÉÒÔͨ¹ýдÈë`value`ÎļþÀ´¿ØÖÆÆäÊä³ö¸ßµçƽ»òµÍµçƽ
Êä³ö¸ßµçƽдÈë1µ½`value`Îļþ£¬Ê¹É豸ͨµç»ò¶¯×÷£»Êä³öµÍµçƽдÈë0µ½`value`Îļþ£¬Ê¹É豸¶Ïµç»òÍ£Ö¹¶¯×÷
ÀýÈ磬ҪÉèÖÃGPIO58Êä³ö¸ßµçƽ£¬¿ÉÒÔʹÓÃÒÔÏÂÃüÁ echo 1 > /sys/class/gpio/gpio58/value ÕâÌõÃüÁʹÁ¬½Óµ½GPIO58µÄÉ豸£¨ÈçLEDµÆ£©ÁÁÆð
ʵ¼ÊÓ¦ÓÃʾÀý£º¿ØÖÆLEDµÆ ΪÁËʵ¼ÊÑÝʾÈçºÎʹÓÃGPIO¿ØÖÆÒ»¸ö¼òµ¥µÄÓ²¼þÉ豸£¬ÒÔÏÂÊÇÒ»¸ö¿ØÖÆLEDµÆµÄʾÀý£º 1.Á¬½ÓLED£ºÈ·±£LEDµÄÒ»¸öÒý½ÅÁ¬½Óµ½GPIO58£¬ÁíÒ»¸öÒý½Å½ÓµØ
2.µ¼³öGPIO58²¢ÉèÖÃΪÊä³ö£º°´ÕÕÇ°ÃæµÄÖ¸µ¼²½Öè²Ù×÷
3.¿ØÖÆLEDÁÁÃð£ºÒªµãÁÁLED£¬Ö´ÐÐ`echo 1 > /sys/class/gpio/gpio58/value`£»ÒªÏ¨ÃðLED£¬Ö´ÐÐ`echo 0 > /sys/class/gpio/gpio58/value`
ͨ¹ýÕâЩ²½Ö裬¿ÉÒÔÖ±¹ÛµØ¿´µ½±àдÃüÁîÓëÎïÀíÊÀ½ç½»»¥µÄ½á¹û£¬¼ÓÉî¶ÔGPIO²Ù×÷µÄÀí½â
¸ß¼¶²Ù×÷Óë×Ô¶¯»¯ ³ýÁË»ù±¾µÄ¶ÁÈ¡ºÍдÈë²Ù×÷Í⣬LinuxÖеÄGPIO»¹Ö§³ÖһЩ¸ß¼¶²Ù×÷£¬Èç±ßÔµ¼ì²âºÍʼþ´¦Àí
ÕâЩ¹¦ÄܶÔÓÚ¹¹½¨ÏìӦʽϵͳÖÁ¹ØÖØÒª
- ±ßÔµ¼ì²â£ºÍ¨¹ýÉèÖÃGPIOµÄÖжϴ¥·¢·½Ê½£¬¿ÉÒÔÔÚGPIOÐźŷ¢Éú±ä»¯Ê±²úÉúÖжϣ¬´Ó¶ø¼°Ê±ÏìÓ¦Íⲿʼþ
Õâ¿ÉÒÔͨ¹ýÐÞ¸Ä`edge`ÎļþÀ´ÊµÏÖ£¬¿ÉÒÔÉèÖÃΪ`none`£¨ÎÞÖжϴ¥·¢£©¡¢`rising`£¨ÉÏÉýÑØ´¥·¢£©¡¢`falling`£¨Ï½µÑØ´¥·¢£©»ò`both`£¨ÉÏÉýÑØºÍϽµÑض¼´¥·¢£©
- ×Ô¶¯»¯½Å±¾£ºÍ¨¹ý±àд½Å±¾£¬¿ÉÒÔ×Ô¶¯»¯¿ØÖÆGPIOµÄ²Ù×÷£¬ÈçʹLEDµÆ°´Ô¤¶¨¼ä¸ôÉÁ˸
Õâ¿ÉÒÔͨ¹ýshell½Å±¾»òPython½Å±¾ÊµÏÖ£¬½áºÏ`sleep`ÃüÁîÀ´¿ØÖÆÊ±¼ä¼ä¸ô
GPIO¿ØÖÆ·½·¨ ÔÚLinuxϵͳÖУ¬¿ØÖÆGPIOÒý½ÅÓжàÖÖ·½·¨£¬°üÀ¨Ê¹ÓÃsysfs½Ó¿Ú¡¢GPIO¼üÅÌÇý¶¯ºÍlibgpiod¿â
- sysfs½Ó¿Ú£ºÕâÊÇÒ»ÖÖ¼òµ¥Ö±¹ÛµÄ·½·¨£¬Í¨¹ý¶ÁÐ´ÌØ¶¨µÄÎļþÀ´²Ù×÷GPIOÒý½Å
µ«ÊÇ£¬¶ÔÓÚ¸ßÆµÂʵIJÙ×÷¿ÉÄÜ»áÓÐÐÔÄÜÎÊÌâ
- GPIO¼üÅÌÇý¶¯£ºÔÊÐíʹÓÃGPIOÒý½Å×÷ΪÊäÈëÉ豸£¬½«ÆäÊÓΪ¼üÅ̵İ´¼ü»ò¿ª¹Ø
ÕâÖÖ·½·¨ÊÊÓÃÓÚÐèÒª½«GPIOÒý½ÅÓÃ×÷ÊäÈëÉ豸µÄ³¡¾°
- libgpiod¿â£ºÕâÊÇÒ»¸öÓû§¿Õ¼äÓÃÓÚ¿ØÖÆGPIOµÄ¿â£¬ÌṩÁËÁé»îµÄAPIÀ´Ö±½Ó²Ù×÷GPIOÒý½Å£¬ÎÞÐèÒÀÀµsysfs½Ó¿Ú
ËüÌṩÁ˸üÁé»îºÍ¸ßЧµÄGPIO²Ù×÷·½Ê½