<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.mediawiki.compulab.com/w/index.php?action=history&amp;feed=atom&amp;title=IOT-LINK%3A_Linux%3A_How-To_Guide</id>
	<title>IOT-LINK: Linux: How-To Guide - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.mediawiki.compulab.com/w/index.php?action=history&amp;feed=atom&amp;title=IOT-LINK%3A_Linux%3A_How-To_Guide"/>
	<link rel="alternate" type="text/html" href="https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;action=history"/>
	<updated>2026-04-30T10:30:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;diff=5748&amp;oldid=prev</id>
		<title>Igor at 13:30, 16 February 2026</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;diff=5748&amp;oldid=prev"/>
		<updated>2026-02-16T13:30:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;amp;diff=5748&amp;amp;oldid=5712&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Igor</name></author>
		
	</entry>
	<entry>
		<id>https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;diff=5712&amp;oldid=prev</id>
		<title>Igor: /* Digital I/O */</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;diff=5712&amp;oldid=prev"/>
		<updated>2026-01-21T15:03:43Z</updated>

		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Digital I/O&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 15:03, 21 January 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l376&quot; &gt;Line 376:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 376:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Note| External voltage supply in the range 6-24VDC must be supplied via DIO_VIN pin for correct operation of digital outputs.}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Note| External voltage supply in the range 6-24VDC must be supplied via DIO_VIN pin for correct operation of digital outputs.}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Access ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Access ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;set command by OS:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*Debian:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; DIOSET=&amp;quot;sudo gpioset 0&amp;quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; DIOGET=&amp;quot;sudo gpioget 0&amp;quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*Yocto:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; DIOSET=&amp;quot;sudo gpioset -c 0 --toggle 0&amp;quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; DIOGET=&amp;quot;sudo gpioget -c 0&amp;quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left;&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left;&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;center&amp;quot; | '''pin # on terminal block''' &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;center&amp;quot; | '''pin # on terminal block''' &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;center&amp;quot; | '''&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Command to drive &lt;/del&gt;pin high'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;center&amp;quot; | '''&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Drive &lt;/ins&gt;pin high'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;center&amp;quot; | '''&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Command to read &lt;/del&gt;pin'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;center&amp;quot; | '''&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Read &lt;/ins&gt;pin'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;center&amp;quot; |2&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;center&amp;quot; |2&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;sudo gpioset 0 &lt;/del&gt;4=1&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;$DIOSET &lt;/ins&gt;4=1&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;sudo gpioget &lt;/del&gt;0 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;4 &amp;gt; /dev/null&lt;/del&gt;; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;sudo gpioget 0 &lt;/del&gt;16&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;$DIOSET 4=&lt;/ins&gt;0; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;$DIOGET &lt;/ins&gt;16&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;center&amp;quot; |3&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;center&amp;quot; |3&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;sudo gpioset 0 &lt;/del&gt;5=1&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;$DIOSET &lt;/ins&gt;5=1&amp;lt;/code&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;sudo gpioget &lt;/del&gt;0 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;5 &amp;gt; /dev/null&lt;/del&gt;; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;sudo gpioget 0 &lt;/del&gt;17&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;$DIOSET 5=&lt;/ins&gt;0; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;$DIOGET &lt;/ins&gt;17&amp;lt;/code&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|- &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;center&amp;quot; |4&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;center&amp;quot; |4 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;sudo gpioset 0 &lt;/del&gt;12=1&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;$DIOSET &lt;/ins&gt;12=1&amp;lt;/code&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;sudo gpioget &lt;/del&gt;0 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;12 &amp;gt; /dev/null&lt;/del&gt;; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;sudo gpioget 0 &lt;/del&gt;21&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;$DIOSET 12=&lt;/ins&gt;0; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;$DIOGET &lt;/ins&gt;21&amp;lt;/code&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Igor</name></author>
		
	</entry>
	<entry>
		<id>https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;diff=5670&amp;oldid=prev</id>
		<title>Igor: /* Cellular Modem */</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;diff=5670&amp;oldid=prev"/>
		<updated>2025-09-21T13:52:07Z</updated>

		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Cellular Modem&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 13:52, 21 September 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l122&quot; &gt;Line 122:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 122:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*To set up IOT-LINK for cellular functionality,&amp;#160; install an active SIM card into SIM socket located behind the back panel. Please refer to [https://www.compulab.com/products/iot-gateways/iot-link-industrial-iot-gateway/#devres IOT-LINK reference guide] for details.&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*To set up IOT-LINK for cellular functionality,&amp;#160; install an active SIM card into SIM socket located behind the back panel. Please refer to [https://www.compulab.com/products/iot-gateways/iot-link-industrial-iot-gateway/#devres IOT-LINK reference guide] for details.&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*Cellular antenna should be connected to SMA connector '''A''' on the front panel.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*Cellular antenna should be connected to SMA connector '''A''' on the front panel.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Cellular Configuration ==&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Set private ip:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; echo &amp;quot;AT+USBNETIP=0&amp;quot; | socat - /dev/ttyACM2,crnl&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Set public ip (from the ISP):&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; echo &amp;quot;AT+USBNETIP=1&amp;quot; | socat - /dev/ttyACM2,crnl&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Cellular Connection ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Cellular Connection ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;1&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;. &lt;/del&gt;Configure APN &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;(&lt;/del&gt;replace with your provider’s APN&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;):&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=== SIMCOM SIM7672: LTE cat &lt;/ins&gt;1 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;bis ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;echo '&lt;/del&gt;AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;APN&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;-NAME&lt;/del&gt;&amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;' | socat - /dev/ttyACM2,crnl&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Configure APN&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; minicom -D /dev/ttyACM2&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;2. &lt;/del&gt;Request an IP:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;replace &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;APN &lt;/ins&gt;with your provider’s &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;actual &lt;/ins&gt;APN&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;APN&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Request an IP:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; sudo dhclient wwan0&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; sudo dhclient wwan0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;If DNS resolution fails, ensure `/etc/resolv.conf` contains valid nameservers:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;3. Verify connectivity:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt; sudo ping -c 5 dns.google -I wwan0&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;4. &lt;/del&gt;If DNS resolution fails, ensure `/etc/resolv.conf` contains valid nameservers:&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; nameserver 8.8.8.8&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; nameserver 8.8.8.8&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; nameserver 8.8.4.4&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; nameserver 8.8.4.4&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Telit LE910C4: LTE CAT4 ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;replace APN with your provider’s actual APN&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; nmcli connection add type gsm ifname '*' con-name CellularCon apn APN&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Verify connectivity ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; sudo ping -c 5 dns.google -I wwan0&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Modem Reset ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Modem Reset ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The modem module can be forced into hardware reset with the command:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The modem module can be forced into hardware reset with the command:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*Debian:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; sudo gpioset 0 22=1 ; sleep 0.3 ; sudo gpioset 0 22=0&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; sudo gpioset 0 22=1 ; sleep 0.3 ; sudo gpioset 0 22=0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*Poky:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; gpioset -c 0 --toggle 0 22=1; sleep 0.3 ; gpioset -c 0 --toggle 0 22=0&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;After reset, before configuring, allow about a minute for modem to initialize&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= WiFi=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= WiFi=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Igor</name></author>
		
	</entry>
	<entry>
		<id>https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;diff=5661&amp;oldid=prev</id>
		<title>Igor: Igor moved page IOT-LINK: Debian Linux: How-To Guide to IOT-LINK: Linux: How-To Guide</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;diff=5661&amp;oldid=prev"/>
		<updated>2025-09-04T12:25:28Z</updated>

		<summary type="html">&lt;p&gt;Igor moved page &lt;a href=&quot;/w/index.php?title=IOT-LINK:_Debian_Linux:_How-To_Guide&quot; class=&quot;mw-redirect&quot; title=&quot;IOT-LINK: Debian Linux: How-To Guide&quot;&gt;IOT-LINK: Debian Linux: How-To Guide&lt;/a&gt; to &lt;a href=&quot;/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&quot; title=&quot;IOT-LINK: Linux: How-To Guide&quot;&gt;IOT-LINK: Linux: How-To Guide&lt;/a&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 12:25, 4 September 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Igor</name></author>
		
	</entry>
	<entry>
		<id>https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;diff=5649&amp;oldid=prev</id>
		<title>Igor: /* Cellular Modem */</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;diff=5649&amp;oldid=prev"/>
		<updated>2025-08-21T12:35:07Z</updated>

		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Cellular Modem&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 12:35, 21 August 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l122&quot; &gt;Line 122:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 122:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*To set up IOT-LINK for cellular functionality,&amp;#160; install an active SIM card into SIM socket located behind the back panel. Please refer to [https://www.compulab.com/products/iot-gateways/iot-link-industrial-iot-gateway/#devres IOT-LINK reference guide] for details.&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*To set up IOT-LINK for cellular functionality,&amp;#160; install an active SIM card into SIM socket located behind the back panel. Please refer to [https://www.compulab.com/products/iot-gateways/iot-link-industrial-iot-gateway/#devres IOT-LINK reference guide] for details.&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*Cellular antenna should be connected to SMA connector '''A''' on the front panel.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*Cellular antenna should be connected to SMA connector '''A''' on the front panel.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Cellular Configuration ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Set private ip:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; echo &amp;quot;AT+USBNETIP=0&amp;quot; | socat - /dev/ttyACM2,crnl&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Set public ip (from the ISP):&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; echo &amp;quot;AT+USBNETIP=1&amp;quot; | socat - /dev/ttyACM2,crnl&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Cellular Connection ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Cellular Connection ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Get &lt;/del&gt;IP:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1. Configure APN (replace with your provider’s APN):&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; echo 'AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;APN-NAME&amp;quot;' | socat - /dev/ttyACM2,crnl&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;2. Request an &lt;/ins&gt;IP:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; sudo dhclient wwan0&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; sudo dhclient wwan0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Test the interface&lt;/del&gt;:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;3. Verify connectivity&lt;/ins&gt;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; sudo ping -c 5 dns.google -I wwan0&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; sudo ping -c 5 dns.google -I wwan0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;4. If DNS resolution fails, ensure `/etc/resolv.conf` contains valid nameservers:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; nameserver 8.8.8.8&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; nameserver 8.8.4.4&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Modem Reset ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Modem Reset ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The modem module can be forced into hardware reset with the command:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The modem module can be forced into hardware reset with the command:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Igor</name></author>
		
	</entry>
	<entry>
		<id>https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;diff=5629&amp;oldid=prev</id>
		<title>Igor: Created page with &quot;= Overview = The default run-time Linux filesystem image for the CompuLab IOT-LINK Internet of Things Gateway is based on Debian GNU/Linux BookWorm. The default Debian Linux i...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.compulab.com/w/index.php?title=IOT-LINK:_Linux:_How-To_Guide&amp;diff=5629&amp;oldid=prev"/>
		<updated>2025-06-10T11:44:34Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= Overview = The default run-time Linux filesystem image for the CompuLab IOT-LINK Internet of Things Gateway is based on Debian GNU/Linux BookWorm. The default Debian Linux i...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Overview =&lt;br /&gt;
The default run-time Linux filesystem image for the CompuLab IOT-LINK Internet of Things Gateway is based on Debian GNU/Linux BookWorm.&lt;br /&gt;
The default Debian Linux image includes the following packages:&lt;br /&gt;
&lt;br /&gt;
* Core system&lt;br /&gt;
* Debian package management system&lt;br /&gt;
* SSH server and client&lt;br /&gt;
* NetworkManager&lt;br /&gt;
* ModemManager&lt;br /&gt;
* Bluez5 Bluetooth tools and daemons&lt;br /&gt;
* Docker&lt;br /&gt;
&lt;br /&gt;
= Serial Console =&lt;br /&gt;
IOT-LINK  provides a serial console on the front panel micro-USB '''DBG''' connector.&amp;lt;/br&amp;gt;&lt;br /&gt;
== Connecting to a host PC ==&lt;br /&gt;
# Use a micro-USB cable to connect the Console connector to a USB port on your host PC.&lt;br /&gt;
# Make sure the CP2104 driver is available with your operating system, otherwise install it from https://www.silabs.com/documents/public/software/CP210x_Windows_Drivers_with_Serial_Enumeration.zip&lt;br /&gt;
# Identify the host PC interface and port number that will be used for communication with the device:&lt;br /&gt;
#* In most Linux PCs, the serial port will be denoted as one of the following: /dev/ttyUSB0, /dev/ttyUSB1 ... /dev/ttyUSBn (where n is a positive integer)&lt;br /&gt;
#* In Windows PCs, the serial port usually will be denoted as one of the following: COM1, COM2 ... COMn (where n is a positive integer)&lt;br /&gt;
# Start a terminal emulation program (such as [https://www.putty.org/ PuTTY] on Windows or minicom on Linux).&lt;br /&gt;
# In the port configuration section of the program select the previous identified port and set the following serial port parameters:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
{{:SB-SOM: serial port parameters table}}&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Connection and Login =&lt;br /&gt;
This Debian rootfs comes with a default sudo user ''compulab''.&lt;br /&gt;
User password has to be set at the very first login.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Compulab Release iot-link 1.0 25.05 based on&lt;br /&gt;
Debian GNU/Linux 12 iot-link ttyLP0&lt;br /&gt;
&lt;br /&gt;
iot-link login: compulab&lt;br /&gt;
You are required to change your password immediately (administrator enforced).&lt;br /&gt;
New password: &lt;br /&gt;
Retype new password: &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To login into the Linux system, use a terminal emulator as described [[IOT-LINK: Debian Linux: How-To Guide#Serial Console|here]], or connect through the network (ssh).&lt;br /&gt;
&lt;br /&gt;
= Package Management =&lt;br /&gt;
The IOT-LINK Debian Linux image includes everything required to use the Debian package management utilities.&amp;lt;br&amp;gt;&lt;br /&gt;
Use [http://linux.die.net/man/8/apt apt] and [https://linux.die.net/man/1/dpkg dpkg] for managing software packages.&lt;br /&gt;
&lt;br /&gt;
= Device Serial Number and Configuration =&lt;br /&gt;
Product information is stored in on-board EEPROM.&amp;lt;br&amp;gt;&lt;br /&gt;
* To read the product serial number, issue the following command:&lt;br /&gt;
 cat /proc/device-tree/baseboard-sn&lt;br /&gt;
&lt;br /&gt;
'''Note''' &amp;quot;-&amp;quot; sign which appears on the label is intentionally replaced by &amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* To read the product configuration part number, issue the following command:&lt;br /&gt;
 cat /proc/device-tree/baseboard-options&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
= Device Tree =&lt;br /&gt;
== Available Device Tree Files ==&lt;br /&gt;
IOT-LINK Debian package includes the following dtb files:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''''&amp;lt;fdt_file_name&amp;gt;'''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Remarks'''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;&amp;quot; |''iotdin-imx8p.dtb''&lt;br /&gt;
| align=&amp;quot;&amp;quot; |default hardware configuration&lt;br /&gt;
| align=&amp;quot;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Set a device tree ==&lt;br /&gt;
IOT-LINK Debian provides two methods to switch between dtb files:&lt;br /&gt;
* U-Boot environment&lt;br /&gt;
The U-boot '''fdtfile''' variable contains the device tree name that will be loaded into the RAM.&lt;br /&gt;
This variable can be changed by:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;&amp;quot; | '''Environment''' &lt;br /&gt;
| align=&amp;quot;&amp;quot; | '''Command''' &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;&amp;quot; |U-Boot&lt;br /&gt;
| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;setenv fdtfile &amp;lt;fdt_file_name&amp;gt;; saveenv;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;&amp;quot; |Linux&lt;br /&gt;
| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;fw_setenv fdtfile &amp;lt;fdt_file_name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
* GRUB environment&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;&amp;quot; | '''Environment''' &lt;br /&gt;
| align=&amp;quot;&amp;quot; | '''Command/Procedure''' &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;&amp;quot; |GRUB Boot Menu&lt;br /&gt;
| align=&amp;quot;&amp;quot; |Goto &amp;quot;Advanced Boot Options&amp;quot; and choose a device tree from the provided dtb list.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;&amp;quot; |Linux&lt;br /&gt;
| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;grub-editenv /boot/EFI/BOOT/grubenv set fdt_file=&amp;lt;fdt_file_name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Docker =&lt;br /&gt;
The [https://docs.docker.com/engine/ Docker Engine] is preinstalled.&lt;br /&gt;
* The following command downloads a test image and runs it in a container. The container sample prints a message and exits.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo docker run -it ubuntu&lt;br /&gt;
latest: Pulling from library/ubuntu&lt;br /&gt;
aa21f24e1940: Pull complete&lt;br /&gt;
...&lt;br /&gt;
Digest: sha256:e3f92abc0967a6c19d0dfa2d55838833e947b9d74edbcb0113e48535ad4be12a&lt;br /&gt;
Status: Downloaded newer image for ubuntu:latest&lt;br /&gt;
root@0d6b133a7a93:/# cat /etc/issue&lt;br /&gt;
Ubuntu 24.04 LTS \n \l&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Cellular Modem =&lt;br /&gt;
IOT-LINK cellular interface is implemented with a mini-PCIe cellular modem and a micro-SIM socket.&lt;br /&gt;
*Cellular module is an option that can be pre-installed into the gateway. Verify your gateway is assembled with the modem module&lt;br /&gt;
*To set up IOT-LINK for cellular functionality,  install an active SIM card into SIM socket located behind the back panel. Please refer to [https://www.compulab.com/products/iot-gateways/iot-link-industrial-iot-gateway/#devres IOT-LINK reference guide] for details.&amp;lt;br&amp;gt;&lt;br /&gt;
*Cellular antenna should be connected to SMA connector '''A''' on the front panel.&lt;br /&gt;
== Cellular Connection ==&lt;br /&gt;
Get IP:&lt;br /&gt;
 sudo dhclient wwan0&lt;br /&gt;
Test the interface:&lt;br /&gt;
 sudo ping -c 5 dns.google -I wwan0&lt;br /&gt;
== Modem Reset ==&lt;br /&gt;
The modem module can be forced into hardware reset with the command:&lt;br /&gt;
 sudo gpioset 0 22=1 ; sleep 0.3 ; sudo gpioset 0 22=0&lt;br /&gt;
&lt;br /&gt;
= WiFi=&lt;br /&gt;
IOT-LINK optionally includes module with 802.11ax WiFi (6) and Bluetooth 5.3 BLE.&amp;lt;/br&amp;gt;&lt;br /&gt;
The [https://manpages.debian.org/stretch/network-manager/nmcli.1.en.html NetworkManager] can be used to manage WiFi interface.&lt;br /&gt;
== Enable/Disable WiFi Interface ==&lt;br /&gt;
* To enable WiFi interface:&lt;br /&gt;
 sudo nmcli radio wifi on&lt;br /&gt;
* To disable WiFi interface:&lt;br /&gt;
 sudo nmcli radio wifi off&lt;br /&gt;
== Network Scanning ==&lt;br /&gt;
* Sample WiFi scanning:&lt;br /&gt;
 sudo nmcli dev wifi list ifname wlan0&lt;br /&gt;
The output will show the list of Access Points and Ad-Hoc cells in range.&lt;br /&gt;
== Connecting to Wireless Network ==&lt;br /&gt;
In the following example:&lt;br /&gt;
* Replace &amp;lt;SSID&amp;gt; and &amp;lt;PASSWORD&amp;gt; with the actual access point parameters:&lt;br /&gt;
 sudo nmcli device wifi connect &amp;lt;SSID&amp;gt; password &amp;lt;PASSWORD&amp;gt; name WifiCon ifname wlan0&lt;br /&gt;
* Disconnect wireless network:&lt;br /&gt;
 sudo nmcli connection down WifiCon&lt;br /&gt;
* Connect wireless network again:&lt;br /&gt;
 sudo nmcli connection up WifiCon&lt;br /&gt;
== Creating Access Point ==&lt;br /&gt;
{{Note|Debian 12&amp;lt;br&amp;gt;ipv4 forwarding must be turned on manually}}&lt;br /&gt;
* Enable port forwarding to ethernet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
internet_gateway=eth0&lt;br /&gt;
sudo iptables -t nat -A POSTROUTING -o $internet_gateway -j MASQUERADE&lt;br /&gt;
systemctl stop dnsmasq.service&lt;br /&gt;
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
sudo iptables -A FORWARD -i uap0 -o $internet_gateway -j ACCEPT&lt;br /&gt;
sudo iptables-save &amp;gt; /etc/iptables/iptables.rules&lt;br /&gt;
sudo sed -i 's/^#\(net.ipv[4,6].*forward\)/\1/' /etc/sysctl.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the following example:&lt;br /&gt;
* Replace &amp;lt;SSID&amp;gt; and &amp;lt;PASSWORD&amp;gt; with desired access point parameters:&lt;br /&gt;
 sudo nmcli device wifi hotspot ssid &amp;lt;SSID&amp;gt; password &amp;lt;PASSWORD&amp;gt; con-name HotspotCon ifname uap0&lt;br /&gt;
&lt;br /&gt;
* Disable wireless AP:&lt;br /&gt;
 nmcli connection down HotspotCon&lt;br /&gt;
* Enable wireless AP again:&lt;br /&gt;
 nmcli connection up HotspotCon&lt;br /&gt;
&lt;br /&gt;
=Ethernet=&lt;br /&gt;
*IOT-LINK optionally features one Gigabit Ethernet port implemented with RTL8211FDI PHY&lt;br /&gt;
*One can manage an ethernet interface via [https://manpages.debian.org/stretch/network-manager/nmcli.1.en.html NetworkManager] or `ip`:&lt;br /&gt;
 ip help&lt;br /&gt;
&lt;br /&gt;
===Bandwidth test example===&lt;br /&gt;
Start iperf3 server on host:&lt;br /&gt;
 iperf3 -s -i 60&lt;br /&gt;
&lt;br /&gt;
Straight (client sends, server receives) 1 min. test with report each 10 sec.&lt;br /&gt;
 iperf3 -t 60 -i 10 -c &amp;lt;serverIP&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reverse (server sends, client receives) test &lt;br /&gt;
 iperf3 -t 60 -i 10 -R -c &amp;lt;serverIP&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Industrial Interfaces =&lt;br /&gt;
IOT-LINK optionally has the following interfaces on the 10-pin industrial terminal block:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* up to two RS485 (half-duplex)&lt;br /&gt;
* up to two CAN 2.0B&lt;br /&gt;
* three digital inputs/outputs.&lt;br /&gt;
&lt;br /&gt;
For additional details, please refer to [https://www.compulab.com/products/iot-gateways/iot-LINK-industrial-iot-gateway/#devres IOT-LINK reference guide].&lt;br /&gt;
&lt;br /&gt;
== CAN bus ==&lt;br /&gt;
IOT-LINK features up-to two optional CAN-FD ports implemented with i.MX93 CAN controller.&lt;br /&gt;
{{Note|CAN bus ports are only present in gateways ordered with the “FACAN” or “FBCAN” ordering options. CAN ports are mutually exclusive with RS485 ports.}}&lt;br /&gt;
CAN signals are routed to industrial I/O connector. Please refer to [https://www.compulab.com/products/iot-gateways/iot-LINK-industrial-iot-gateway/#devres IOT-LINK reference guide] for Industrial I/O Connector pin-out. &amp;lt;br&amp;gt;&lt;br /&gt;
Use an interface depending on the [https://www.compulab.com/products/iot-gateways/iot-LINK-industrial-iot-gateway/#ordering Configuration Options] of your unit:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''config option'''&lt;br /&gt;
| '''Linux network interface'''&lt;br /&gt;
|-&lt;br /&gt;
|FACAN&lt;br /&gt;
|can0&lt;br /&gt;
|-&lt;br /&gt;
|FBCAN&lt;br /&gt;
|can1&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== Example for '''can0''' ===&lt;br /&gt;
==== interface configuration ====&lt;br /&gt;
* Enable the CAN interface with bit-rate 1 Mb/sec:&lt;br /&gt;
 sudo ip link set can0 up type can bitrate 1000000&lt;br /&gt;
&lt;br /&gt;
==== Send/Receive packets ====&lt;br /&gt;
Use ''cansend'' and ''candump'' utilities to send and receive packets via CAN interface. &lt;br /&gt;
* Dump received data frames and error frames:&lt;br /&gt;
 candump any,0:0,#FFFFFFFF&lt;br /&gt;
* Send:&lt;br /&gt;
:* Standard frame:&lt;br /&gt;
 cansend can0 111#1122334455667788&lt;br /&gt;
:* Extended frame:&lt;br /&gt;
 cansend can0 11111111#1122334455667788&lt;br /&gt;
:* Generate 50 random extended frames with 50 msec interval between each:&lt;br /&gt;
 cangen -g 50 -e -D r -v can0 -n 50&lt;br /&gt;
* Disable the interfaces:&lt;br /&gt;
 ip link set can0 down&lt;br /&gt;
&lt;br /&gt;
== RS485 ==&lt;br /&gt;
IOT-LINK features up-to two optional RS485 ports implemented with MAX13488 transceivers interfaced with i.MX93 UART ports.&lt;br /&gt;
{{Note| RS485 ports are only present in gateways ordered with the “FARS4” or “FBRS4” ordering options. RS485 ports are mutually exclusive with CAN bus ports.}}&lt;br /&gt;
RS485 signals are routed to the industrial I/O connector. Please refer to [https://www.compulab.com/products/iot-gateways/iot-LINK-industrial-iot-gateway/#devres IOT-LINK reference guide] for Industrial I/O Connector pin-out. &amp;lt;br&amp;gt;&lt;br /&gt;
=== Configuration and Access ===&lt;br /&gt;
*Set a tty variable depending on the [https://www.compulab.com/products/iot-gateways/iot-LINK-industrial-iot-gateway/#ordering Configuration Options] of your unit&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''config option'''&lt;br /&gt;
| '''set Linux tty interface'''&lt;br /&gt;
|-&lt;br /&gt;
|FARS4&lt;br /&gt;
|RS485_A=/dev/ttyLP6&lt;br /&gt;
|-&lt;br /&gt;
|FBRS4&lt;br /&gt;
|RS485_B=/dev/ttyLP4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
* Access the RS485 interface can be accessed in Linux via the tty device in ''ttyRS485'' variable:&lt;br /&gt;
 sudo stty -F ${RS485_B}&lt;br /&gt;
&lt;br /&gt;
RS485 has an optional hardware-enabled termination. Please consult with the reference guide for enabling instructions.&lt;br /&gt;
&lt;br /&gt;
=== Modbus RS485 ===&lt;br /&gt;
The following example demonstrates how to use RS485 in a Modbus RS485 Network where IOT-LINK performs as a Master device and queries XY-MD02 temperature and humidity sensor.&lt;br /&gt;
==== Software installation ====&lt;br /&gt;
Download and install ''modpoll'' - a command line based Modbus master simulator and test utility. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://www.modbusdriver.com/downloads/modpoll.tgz -P /tmp/&lt;br /&gt;
sudo tar -xvf /tmp/modpoll.tgz -C /opt/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Device connection - example for port B ====&lt;br /&gt;
* Connect XY-MD02 sensor to appropriate Industrial I/O connector pins as below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-------------------                            --------------------&lt;br /&gt;
|                 *--(+)---&amp;lt; &amp;lt;------- 5V-30V   |     IOT-LINK     |&lt;br /&gt;
|                 *--(-)---&amp;lt; &amp;lt;-------- GND     |                  |&lt;br /&gt;
| XY-MD02 (RS485) |                            |------ Industrial |&lt;br /&gt;
|                 *--(A+)--&amp;lt; &amp;lt;--...--&amp;gt; &amp;gt;-(7)-*-|     | I/O        |&lt;br /&gt;
|                 *--(B-)--&amp;lt; &amp;lt;--...--&amp;gt; &amp;gt;-(8)-*-|     | Connector  |&lt;br /&gt;
-------------------                            --------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Read data ====&lt;br /&gt;
* Read temperature once:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 3 -c 1 -r 2 -1 ${RS485_B}&lt;br /&gt;
...&lt;br /&gt;
-- Polling slave...&lt;br /&gt;
[2]: 250&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Poll temperature:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 3 -c 1 -r 2 ${RS485_B}&lt;br /&gt;
...&lt;br /&gt;
-- Polling slave... (Ctrl-C to stop)&lt;br /&gt;
[2]: 254&lt;br /&gt;
-- Polling slave... (Ctrl-C to stop)&lt;br /&gt;
[2]: 254&lt;br /&gt;
-- Polling slave... (Ctrl-C to stop)&lt;br /&gt;
[2]: 254&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Read humidity once:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 3 -c 1 -r 3 -1 ${RS485_B}&lt;br /&gt;
...&lt;br /&gt;
-- Polling slave...&lt;br /&gt;
[3]: 515&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Poll humidity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 3 -c 1 -r 3 ${RS485_B}&lt;br /&gt;
...&lt;br /&gt;
-- Polling slave... (Ctrl-C to stop)&lt;br /&gt;
[3]: 894&lt;br /&gt;
-- Polling slave... (Ctrl-C to stop)&lt;br /&gt;
[3]: 895&lt;br /&gt;
-- Polling slave... (Ctrl-C to stop)&lt;br /&gt;
[3]: 896&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Read temperature &amp;amp; humidity once:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 3 -c 2 -r 2 -1 ${RS485_B}&lt;br /&gt;
...&lt;br /&gt;
-- Polling slave...&lt;br /&gt;
[2]: 263&lt;br /&gt;
[3]: 606&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Poll temperature &amp;amp; humidity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 3 -c 2 -r 2 ${RS485_B}&lt;br /&gt;
...&lt;br /&gt;
-- Polling slave... (Ctrl-C to stop)&lt;br /&gt;
[2]: 263&lt;br /&gt;
[3]: 545&lt;br /&gt;
-- Polling slave... (Ctrl-C to stop)&lt;br /&gt;
[2]: 263&lt;br /&gt;
[3]: 543&lt;br /&gt;
-- Polling slave... (Ctrl-C to stop)&lt;br /&gt;
[2]: 263&lt;br /&gt;
[3]: 542&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Read slave address, baudrate, temperature &amp;amp; humidity corrections:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 4 -c 4 -r 258 -1 ${RS485_B}&lt;br /&gt;
...&lt;br /&gt;
-- Polling slave...&lt;br /&gt;
[258]: 1&lt;br /&gt;
[259]: 9600&lt;br /&gt;
[260]: 0&lt;br /&gt;
[261]: 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Digital I/O  ==&lt;br /&gt;
IOT-LINK provides three signals which can be used as either digital inputs or outputs.&amp;lt;br&amp;gt;&lt;br /&gt;
Please refer to [https://www.compulab.com/products/iot-gateways/iot-LINK-industrial-iot-gateway/#devres IOT-LINK reference guide] for Industrial I/O Connector pin-out.&lt;br /&gt;
{{Note| External voltage supply in the range 6-24VDC must be supplied via DIO_VIN pin for correct operation of digital outputs.}}&lt;br /&gt;
=== Access ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''pin # on terminal block''' &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Command to drive pin high'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Command to read pin'''&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |2&lt;br /&gt;
| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;sudo gpioset 0 4=1&amp;lt;/code&amp;gt;&lt;br /&gt;
| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;sudo gpioget 0 4 &amp;gt; /dev/null; sudo gpioget 0 16&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;sudo gpioset 0 5=1&amp;lt;/code&amp;gt;&lt;br /&gt;
| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;sudo gpioget 0 5 &amp;gt; /dev/null; sudo gpioget 0 17&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |4&lt;br /&gt;
| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;sudo gpioset 0 12=1&amp;lt;/code&amp;gt;&lt;br /&gt;
| align=&amp;quot;&amp;quot; |&amp;lt;code&amp;gt;sudo gpioget 0 12 &amp;gt; /dev/null; sudo gpioget 0 21&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{Note| Read logical value is opposite to voltage level, i.e. if positive voltage is applied on a pin, its read value will be 0 and vice versa}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Another way to set the pin state is the usage of ''dioset'' bash script located at ''/opt/iotdin-imx8p/shell''&lt;br /&gt;
* Setup alias for more convenient work:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dioset=/opt/iotdin-imx8p/shell/dioset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Drive OUT0 pin HI:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
compulab@compulab-imx8mp~$ sudo ${dioset} -m M 0 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Drive OUT0 pin LOW:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
compulab@compulab-imx8mp~$ sudo ${dioset} -m M 0 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Drive OUT1 pin HI:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
compulab@compulab-imx8mp~$ sudo ${dioset} -m M 1 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Drive OUT1 pin LOW:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
compulab@compulab-imx8mp~$ sudo ${dioset} -m M 1 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Digital Inputs ====&lt;br /&gt;
* Read IN0 pin state:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo gpioget 4 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Read IN1 pin state:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo gpioget 4 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another way to set the pin state is the usage of ''dioget'' bash script located at ''/opt/iotdin-imx8p/shell''&lt;br /&gt;
* Setup alias for more convenient work:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dioget=/opt/iotdin-imx8p/shell/dioget&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Read IN0 pin state:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
compulab@compulab-imx8mp~$ sudo ${dioget} -m M 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Read IN1 pin state:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
compulab@compulab-imx8mp~$ sudo ${dioget} -m M 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
= Gateway Configurator =&lt;br /&gt;
During O/S boot IOT-LINK automatically runs the Gateway configurator script that detects WiFi/Bluetooth modules and Cellular modem, and configures the virtual device files used to address these devices as well as Industrial I/O Interfaces such as CAN, Digital I/O and etc.&amp;lt;br&amp;gt;&lt;br /&gt;
The script creates access files for all permanent and detected optional devices and interfaces.&lt;br /&gt;
&lt;br /&gt;
== Gateway Interfaces ==&lt;br /&gt;
Gateway interfaces access directory example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├── cmd_button&lt;br /&gt;
│   └── event -&amp;gt; /dev/input/event1&lt;br /&gt;
├── industrial_io&lt;br /&gt;
│   ├── can -&amp;gt; /sys/class/net/can0&lt;br /&gt;
│   ├── di.map&lt;br /&gt;
│   ├── do.map&lt;br /&gt;
│   └── ttyRS485 -&amp;gt; /dev/ttyRS485&lt;br /&gt;
├── leds&lt;br /&gt;
│   ├── green_a -&amp;gt; /sys/class/leds/Green_A&lt;br /&gt;
│   ├── green_b -&amp;gt; /sys/class/leds/Green_B&lt;br /&gt;
│   ├── red_a -&amp;gt; /sys/class/leds/Red_A&lt;br /&gt;
│   └── red_b -&amp;gt; /sys/class/leds/Red_B&lt;br /&gt;
└── network&lt;br /&gt;
    ├── bluetooth -&amp;gt; /sys/class/bluetooth/hci0&lt;br /&gt;
    ├── modem&lt;br /&gt;
    │   ├── at1 -&amp;gt; /dev/ttyModemAT1&lt;br /&gt;
    │   ├── at2 -&amp;gt; /dev/ttyModemAT2&lt;br /&gt;
    │   ├── gps -&amp;gt; /dev/ttyModemGPS&lt;br /&gt;
    │   └── qcdm -&amp;gt; /dev/ttyModemQCDM&lt;br /&gt;
    └── wlan -&amp;gt; /sys/class/net/mlan0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
= GPS =&lt;br /&gt;
IOT-LINK features an optional GPS interface implemented with the cellular modem module.&amp;lt;/br&amp;gt;&lt;br /&gt;
Cellular module is an optional module and should be pre-installed into the gateway. Verify your gateway configuration for modem functionality.&lt;br /&gt;
During O/S boot IOT-LINK will automatically detect cellular modem and create necessary access files if installed. For additional details please refer to the [[IOT-LINK:_Debian_Linux:_How-To_Guide#Gateway_Configurator|Configuration chapter]].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
For IOT-LINK with cellular modem option ('''JEG2xG''') the configurator script will create the following access files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/run/iotdin-imx8p/gateway/access/network/modem/&lt;br /&gt;
|-- at1 -&amp;gt; /dev/ttyModemAT1&lt;br /&gt;
|-- at2 -&amp;gt; /dev/ttyModemAT2&lt;br /&gt;
|-- gps -&amp;gt; /dev/ttyModemGPS&lt;br /&gt;
`-- qcdm -&amp;gt; /dev/ttyModemQCDM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GPS antenna ==&lt;br /&gt;
&lt;br /&gt;
A GPS antenna is required for GPS operation. GPS antenna is not included with IOT-LINK. Any active GPS antenna with a male SMA connector can be used with IOT-LINK.&amp;lt;/br&amp;gt;&lt;br /&gt;
GPS antenna should be attached to SMA connector '''A''' on the gateway.&amp;lt;br&amp;gt;&lt;br /&gt;
{{Note|GPS antenna should be positioned at least 1m away from the gateway}}&lt;br /&gt;
&lt;br /&gt;
== Using GPS ==&lt;br /&gt;
The [https://manpages.debian.org/jessie/gpsd-clients/cgps.1.en.html cgps] client can be used to display the GPS information. &amp;lt;br&amp;gt;&lt;br /&gt;
The [https://manpages.debian.org/testing/modemmanager/mmcli.8 ModemManager] can be used to check the modem status.&lt;br /&gt;
For example, the following command shows the presence of the modem and the id of its interfaces.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
compulab@compulab-imx8mp:~# mmcli -m 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The cgps client utility depends on the gpsd daemon (starts automatically after the initialization command is performed).&lt;br /&gt;
* Detect the GPS device:&lt;br /&gt;
:&amp;lt;pre&amp;gt; gps=$(readlink -e /run/iotdin-imx8p/gateway/access/network/modem/gps)&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Initialize the GPS interface:&lt;br /&gt;
:&amp;lt;pre&amp;gt;compulab@compulab-imx8mp:~# sudo sed -i &amp;quot;/^DEVICES=.*/c\DEVICES=\&amp;quot;${gps}\&amp;quot;&amp;quot; /etc/default/gpsd&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Detect the primary AT modem device:&lt;br /&gt;
:&amp;lt;pre&amp;gt; at1=$(readlink -e /run/iotdin-imx8p/gateway/access/network/modem/at1)&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Enable the GPS with the following AT commands:&lt;br /&gt;
:&amp;lt;pre&amp;gt;compulab@compulab-imx8mp:~# echo &amp;quot;AT+QGPS=1&amp;quot; | sudo socat - ${at1},crnl&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Full power cycle is required before using GPS. Shut down the gateway, remove main DC power for at least 20 sec and restart.&lt;br /&gt;
* Start the cgps client to display GPS information.&lt;br /&gt;
&lt;br /&gt;
The synchronization process might take a few minutes. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
compulab@compulab-imx8mp:~# cgps&lt;br /&gt;
┌───────────────────────────────────────────┐┌─────────────────────────────────┐&lt;br /&gt;
│    Time:       2024-05-04T14:13:30.000Z   ││PRN:   Elev:  Azim:  SNR:  Used: │&lt;br /&gt;
│    Latitude:    32.65985123 N             ││  71    29    123    22      Y   │&lt;br /&gt;
│    Longitude:   35.10027205 E             ││  85    27    047    22      Y   │&lt;br /&gt;
│    Altitude:   102.700 m                  ││                                 │&lt;br /&gt;
│    Speed:      0.00 kph                   ││                                 │&lt;br /&gt;
│    Heading:    128.7 deg (true)           ││                                 │&lt;br /&gt;
│    Climb:      6.00 m/min                 ││                                 │&lt;br /&gt;
│    Status:     3D FIX (53 secs)           ││                                 │&lt;br /&gt;
│    Longitude Err:   n/a                   ││                                 │&lt;br /&gt;
│    Latitude Err:    n/a                   ││                                 │&lt;br /&gt;
│    Altitude Err:    +/- 18 m              ││                                 │&lt;br /&gt;
│    Course Err:      n/a                   ││                                 │&lt;br /&gt;
│    Speed Err:       n/a                   ││                                 │&lt;br /&gt;
│    Time offset:     -3.682                ││                                 │&lt;br /&gt;
│    Grid Square:     KM72np                ││                                 │&lt;br /&gt;
└───────────────────────────────────────────┘└─────────────────────────────────┘&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Disable the GPS with the following AT commands:&lt;br /&gt;
:&amp;lt;pre&amp;gt;compulab@compulab-imx8mp:~# echo &amp;quot;AT+QGPSEND&amp;quot; | sudo socat - ${at1},crnl&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= LEDs =&lt;br /&gt;
*IOT-LINK features:&lt;br /&gt;
:*user bi color LED: green and red.&lt;br /&gt;
:*bi color LED: amber and &amp;quot;power-blue&amp;quot; which is used by default to indicate system state&lt;br /&gt;
&lt;br /&gt;
*LEDs are controlled via GPIO pins and can be accessed via [https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-led sysfs] interface.&lt;br /&gt;
==Example==&lt;br /&gt;
*Choose a LED:&lt;br /&gt;
:&amp;lt;pre&amp;gt; LED=green&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Turn ON&lt;br /&gt;
:&amp;lt;pre&amp;gt; echo &amp;quot;1&amp;quot; | sudo tee -a /sys/class/leds/${LED}/brightness&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Turn OFF&lt;br /&gt;
:&amp;lt;pre&amp;gt; echo &amp;quot;0&amp;quot; | sudo tee -a /sys/class/leds/${LED}/brightness&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Set trigger&lt;br /&gt;
:&amp;lt;pre&amp;gt; echo &amp;quot;heartbeat&amp;quot; | sudo tee -a /sys/class/leds/${LED}/trigger&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= TPM =&lt;br /&gt;
IOT-LINK is assembled with TPM 2.0 implemented with Infineon SLB9673.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
The TPM driver is loaded automatically&amp;lt;br&amp;gt;&lt;br /&gt;
== TPM Initialization ==&lt;br /&gt;
* Make sure that the TPM kernel object is loaded:&lt;br /&gt;
 lsmod | grep tpm_tis_i2c&lt;br /&gt;
* Load the TPM kernel object manually is required:&lt;br /&gt;
 modprobe tpm_tis_i2c&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
== TPM Basic Functionality ==&lt;br /&gt;
* Install the '''tpm2-tools''' package:&lt;br /&gt;
 sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install tpm2-tools&lt;br /&gt;
* Validate basic functionality&lt;br /&gt;
 sudo tpm2_getrandom --hex 32&lt;br /&gt;
The correct result will be returned generated 32-symbol key.&lt;br /&gt;
&lt;br /&gt;
= RTC =&lt;br /&gt;
IOT-LINK features two real time clock (RTC) devices:&lt;br /&gt;
* AM1805 (default '''rtc0''') - for low current, battery backed time keeping whenever the main power supply is not present.&lt;br /&gt;
* i.MX93 internal RTC ('''rtc1''') - can be used as wake-up source for [[IOT-LINK: Debian: How-To#Low_Power_Modes | low power modes]]&lt;br /&gt;
&lt;br /&gt;
== Access ==&lt;br /&gt;
* To read time and date run:&lt;br /&gt;
 sudo hwclock&lt;br /&gt;
&lt;br /&gt;
* To set the date run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop systemd-timesyncd&lt;br /&gt;
sudo systemctl disable systemd-timesyncd&lt;br /&gt;
sudo timedatectl set-local-rtc yes # do not write system time to the RTC&lt;br /&gt;
sudo hwclock --set --date=&amp;quot;2020-01-01 12:00:00&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Watchdog =&lt;br /&gt;
By default watchdog is  not configured.&lt;br /&gt;
 systemctl show | grep RuntimeWatchdog&lt;br /&gt;
:&amp;lt;pre&amp;gt;RuntimeWatchdogUSec=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
The value '''RuntimeWatchdogUSec=0''' means that no watchdog device is opened, configured, or pinged&lt;br /&gt;
== Watchdog configuration ==&lt;br /&gt;
* Edit ''/etc/systemd/system.conf'' file to configure watchdog related parameters, in particular '''RuntimeWatchdogSec''' and '''ShutdownWatchdogSec'''.&lt;br /&gt;
the `'''#'''` comment sign should be removed from the relevant line in the file.&lt;br /&gt;
:'''RuntimeWatchdogSec''' - specifies the watchdog timeout for runtime services that are actively running during normal system operation. The value is in seconds and should be set to a positive integer.&amp;lt;br&amp;gt;&lt;br /&gt;
:'''ShutdownWatchdogSec''' - specifies the watchdog timeout for the shutdown process, insuring the system doesn't hang indefinitely during shutdown. The value is in seconds and should be set to a positive integer.&amp;lt;br&amp;gt;&lt;br /&gt;
* run:&lt;br /&gt;
 systemctl daemon-reexec&lt;br /&gt;
* Verify watchdog configuration. e.g. if you have set &amp;lt;code&amp;gt;RuntimeWatchdogSec=10&amp;lt;/code&amp;gt;:&lt;br /&gt;
:&amp;lt;pre&amp;gt; systemctl show | grep RuntimeWatchdog&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;pre&amp;gt;RuntimeWatchdogUSec=10s&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Watchdog testing ==&lt;br /&gt;
* Run the following command to simulate kernel panic:&lt;br /&gt;
 echo &amp;quot;c&amp;quot; | sudo tee -a /proc/sysrq-trigger&lt;br /&gt;
* As a result, the watchdog is not fed and the system reboots after the value of RuntimeWatchdogSec&lt;br /&gt;
&lt;br /&gt;
= Low Power Modes =&lt;br /&gt;
IOT-LINK supports the following low-power modes:&lt;br /&gt;
* Sleep mode - RAM content is preserved, and the system will quickly wake up into the operating system.&lt;br /&gt;
* Power-off mode - The system will restart into a clean boot.&lt;br /&gt;
Wake-up source:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Short press on the power button&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* Timer alarm set in internal RTC (rtc1)&lt;br /&gt;
{{Important|Only the internal RTC (rtc1) can be used for the wake-up alarm. Main DC power must be present to preserve alarm settings.}}&lt;br /&gt;
==== Low power mode examples====&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{Note|Make sure that remote power button event is ignored and does not cause machine power-off: uncomment and set '''HandlePowerKey''' field to '''ignore''' value in the ''/etc/systemd/logind.conf''}}&lt;br /&gt;
* Sleep mode with exit by remote power button event:&lt;br /&gt;
:&amp;lt;pre&amp;gt; echo mem | sudo tee -a /sys/power/state&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* Sleep mode with exit by RTC wake-up call:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
or remote power button event:&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 sudo rtcwake --device /dev/rtc1 -s 5 -m mem&lt;br /&gt;
* Power-off mode with boot on RTC wake-up call:&lt;br /&gt;
 sudo rtcwake --device /dev/rtc1 -s 60 -m off # system reboots after 60 seconds.&lt;br /&gt;
&lt;br /&gt;
=CPU temperature=&lt;br /&gt;
*i.MX93 SoC features an internal temperature sensor.&lt;br /&gt;
*To read the current CPU temperature, run:&lt;br /&gt;
 cat /sys/class/thermal/thermal_zone0/temp&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
= CMD push-button =&lt;br /&gt;
&lt;br /&gt;
The CMD button is implemented as '''gpio-keys''' device with code 171 (KEY_CONFIG).&amp;lt;br&amp;gt;&lt;br /&gt;
This is the Input Device which can easily be accessed from the Linux user space via a corresponding ''/dev/input/eventX'' file.&lt;br /&gt;
&lt;br /&gt;
=== Input Device ===&lt;br /&gt;
The IOT-LINK configurator script will create an access file to the proper input device event:&lt;br /&gt;
==== Example ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/run/iotdin-imx8p/gateway/access&lt;br /&gt;
├── cmd_button&lt;br /&gt;
│   └── event -&amp;gt; /dev/input/event1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== CMD Button Demo ===&lt;br /&gt;
The CMD Button Demo utility '''cmd_button''' uses [https://packages.debian.org/unstable/utils/evtest evtest] Linux utility to monitor CMD Button press events and takes some user action, namely sets User LED A state.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo /opt/iotdin-imx8p/shell/cmd_button&lt;br /&gt;
           #######################&lt;br /&gt;
           #   CMD Button Demo   #&lt;br /&gt;
           #######################&lt;br /&gt;
&lt;br /&gt;
Press CMD button and observe User LED A state change&lt;br /&gt;
&lt;br /&gt;
Press 'Ctrl+C' to stop the Demo&lt;br /&gt;
CMD Button pressed: LED state: red&lt;br /&gt;
CMD Button pressed: LED state: green&lt;br /&gt;
CMD Button pressed: LED state: red&lt;br /&gt;
CMD Button pressed: LED state: green&lt;br /&gt;
CMD Button pressed: LED state: red&lt;br /&gt;
CMD Button pressed: LED state: green&lt;br /&gt;
CMD Button pressed: LED state: red&lt;br /&gt;
CMD Button pressed: LED state: green&lt;br /&gt;
CMD Button pressed: LED state: red&lt;br /&gt;
^C&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:IOT-LINK]]&lt;/div&gt;</summary>
		<author><name>Igor</name></author>
		
	</entry>
</feed>