<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.radxa.com/mw/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.radxa.com/mw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jdarling</id>
		<title>Radxa Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.radxa.com/mw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jdarling"/>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Special:Contributions/Jdarling"/>
		<updated>2026-06-06T16:31:20Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.23.3</generator>

	<entry>
		<id>https://wiki.radxa.com/Rock/GPIO</id>
		<title>Rock/GPIO</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Rock/GPIO"/>
				<updated>2014-09-25T21:56:54Z</updated>
		
		<summary type="html">&lt;p&gt;Jdarling: Added JavaScript (Node.js)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Checkout the [[rock/extension_header]] page for gpios on the extension header.&lt;br /&gt;
&lt;br /&gt;
Below is programming in different languages to bit flipping the GPIO on RR.&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  FILE *fp = fopen(&amp;quot;/sys/class/gpio/export&amp;quot;, &amp;quot;w&amp;quot;);&lt;br /&gt;
  if( !fp )&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;error open export file&amp;quot;);&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  fprintf(fp, &amp;quot;%d&amp;quot;, 172);&lt;br /&gt;
  fclose(fp);&lt;br /&gt;
&lt;br /&gt;
  fp = fopen(&amp;quot;/sys/class/gpio/gpio175/direction&amp;quot;, &amp;quot;w&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if( !fp )&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;error open export file&amp;quot;);&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  fprintf(fp, &amp;quot;%s&amp;quot;, &amp;quot;out&amp;quot;);&lt;br /&gt;
  fclose(fp);&lt;br /&gt;
&lt;br /&gt;
  fp = fopen(&amp;quot;/sys/class/gpio/gpio175/value&amp;quot;, &amp;quot;w&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if( !fp )&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;error open export file&amp;quot;);&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  fprintf(fp, &amp;quot;%d&amp;quot;, 1);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
Python library.&lt;br /&gt;
    sudo apt-get install gcc  python-dev&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
def initpin(pinnum, mode):&lt;br /&gt;
  '''&lt;br /&gt;
  pinnum: pin number, eg. 172, 175 etc.&lt;br /&gt;
  mode: pin mode, valid values: in or out&lt;br /&gt;
  '''&lt;br /&gt;
  with open('/sys/class/gpio/export', 'w') as f:&lt;br /&gt;
    f.write(str(pinnum))&lt;br /&gt;
&lt;br /&gt;
  with open('/sys/class/gpio/gpio' + str(pinnum) + '/direction', 'w') as f:&lt;br /&gt;
    f.write(str(mode))&lt;br /&gt;
&lt;br /&gt;
def setpin(pinnum, value):&lt;br /&gt;
  &lt;br /&gt;
  with open('/sys/class/gpio/gpio' + str(pinnum) + '/value', 'w') as f:&lt;br /&gt;
    f.write(str(value))&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
  initpin(172, 'out')&lt;br /&gt;
  while True:&lt;br /&gt;
    setpin(172, 0)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    setpin(172, 1)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Shell ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# enable the gpio 172 -&amp;gt; green led&lt;br /&gt;
echo 172 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&lt;br /&gt;
# set the direction to output&lt;br /&gt;
echo &amp;quot;out&amp;quot; &amp;gt; /sys/class/gpio/gpio172/direction&lt;br /&gt;
while true;&lt;br /&gt;
do&lt;br /&gt;
echo 0 &amp;gt; /sys/class/gpio/gpio172/value #led on&lt;br /&gt;
sleep 1&lt;br /&gt;
echo 1 &amp;gt; /sys/class/gpio/gpio172/value #led off&lt;br /&gt;
sleep 1&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==JavaScript (Node.js)==&lt;br /&gt;
    Follow the directions at https://github.com/jdarling/radxa-nodejs-img&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
var fs = require('fs');&lt;br /&gt;
&lt;br /&gt;
// Enable the GPIO 172&lt;br /&gt;
fs.writeFileSync('/sys/class/gpio/export', 172);&lt;br /&gt;
&lt;br /&gt;
// Set it to output&lt;br /&gt;
fs.writeFileSync('/sys/class/gpio/gpio172/direction', 'out');&lt;br /&gt;
&lt;br /&gt;
// Turn on the LED&lt;br /&gt;
fs.writeFileSync('/ssy/class/gpio/gpio172/value', 1);&lt;br /&gt;
&lt;br /&gt;
// Wait 1 second then turn it off&lt;br /&gt;
setTimeout(function(){&lt;br /&gt;
  fs.writeFileSync('/ssy/class/gpio/gpio172/value', 0);&lt;br /&gt;
}, 1000);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
    Or better yet, use https://github.com/jdarling/radxa-rock&lt;br /&gt;
&lt;br /&gt;
==pin numbers ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
#define      NUM_GROUP 32&lt;br /&gt;
#define      PIN_BASE            160&lt;br /&gt;
&lt;br /&gt;
#define	RK30_PIN0_PA0		(0*NUM_GROUP + PIN_BASE + 0)&lt;br /&gt;
#define	RK30_PIN0_PA1		(0*NUM_GROUP + PIN_BASE + 1)&lt;br /&gt;
#define	RK30_PIN0_PA2		(0*NUM_GROUP + PIN_BASE + 2)&lt;br /&gt;
#define	RK30_PIN0_PA3		(0*NUM_GROUP + PIN_BASE + 3)&lt;br /&gt;
#define	RK30_PIN0_PA4		(0*NUM_GROUP + PIN_BASE + 4)&lt;br /&gt;
#define	RK30_PIN0_PA5		(0*NUM_GROUP + PIN_BASE + 5)&lt;br /&gt;
#define	RK30_PIN0_PA6		(0*NUM_GROUP + PIN_BASE + 6)&lt;br /&gt;
#define	RK30_PIN0_PA7		(0*NUM_GROUP + PIN_BASE + 7)&lt;br /&gt;
#define	RK30_PIN0_PB0		(0*NUM_GROUP + PIN_BASE + 8)&lt;br /&gt;
#define	RK30_PIN0_PB1		(0*NUM_GROUP + PIN_BASE + 9)&lt;br /&gt;
#define	RK30_PIN0_PB2		(0*NUM_GROUP + PIN_BASE + 10)&lt;br /&gt;
#define	RK30_PIN0_PB3		(0*NUM_GROUP + PIN_BASE + 11)&lt;br /&gt;
#define	RK30_PIN0_PB4		(0*NUM_GROUP + PIN_BASE + 12)&lt;br /&gt;
#define	RK30_PIN0_PB5		(0*NUM_GROUP + PIN_BASE + 13)&lt;br /&gt;
#define	RK30_PIN0_PB6		(0*NUM_GROUP + PIN_BASE + 14)&lt;br /&gt;
#define	RK30_PIN0_PB7		(0*NUM_GROUP + PIN_BASE + 15)&lt;br /&gt;
#define	RK30_PIN0_PC0		(0*NUM_GROUP + PIN_BASE + 16)&lt;br /&gt;
#define	RK30_PIN0_PC1		(0*NUM_GROUP + PIN_BASE + 17)&lt;br /&gt;
#define	RK30_PIN0_PC2		(0*NUM_GROUP + PIN_BASE + 18)&lt;br /&gt;
#define	RK30_PIN0_PC3		(0*NUM_GROUP + PIN_BASE + 19)&lt;br /&gt;
#define	RK30_PIN0_PC4		(0*NUM_GROUP + PIN_BASE + 20)&lt;br /&gt;
#define	RK30_PIN0_PC5		(0*NUM_GROUP + PIN_BASE + 21)&lt;br /&gt;
#define	RK30_PIN0_PC6		(0*NUM_GROUP + PIN_BASE + 22)&lt;br /&gt;
#define	RK30_PIN0_PC7		(0*NUM_GROUP + PIN_BASE + 23)&lt;br /&gt;
#define	RK30_PIN0_PD0		(0*NUM_GROUP + PIN_BASE + 24)&lt;br /&gt;
#define	RK30_PIN0_PD1		(0*NUM_GROUP + PIN_BASE + 25)&lt;br /&gt;
#define	RK30_PIN0_PD2		(0*NUM_GROUP + PIN_BASE + 26)&lt;br /&gt;
#define	RK30_PIN0_PD3		(0*NUM_GROUP + PIN_BASE + 27)&lt;br /&gt;
#define	RK30_PIN0_PD4		(0*NUM_GROUP + PIN_BASE + 28)&lt;br /&gt;
#define	RK30_PIN0_PD5		(0*NUM_GROUP + PIN_BASE + 29)&lt;br /&gt;
#define	RK30_PIN0_PD6		(0*NUM_GROUP + PIN_BASE + 30)&lt;br /&gt;
#define	RK30_PIN0_PD7		(0*NUM_GROUP + PIN_BASE + 31)&lt;br /&gt;
&lt;br /&gt;
#define	RK30_PIN1_PA0		(1*NUM_GROUP + PIN_BASE + 0) &lt;br /&gt;
#define	RK30_PIN1_PA1		(1*NUM_GROUP + PIN_BASE + 1) &lt;br /&gt;
#define	RK30_PIN1_PA2		(1*NUM_GROUP + PIN_BASE + 2) &lt;br /&gt;
#define	RK30_PIN1_PA3		(1*NUM_GROUP + PIN_BASE + 3) &lt;br /&gt;
#define	RK30_PIN1_PA4		(1*NUM_GROUP + PIN_BASE + 4) &lt;br /&gt;
#define	RK30_PIN1_PA5		(1*NUM_GROUP + PIN_BASE + 5) &lt;br /&gt;
#define	RK30_PIN1_PA6		(1*NUM_GROUP + PIN_BASE + 6) &lt;br /&gt;
#define	RK30_PIN1_PA7		(1*NUM_GROUP + PIN_BASE + 7) &lt;br /&gt;
#define	RK30_PIN1_PB0		(1*NUM_GROUP + PIN_BASE + 8) &lt;br /&gt;
#define	RK30_PIN1_PB1		(1*NUM_GROUP + PIN_BASE + 9) &lt;br /&gt;
#define	RK30_PIN1_PB2		(1*NUM_GROUP + PIN_BASE + 10)&lt;br /&gt;
#define	RK30_PIN1_PB3		(1*NUM_GROUP + PIN_BASE + 11)&lt;br /&gt;
#define	RK30_PIN1_PB4		(1*NUM_GROUP + PIN_BASE + 12)&lt;br /&gt;
#define	RK30_PIN1_PB5		(1*NUM_GROUP + PIN_BASE + 13)&lt;br /&gt;
#define	RK30_PIN1_PB6		(1*NUM_GROUP + PIN_BASE + 14)&lt;br /&gt;
#define	RK30_PIN1_PB7		(1*NUM_GROUP + PIN_BASE + 15)&lt;br /&gt;
#define	RK30_PIN1_PC0		(1*NUM_GROUP + PIN_BASE + 16)&lt;br /&gt;
#define	RK30_PIN1_PC1		(1*NUM_GROUP + PIN_BASE + 17)&lt;br /&gt;
#define	RK30_PIN1_PC2		(1*NUM_GROUP + PIN_BASE + 18)&lt;br /&gt;
#define	RK30_PIN1_PC3		(1*NUM_GROUP + PIN_BASE + 19)&lt;br /&gt;
#define	RK30_PIN1_PC4		(1*NUM_GROUP + PIN_BASE + 20)&lt;br /&gt;
#define	RK30_PIN1_PC5		(1*NUM_GROUP + PIN_BASE + 21)&lt;br /&gt;
#define	RK30_PIN1_PC6		(1*NUM_GROUP + PIN_BASE + 22)&lt;br /&gt;
#define	RK30_PIN1_PC7		(1*NUM_GROUP + PIN_BASE + 23)&lt;br /&gt;
#define	RK30_PIN1_PD0		(1*NUM_GROUP + PIN_BASE + 24)&lt;br /&gt;
#define	RK30_PIN1_PD1		(1*NUM_GROUP + PIN_BASE + 25)&lt;br /&gt;
#define	RK30_PIN1_PD2		(1*NUM_GROUP + PIN_BASE + 26)&lt;br /&gt;
#define	RK30_PIN1_PD3		(1*NUM_GROUP + PIN_BASE + 27)&lt;br /&gt;
#define	RK30_PIN1_PD4		(1*NUM_GROUP + PIN_BASE + 28)&lt;br /&gt;
#define	RK30_PIN1_PD5		(1*NUM_GROUP + PIN_BASE + 29)&lt;br /&gt;
#define	RK30_PIN1_PD6		(1*NUM_GROUP + PIN_BASE + 30)&lt;br /&gt;
#define	RK30_PIN1_PD7		(1*NUM_GROUP + PIN_BASE + 31)&lt;br /&gt;
&lt;br /&gt;
#define	RK30_PIN2_PA0		(2*NUM_GROUP + PIN_BASE + 0)&lt;br /&gt;
#define	RK30_PIN2_PA1		(2*NUM_GROUP + PIN_BASE + 1)&lt;br /&gt;
#define	RK30_PIN2_PA2		(2*NUM_GROUP + PIN_BASE + 2)&lt;br /&gt;
#define	RK30_PIN2_PA3		(2*NUM_GROUP + PIN_BASE + 3)&lt;br /&gt;
#define	RK30_PIN2_PA4		(2*NUM_GROUP + PIN_BASE + 4)&lt;br /&gt;
#define	RK30_PIN2_PA5		(2*NUM_GROUP + PIN_BASE + 5)&lt;br /&gt;
#define	RK30_PIN2_PA6		(2*NUM_GROUP + PIN_BASE + 6)&lt;br /&gt;
#define	RK30_PIN2_PA7		(2*NUM_GROUP + PIN_BASE + 7)&lt;br /&gt;
#define	RK30_PIN2_PB0		(2*NUM_GROUP + PIN_BASE + 8)&lt;br /&gt;
#define	RK30_PIN2_PB1		(2*NUM_GROUP + PIN_BASE + 9)&lt;br /&gt;
#define	RK30_PIN2_PB2		(2*NUM_GROUP + PIN_BASE + 10)&lt;br /&gt;
#define	RK30_PIN2_PB3		(2*NUM_GROUP + PIN_BASE + 11)&lt;br /&gt;
#define	RK30_PIN2_PB4		(2*NUM_GROUP + PIN_BASE + 12)&lt;br /&gt;
#define	RK30_PIN2_PB5		(2*NUM_GROUP + PIN_BASE + 13)&lt;br /&gt;
#define	RK30_PIN2_PB6		(2*NUM_GROUP + PIN_BASE + 14)&lt;br /&gt;
#define	RK30_PIN2_PB7		(2*NUM_GROUP + PIN_BASE + 15)&lt;br /&gt;
#define	RK30_PIN2_PC0		(2*NUM_GROUP + PIN_BASE + 16)&lt;br /&gt;
#define	RK30_PIN2_PC1		(2*NUM_GROUP + PIN_BASE + 17)&lt;br /&gt;
#define	RK30_PIN2_PC2		(2*NUM_GROUP + PIN_BASE + 18)&lt;br /&gt;
#define	RK30_PIN2_PC3		(2*NUM_GROUP + PIN_BASE + 19)&lt;br /&gt;
#define	RK30_PIN2_PC4		(2*NUM_GROUP + PIN_BASE + 20)&lt;br /&gt;
#define	RK30_PIN2_PC5		(2*NUM_GROUP + PIN_BASE + 21)&lt;br /&gt;
#define	RK30_PIN2_PC6		(2*NUM_GROUP + PIN_BASE + 22)&lt;br /&gt;
#define	RK30_PIN2_PC7		(2*NUM_GROUP + PIN_BASE + 23)&lt;br /&gt;
#define	RK30_PIN2_PD0		(2*NUM_GROUP + PIN_BASE + 24)&lt;br /&gt;
#define	RK30_PIN2_PD1		(2*NUM_GROUP + PIN_BASE + 25)&lt;br /&gt;
#define	RK30_PIN2_PD2		(2*NUM_GROUP + PIN_BASE + 26)&lt;br /&gt;
#define	RK30_PIN2_PD3		(2*NUM_GROUP + PIN_BASE + 27)&lt;br /&gt;
#define	RK30_PIN2_PD4		(2*NUM_GROUP + PIN_BASE + 28)&lt;br /&gt;
#define	RK30_PIN2_PD5		(2*NUM_GROUP + PIN_BASE + 29)&lt;br /&gt;
#define	RK30_PIN2_PD6		(2*NUM_GROUP + PIN_BASE + 30)&lt;br /&gt;
#define	RK30_PIN2_PD7		(2*NUM_GROUP + PIN_BASE + 31)&lt;br /&gt;
&lt;br /&gt;
#define	RK30_PIN3_PA0		(3*NUM_GROUP + PIN_BASE + 0) &lt;br /&gt;
#define	RK30_PIN3_PA1		(3*NUM_GROUP + PIN_BASE + 1) &lt;br /&gt;
#define	RK30_PIN3_PA2		(3*NUM_GROUP + PIN_BASE + 2) &lt;br /&gt;
#define	RK30_PIN3_PA3		(3*NUM_GROUP + PIN_BASE + 3) &lt;br /&gt;
#define	RK30_PIN3_PA4		(3*NUM_GROUP + PIN_BASE + 4) &lt;br /&gt;
#define	RK30_PIN3_PA5		(3*NUM_GROUP + PIN_BASE + 5) &lt;br /&gt;
#define	RK30_PIN3_PA6		(3*NUM_GROUP + PIN_BASE + 6) &lt;br /&gt;
#define	RK30_PIN3_PA7		(3*NUM_GROUP + PIN_BASE + 7) &lt;br /&gt;
#define	RK30_PIN3_PB0		(3*NUM_GROUP + PIN_BASE + 8) &lt;br /&gt;
#define	RK30_PIN3_PB1		(3*NUM_GROUP + PIN_BASE + 9) &lt;br /&gt;
#define	RK30_PIN3_PB2		(3*NUM_GROUP + PIN_BASE + 10)&lt;br /&gt;
#define	RK30_PIN3_PB3		(3*NUM_GROUP + PIN_BASE + 11)&lt;br /&gt;
#define	RK30_PIN3_PB4		(3*NUM_GROUP + PIN_BASE + 12)&lt;br /&gt;
#define	RK30_PIN3_PB5		(3*NUM_GROUP + PIN_BASE + 13)&lt;br /&gt;
#define	RK30_PIN3_PB6		(3*NUM_GROUP + PIN_BASE + 14)&lt;br /&gt;
#define	RK30_PIN3_PB7		(3*NUM_GROUP + PIN_BASE + 15)&lt;br /&gt;
#define	RK30_PIN3_PC0		(3*NUM_GROUP + PIN_BASE + 16)&lt;br /&gt;
#define	RK30_PIN3_PC1		(3*NUM_GROUP + PIN_BASE + 17)&lt;br /&gt;
#define	RK30_PIN3_PC2		(3*NUM_GROUP + PIN_BASE + 18)&lt;br /&gt;
#define	RK30_PIN3_PC3		(3*NUM_GROUP + PIN_BASE + 19)&lt;br /&gt;
#define	RK30_PIN3_PC4		(3*NUM_GROUP + PIN_BASE + 20)&lt;br /&gt;
#define	RK30_PIN3_PC5		(3*NUM_GROUP + PIN_BASE + 21)&lt;br /&gt;
#define	RK30_PIN3_PC6		(3*NUM_GROUP + PIN_BASE + 22)&lt;br /&gt;
#define	RK30_PIN3_PC7		(3*NUM_GROUP + PIN_BASE + 23)&lt;br /&gt;
#define	RK30_PIN3_PD0		(3*NUM_GROUP + PIN_BASE + 24)&lt;br /&gt;
#define	RK30_PIN3_PD1		(3*NUM_GROUP + PIN_BASE + 25)&lt;br /&gt;
#define	RK30_PIN3_PD2		(3*NUM_GROUP + PIN_BASE + 26)&lt;br /&gt;
#define	RK30_PIN3_PD3		(3*NUM_GROUP + PIN_BASE + 27)&lt;br /&gt;
#define	RK30_PIN3_PD4		(3*NUM_GROUP + PIN_BASE + 28)&lt;br /&gt;
#define	RK30_PIN3_PD5		(3*NUM_GROUP + PIN_BASE + 29)&lt;br /&gt;
#define	RK30_PIN3_PD6		(3*NUM_GROUP + PIN_BASE + 30)&lt;br /&gt;
#define	RK30_PIN3_PD7		(3*NUM_GROUP + PIN_BASE + 31)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jdarling</name></author>	</entry>

	</feed>