<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://alnwlsn.com/projectrepository/index.php?action=history&amp;feed=atom&amp;title=Lora_module</id>
	<title>Lora module - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://alnwlsn.com/projectrepository/index.php?action=history&amp;feed=atom&amp;title=Lora_module"/>
	<link rel="alternate" type="text/html" href="https://alnwlsn.com/projectrepository/index.php?title=Lora_module&amp;action=history"/>
	<updated>2026-04-05T18:22:49Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://alnwlsn.com/projectrepository/index.php?title=Lora_module&amp;diff=463&amp;oldid=prev</id>
		<title>Alnwlsn: Alnwlsn moved page GLora module to Lora module: name change</title>
		<link rel="alternate" type="text/html" href="https://alnwlsn.com/projectrepository/index.php?title=Lora_module&amp;diff=463&amp;oldid=prev"/>
		<updated>2019-08-15T14:00:30Z</updated>

		<summary type="html">&lt;p&gt;Alnwlsn moved page &lt;a href=&quot;/projectrepository/index.php?title=GLora_module&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;GLora module (page does not exist)&quot;&gt;GLora module&lt;/a&gt; to &lt;a href=&quot;/projectrepository/index.php?title=Lora_module&quot; title=&quot;Lora module&quot;&gt;Lora module&lt;/a&gt;: name change&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&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: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 10:00, 15 August 2019&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>Alnwlsn</name></author>
	</entry>
	<entry>
		<id>https://alnwlsn.com/projectrepository/index.php?title=Lora_module&amp;diff=446&amp;oldid=prev</id>
		<title>Alnwlsn at 20:16, 14 August 2019</title>
		<link rel="alternate" type="text/html" href="https://alnwlsn.com/projectrepository/index.php?title=Lora_module&amp;diff=446&amp;oldid=prev"/>
		<updated>2019-08-14T20:16:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&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: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:16, 14 August 2019&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-l6&quot;&gt;Line 6:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 6:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;For simplicity, all the radio settings: frequency, channel, radio power, etc. are all handled by the module programming.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;For simplicity, all the radio settings: frequency, channel, radio power, etc. are all handled by the module programming.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;This is that '''g'''eneric '''LoRa''' module&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;'''Hardware/Interfacing'''&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;'''Hardware/Interfacing'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Alnwlsn</name></author>
	</entry>
	<entry>
		<id>https://alnwlsn.com/projectrepository/index.php?title=Lora_module&amp;diff=435&amp;oldid=prev</id>
		<title>Alnwlsn at 01:47, 12 August 2019</title>
		<link rel="alternate" type="text/html" href="https://alnwlsn.com/projectrepository/index.php?title=Lora_module&amp;diff=435&amp;oldid=prev"/>
		<updated>2019-08-12T01:47:39Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&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: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:47, 11 August 2019&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-l13&quot;&gt;Line 13:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 13:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;'''Operation'''&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;'''Operation'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;The operation is about as simple as it can get&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, I think&lt;/del&gt;. The modules appear to the host at address 8 (you can change this to whatever you want).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;The operation is about as simple as it can get. The modules appear to the host at &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;I2C &lt;/ins&gt;address 8 (you can change this to whatever you want).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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 size of all messages is 32 bytes, which is the size of the Arduino Wire library's buffer.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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 size of all messages is 32 bytes, which is the size of the Arduino Wire library's buffer.  &lt;/div&gt;&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-l19&quot;&gt;Line 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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 send a message, write out 32 bytes to the module over the I2C bus. The message will be transmitted as soon as the 32 bytes are written.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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 send a message, write out 32 bytes to the module over the I2C bus. The message will be transmitted as soon as the 32 bytes are written.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;When not transmitting, the module is listening. When a message comes in, it does a CRC16 on it to make sure it was received correctly. If true, it will save the message and assert the RXREAY pin high. On the host, you should monitor this pin to know when a valid message comes in. Then, you can request a Read of 32 bytes over i2c, and expect to get 32 bytes in, which is the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;original &lt;/del&gt;message. As soon as the Read is done, the RXREADY pin goes low again.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;When not transmitting, the module is listening. When a message comes in, it does a CRC16 on it to make sure it was received correctly. If true, it will save the message and assert the RXREAY pin high. On the host, you should monitor this pin to know when a valid message comes in. Then, you can request a Read of 32 bytes over i2c, and expect to get 32 bytes in, which is the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;received &lt;/ins&gt;message. As soon as the Read is done, the RXREADY pin goes low again.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;==Sketch - Aug 2019 v1==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; 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;==Sketch - Aug 2019 v1==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Alnwlsn</name></author>
	</entry>
	<entry>
		<id>https://alnwlsn.com/projectrepository/index.php?title=Lora_module&amp;diff=418&amp;oldid=prev</id>
		<title>Alnwlsn: Created page with &quot;When I was working on my robot wheelchair base, and changing the radio to a LoRa radio, I soon ran into some problems, mainly, that I was out of IO pins. The setup of these ra...&quot;</title>
		<link rel="alternate" type="text/html" href="https://alnwlsn.com/projectrepository/index.php?title=Lora_module&amp;diff=418&amp;oldid=prev"/>
		<updated>2019-08-07T04:58:16Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;When I was working on my robot wheelchair base, and changing the radio to a LoRa radio, I soon ran into some problems, mainly, that I was out of IO pins. The setup of these ra...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;When I was working on my robot wheelchair base, and changing the radio to a LoRa radio, I soon ran into some problems, mainly, that I was out of IO pins. The setup of these radios is also not that ideal; they use interrupts when I am already using interrupts for another realtime application, and I have to constantly check the radios for any new messages, slowing down my loop time. Also, the modules require some specialized setup in software, so if I ever wanted to change out the radios to a different type, I would have to redo my entire software.&lt;br /&gt;
&lt;br /&gt;
All of these problems could be solved quite simply by having a separate microcontroller to manage the radios, so that's what I did. The first version used a client module and server module like the examples in the Radiohead library, but I revised this so that there is just one module, and it is up to the things they are connected to to figure it out.&lt;br /&gt;
&lt;br /&gt;
However, because the modules have their own processor, you don't have to do any error checking on the host, the modules will just tell you when a good message comes in.&lt;br /&gt;
&lt;br /&gt;
For simplicity, all the radio settings: frequency, channel, radio power, etc. are all handled by the module programming.&lt;br /&gt;
&lt;br /&gt;
'''Hardware/Interfacing'''&lt;br /&gt;
I made the modules out of a 3.3V Arduino Pro Mini, a RFM95 LoRa module, and a logic level converter (so that I can use the modules with 5V devices).&lt;br /&gt;
&lt;br /&gt;
The interface to the module is just three wires: two for I2C, and one that signals when a new valid message has been received.&lt;br /&gt;
&lt;br /&gt;
'''Operation'''&lt;br /&gt;
The operation is about as simple as it can get, I think. The modules appear to the host at address 8 (you can change this to whatever you want).&lt;br /&gt;
&lt;br /&gt;
The size of all messages is 32 bytes, which is the size of the Arduino Wire library's buffer. &lt;br /&gt;
&lt;br /&gt;
To send a message, write out 32 bytes to the module over the I2C bus. The message will be transmitted as soon as the 32 bytes are written.&lt;br /&gt;
&lt;br /&gt;
When not transmitting, the module is listening. When a message comes in, it does a CRC16 on it to make sure it was received correctly. If true, it will save the message and assert the RXREAY pin high. On the host, you should monitor this pin to know when a valid message comes in. Then, you can request a Read of 32 bytes over i2c, and expect to get 32 bytes in, which is the original message. As soon as the Read is done, the RXREADY pin goes low again.&lt;br /&gt;
&lt;br /&gt;
==Sketch - Aug 2019 v1==&lt;br /&gt;
Arduino Radiohead library is required. &lt;br /&gt;
One item the next time I have my wheelchair controllers open: lockout the reception of new messages until we Read out the valid message we already have.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//gLora module - easily send data using i2c over radio - Alan Wilson 2019&lt;br /&gt;
#define DIO0 3&lt;br /&gt;
#define DIO1 3&lt;br /&gt;
#define RESET 5&lt;br /&gt;
#define NSS 6&lt;br /&gt;
#include &amp;lt;util/crc16.h&amp;gt;&lt;br /&gt;
#define RXREADY 0&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;RH_RF95.h&amp;gt;&lt;br /&gt;
RH_RF95 rf95(NSS, DIO0); //an arduino pro mini with bare RFM95&lt;br /&gt;
uint8_t buf[RH_RF95_MAX_MESSAGE_LEN]; // Should be a message for us now &lt;br /&gt;
uint8_t len = sizeof(buf);&lt;br /&gt;
&lt;br /&gt;
#define packetsize 32 //this is Wire max size&lt;br /&gt;
uint8_t rxd[packetsize]; //data packets recived &lt;br /&gt;
uint8_t txd[packetsize]; //data packets to send&lt;br /&gt;
bool rxdvalid=0;&lt;br /&gt;
&lt;br /&gt;
bool txdFlag=0; //when 1, do a request to the serer &lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
  pinMode(DIO1, INPUT_PULLUP); //not using this pin right now&lt;br /&gt;
  &lt;br /&gt;
  digitalWrite(RESET, LOW); //reset radio&lt;br /&gt;
  delay(200);&lt;br /&gt;
  pinMode(RESET, INPUT_PULLUP);&lt;br /&gt;
  &lt;br /&gt;
  rf95.init();&lt;br /&gt;
&lt;br /&gt;
  pinMode(RXREADY, OUTPUT);digitalWrite(RXREADY, LOW); //pin zero will be used as the &amp;quot;new data&amp;quot; signal&lt;br /&gt;
&lt;br /&gt;
  rf95.setModemConfig(1); //Bw500Cr45Sf128&lt;br /&gt;
  rf95.setFrequency(915.0);&lt;br /&gt;
  rf95.setTxPower(23,false); //set RFM95 between 5 and 23&lt;br /&gt;
&lt;br /&gt;
  Wire.setClock(400000);&lt;br /&gt;
  Wire.begin(8);&lt;br /&gt;
  Wire.onRequest(requestEvent);&lt;br /&gt;
  Wire.onReceive(receiveEvent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void requestEvent(){&lt;br /&gt;
  //copy rxd data; send it out&lt;br /&gt;
  for(byte i=0; i&amp;lt;packetsize; i++){&lt;br /&gt;
    buf[i]=rxd[i]; &lt;br /&gt;
  }&lt;br /&gt;
  Wire.write(buf,packetsize);&lt;br /&gt;
  rxdvalid=0; //now that data has been read out, assume invalid&lt;br /&gt;
  digitalWrite(RXREADY, LOW);&lt;br /&gt;
}&lt;br /&gt;
void receiveEvent(int howMany){&lt;br /&gt;
  //copy txd data in&lt;br /&gt;
  byte iindex=0;&lt;br /&gt;
  while(Wire.available()){&lt;br /&gt;
    txd[iindex]=Wire.read();&lt;br /&gt;
    iindex++;&lt;br /&gt;
    if(iindex&amp;gt;=packetsize-1){iindex=packetsize-1;}&lt;br /&gt;
  }&lt;br /&gt;
  txdFlag=1; //set the flag for the radio to transmit&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
  if(txdFlag==1){&lt;br /&gt;
    txdFlag=0;&lt;br /&gt;
    //TRANSMIT***************************************&lt;br /&gt;
    uint16_t txcrc=CRC16(txd, packetsize);&lt;br /&gt;
    buf[0]=txcrc&amp;gt;&amp;gt;8;&lt;br /&gt;
    buf[1]=txcrc;&lt;br /&gt;
    for(byte i=0;i&amp;lt;packetsize;i++){&lt;br /&gt;
      buf[i+2]=txd[i];&lt;br /&gt;
    }&lt;br /&gt;
    rf95.send(buf, packetsize+2);&lt;br /&gt;
    rf95.waitPacketSent();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if(rf95.available()){&lt;br /&gt;
    if(rf95.recv(buf, &amp;amp;len)){&lt;br /&gt;
      uint16_t rxcrc=buf[0]&amp;lt;&amp;lt;8; rxcrc+=buf[1]; //get the crc sent along with the data&lt;br /&gt;
      for(int i=0; i&amp;lt;packetsize; i++){//shift all the buf data up 2 places for crc calc&lt;br /&gt;
          buf[i]=buf[i+2];&lt;br /&gt;
      }&lt;br /&gt;
      if(CRC16(buf, packetsize)==rxcrc){ //calculate crc of rxd data, if match, then data ok&lt;br /&gt;
        for(int i=0; i&amp;lt;packetsize; i++){&lt;br /&gt;
          rxd[i]=buf[i];&lt;br /&gt;
        }&lt;br /&gt;
        digitalWrite(RXREADY, HIGH);&lt;br /&gt;
      }else{/* bad data */}&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
uint16_t CRC16(uint8_t *data, uint8_t lent){ //crc16 based on AVR _crc16_update&lt;br /&gt;
  uint16_t crc=0;&lt;br /&gt;
  for (int i=0;i&amp;lt;lent;i++){&lt;br /&gt;
    crc= _crc16_update (crc, data[i]); // update the crc value&lt;br /&gt;
  }&lt;br /&gt;
  return crc;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alnwlsn</name></author>
	</entry>
</feed>