{"id":3323,"date":"2023-01-21T06:36:49","date_gmt":"2023-01-21T14:36:49","guid":{"rendered":"https:\/\/www.donluc.com\/?p=3323"},"modified":"2023-01-21T06:36:49","modified_gmt":"2023-01-21T14:36:49","slug":"project-26-radio-frequency-moteino-ask-mk03","status":"publish","type":"post","link":"https:\/\/www.donluc.com\/?p=3323","title":{"rendered":"Project #26 &#8211; Radio Frequency &#8211; Moteino ASK &#8211; Mk03"},"content":{"rendered":"<div style=\"width: 720px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-3323-1\" width=\"720\" height=\"480\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06W.mp4?_=1\" \/><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06W.mp4\">https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06W.mp4<\/a><\/video><\/div>\n<p>&#8212;&#8212;<\/p>\n<p>#DonLucElectronics #DonLuc #RadioFrequency #Moteino #Send #Receive #ASK #Arduino #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant<\/p>\n<p>&#8212;&#8212;<\/p>\n<p><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06a.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06a.png\" alt=\"Moteino ASK\" width=\"720\" height=\"612\" class=\"alignnone size-full wp-image-3325\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06a.png 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06a-300x255.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>&#8212;&#8212;<\/p>\n<p><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06b.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06b.png\" alt=\"Moteino ASK\" width=\"720\" height=\"480\" class=\"alignnone size-full wp-image-3326\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06b.png 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06b-300x200.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>&#8212;&#8212;<\/p>\n<p><a href=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06c.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06c.png\" alt=\"Moteino ASK\" width=\"720\" height=\"480\" class=\"alignnone size-full wp-image-3327\" srcset=\"https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06c.png 720w, https:\/\/www.donluc.com\/wp-content\/uploads\/2023\/01\/DL2211Mk06c-300x200.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>&#8212;&#8212;<\/p>\n<p><strong>Send and Receive<\/strong><\/p>\n<p>These RF Transmitter Modules are very small in dimension and have a wide operating voltage range. The low cost RF Transmitter can be used to transmit signal up to 100 meters. It is good for short distance, battery power device development. These wireless transmitters work with 433 MHz receivers. They are breadboard friendly and also work great with microcontrollers to create a very simple wireless data link.<\/p>\n<p><strong>Amplitude-Shift Keying<\/strong><\/p>\n<p>Amplitude-Shift Keying, or ASK, is a form of amplitude modulation that represents digital data as variations in the amplitude of a carrier wave. In an ASK system, a symbol, representing one or more bits, is sent by transmitting a fixed-amplitude carrier wave at a fixed frequency for a specific time duration. For example, if each symbol represents a single bit, then the carrier signal could be transmitted at nominal amplitude when the input value is 1, but transmitted at reduced amplitude or not at all when the input value is 0.<\/p>\n<p>These modules use a technique known as Amplitude Shift Keying to transmit digital data over the radio. In amplitude shift keying, the amplitude of the carrier wave, 433 MHz signal in our case, is modified in response to an incoming data signal.<\/p>\n<p><strong>DL2211Mk06<\/strong><\/p>\n<p>2 x Moteino R2 (RFM12B)<br \/>\n1 x Lithium Ion Battery &#8211; 1 Ah<br \/>\n1 x SparkFun FTDI Basic Breakout &#8211; 5V<br \/>\n1 x SparkFun Cerberus USB Cable<\/p>\n<p><strong>Moteino R2 (Send)<\/strong><\/p>\n<p>TR0 &#8211; Digital 2<br \/>\nLED &#8211; Digital 9<br \/>\nTR1 &#8211; Digital 10<br \/>\nTR2 &#8211; Digital 11<br \/>\nTR3 &#8211; Digital 12<br \/>\nTR4 &#8211; Digital 13<br \/>\nVIN &#8211; +3.3V<br \/>\nGND &#8211; GND<\/p>\n<p><strong>DL2211Mk06ps.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/* ***** Don Luc Electronics \u00a9 *****\r\nSoftware Version Information\r\nProject #26 - Radio Frequency - Moteino ASK - Mk03\r\n26-03\r\nSend\r\nDL2211Mk06ps.ino\r\n2 x Moteino R2 (RFM12B)\r\n1 x Lithium Ion Battery - 1Ah\r\n1 x SparkFun FTDI Basic Breakout - 5V\r\n1 x SparkFun Cerberus USB Cable\r\n*\/\r\n\r\n\/\/ Include the Library Code\r\n\/\/ RFM12B Radio\r\n#include &lt;RFM12B.h&gt;\r\n\/\/ Sleep\r\n#include &lt;avr\/sleep.h&gt;\r\n\r\n\/\/ You will need to initialize the radio by telling it what ID\r\n\/\/ it has and what network it&#039;s on\r\n\/\/ The NodeID takes values from 1-127, 0 is reserved for sending \r\n\/\/ broadcast messages (send to all nodes)\r\n\/\/ The Network ID takes values from 0-255\r\n\/\/ By default the SPI-SS line used is D10 on Atmega328. \r\n\/\/ You can change it by calling .SetCS(pin) where pin can be {8,9,10}\r\n\/\/ Network ID used for this unit\r\n#define NODEID        2\r\n\/\/ The network ID we are on\r\n#define NETWORKID    99\r\n\/\/ The node ID we&#039;re sending to\r\n#define GATEWAYID     1\r\n\/\/ # of ms to wait for an ack\r\n#define ACK_TIME     50\r\n\/\/ Serial\r\n#define SERIAL_BAUD  115200\r\n\r\n\/\/ Encryption is OPTIONAL\r\n\/\/ to enable encryption you will need to:\r\n\/\/ - provide a 16-byte encryption KEY (same on all nodes that talk encrypted)\r\n\/\/ - to call .Encrypt(KEY) to start encrypting\r\n\/\/ - to stop encrypting call .Encrypt(NULL)\r\nuint8_t KEY[] = &quot;ABCDABCDABCDABCD&quot;;\r\n\r\n\/\/ Wait this many ms between sending packets\r\nint interPacketDelay = 1000;\r\n\/\/ Input\r\nchar input = 0;\r\n\r\n\/\/ Need an instance of the RFM12B Radio Module\r\nRFM12B radio;\r\n\/\/ Send Size\r\nbyte sendSize = 0;\r\n\/\/ Payload\r\nchar payload[] = &quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890~!@#$%^&amp;*(){}[]`|&lt;&gt;?+=:;,.&quot;;\r\n\/\/ Request ACK\r\nbool requestACK = false;\r\n\r\n\/\/ LED\r\nint iLED = 9;\r\n\r\n\/\/ Software Version Information\r\nString sver = &quot;26-03&quot;;\r\n\r\nvoid loop()\r\n{\r\n\r\n  \/\/ is RFM12B Radio\r\n  isRFM12BRadio();\r\n\r\n  \/\/ Inter Packet Delay\r\n  delay(interPacketDelay);\r\n  \r\n}\r\n<\/pre>\n<p><strong>getRFM12BRadio.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ RFM12B Radio\r\nvoid isSetupRFM12BRadio(){\r\n\r\n  \/\/ RFM12B Radio\r\n  radio.Initialize(NODEID, RF12_433MHZ, NETWORKID);\r\n  \/\/ Encryption\r\n  radio.Encrypt(KEY);\r\n  \/\/ Sleep right away to save power\r\n  radio.Sleep();\r\n  \/\/ Transmitting\r\n  Serial.println(&quot;Transmitting...\\n\\n&quot;);\r\n  \r\n}\r\n\/\/ is RFM12 BRadio\r\nvoid isRFM12BRadio(){\r\n\r\n  \/\/ Serial input of [0-9] will change the transmit delay between 100-1000ms\r\n  if (Serial.available() &gt; 0)\r\n  {\r\n    \r\n    \/\/ Input\r\n    input = Serial.read();\r\n    \/\/ [1..9] = {100..900}ms; [0]=1000ms\r\n    if (input &gt;= 48 &amp;&amp; input &lt;= 57) \r\n    {\r\n      \r\n      \/\/ Inter Packet Delay\r\n      interPacketDelay = 100 * (input-48);\r\n      \r\n      if (interPacketDelay == 0) interPacketDelay = 1000;\r\n      \r\n      Serial.print(&quot;\\nChanging delay to &quot;);\r\n      Serial.print(interPacketDelay);\r\n      Serial.println(&quot;ms\\n&quot;);\r\n      \r\n    }\r\n    \r\n  }\r\n\r\n  \/\/ Serial\r\n  Serial.print(&quot;Sending[&quot;);\r\n  Serial.print(sendSize+1);\r\n  Serial.print(&quot;]:&quot;);\r\n  \r\n  for(byte i = 0; i &lt; sendSize+1; i++)\r\n    Serial.print((char)payload[i]);\r\n  \r\n  \/\/ Request ACK every 3rd xmission\r\n  requestACK = !(sendSize % 3); \r\n  \r\n  \/\/ Wakeup\r\n  radio.Wakeup();\r\n  \r\n  \/\/ Turn the LED on HIGH\r\n  digitalWrite( iLED , HIGH);\r\n  \r\n  \/\/ Send\r\n  radio.Send(GATEWAYID, payload, sendSize+1, requestACK);\r\n\r\n  \/\/ Request ACK\r\n  if (requestACK)\r\n  {\r\n    \r\n    Serial.print(&quot; - waiting for ACK...&quot;);\r\n    if (waitForAck()) Serial.print(&quot;ok!&quot;);\r\n    else Serial.print(&quot;nothing...&quot;);\r\n    \r\n  }\r\n\r\n  \/\/ Turn the LED on LOW\r\n  digitalWrite( iLED , LOW);\r\n\r\n  \/\/ Sleep\r\n  radio.Sleep();\r\n  \r\n  \/\/ Send Size\r\n  sendSize = (sendSize + 1) % 88;\r\n  \r\n  \/\/ Serial\r\n  Serial.println();\r\n  \r\n}\r\n\/\/ Wait a few milliseconds for proper ACK, return true if received\r\nstatic bool waitForAck(){\r\n  \r\n  \/\/ Now\r\n  long now = millis();\r\n\r\n  \/\/ ACK\r\n  while (millis() - now &lt;= ACK_TIME){\r\n    \r\n\r\n    if (radio.ACKReceived(GATEWAYID)){\r\n      \r\n      return true;\r\n\r\n    }\r\n\r\n  }\r\n  \r\n  return false;\r\n  \r\n}\r\n<\/pre>\n<p><strong>setup.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ Setup\r\nvoid setup(){\r\n\r\n  \/\/ Serial\r\n  Serial.begin(SERIAL_BAUD);\r\n\r\n  \/\/ LED\r\n  pinMode( iLED , OUTPUT);\r\n\r\n  \/\/ RFM12B Radio\r\n  isSetupRFM12BRadio();\r\n\r\n}\r\n<\/pre>\n<p>&#8212;&#8212;<\/p>\n<p><strong>Moteino R2 (Receive)<\/strong><\/p>\n<p>TR0 &#8211; Digital 2<br \/>\nLED &#8211; Digital 9<br \/>\nTR1 &#8211; Digital 10<br \/>\nTR2 &#8211; Digital 11<br \/>\nTR3 &#8211; Digital 12<br \/>\nTR4 &#8211; Digital 13<br \/>\nVIN &#8211; +3.3V<br \/>\nGND &#8211; GND<\/p>\n<p><strong>DL2211Mk06pr.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/* ***** Don Luc Electronics \u00a9 *****\r\nSoftware Version Information\r\nProject #26 - Radio Frequency - Moteino ASK - Mk03\r\n26-03\r\nReceive\r\nDL2211Mk06pr.ino\r\n2 x Moteino R2 (RFM12B)\r\n1 x Lithium Ion Battery - 1Ah\r\n1 x SparkFun FTDI Basic Breakout - 5V\r\n1 x SparkFun Cerberus USB Cable\r\n*\/\r\n\r\n\/\/ Include the Library Code\r\n\/\/ RFM12B Radio\r\n#include &lt;RFM12B.h&gt;\r\n\r\n\/\/ You will need to initialize the radio by telling it what ID\r\n\/\/ it has and what network it&#039;s on\r\n\/\/ The NodeID takes values from 1-127, 0 is reserved for sending \r\n\/\/ broadcast messages (send to all nodes)\r\n\/\/ The Network ID takes values from 0-255\r\n\/\/ By default the SPI-SS line used is D10 on Atmega328. \r\n\/\/ You can change it by calling .SetCS(pin) where pin can be {8,9,10}\r\n\/\/ Network ID used for this unit\r\n#define NODEID        1\r\n\/\/ The network ID we are on\r\n#define NETWORKID    99\r\n\/\/ Serial\r\n#define SERIAL_BAUD  115200\r\n\r\n\/\/ Encryption is OPTIONAL\r\n\/\/ to enable encryption you will need to:\r\n\/\/ - provide a 16-byte encryption KEY (same on all nodes that talk encrypted)\r\n\/\/ - to call .Encrypt(KEY) to start encrypting\r\n\/\/ - to stop encrypting call .Encrypt(NULL)\r\nuint8_t KEY[] = &quot;ABCDABCDABCDABCD&quot;;\r\n\r\n\/\/ Need an instance of the RFM12B Radio Module\r\nRFM12B radio;\r\n\r\n\/\/ LED\r\nint iLED = 9;\r\n\r\n\/\/ Software Version Information\r\nString sver = &quot;26-03&quot;;\r\n\r\nvoid loop() {\r\n\r\n  \/\/ is RFM12B Radio\r\n  isRFM12BRadio();\r\n\r\n}\r\n<\/pre>\n<p><strong>getRFM12BRadio.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ RFM12B Radio\r\nvoid isSetupRFM12BRadio()\r\n{\r\n\r\n  \/\/ RFM12B Radio\r\n  radio.Initialize(NODEID, RF12_433MHZ, NETWORKID);\r\n  \/\/ Encryption\r\n  radio.Encrypt(KEY);\r\n  \/\/ Transmitting\r\n  Serial.println(&quot;Listening...&quot;);\r\n  \r\n}\r\n\/\/ is RFM12 BRadio\r\nvoid isRFM12BRadio()\r\n{\r\n\r\n  \/\/ Receive\r\n  if (radio.ReceiveComplete())\r\n  {\r\n    \r\n    \/\/ CRC Pass\r\n    if (radio.CRCPass())\r\n    {\r\n      \r\n      \/\/ Serial\r\n      Serial.print(&#039;[&#039;);\r\n      Serial.print(radio.GetSender());\r\n      Serial.print(&quot;] &quot;);\r\n      \/\/ Can also use radio.GetDataLen() if you don&#039;t like pointers\r\n      for (byte i = 0; i &lt; *radio.DataLen; i++)\r\n      {\r\n        \r\n        Serial.print((char)radio.Data[i]);\r\n        \r\n      }\r\n\r\n      \/\/ Turn the LED on HIGH\r\n      digitalWrite( iLED , HIGH);\r\n  \r\n      \/\/ ACK Requested\r\n      if (radio.ACKRequested())\r\n      {\r\n        \r\n        \/\/ Send ACK\r\n        radio.SendACK();\r\n        Serial.print(&quot; - ACK Sent&quot;);\r\n        \r\n      }\r\n\r\n      \/\/ Turn the LED on LOW\r\n      digitalWrite( iLED , LOW);\r\n    \r\n    }\r\n    else\r\n    {\r\n      \r\n      \/\/ BAD-CRC\r\n      Serial.print(&quot;BAD-CRC&quot;);\r\n\r\n    }\r\n\r\n    \/\/ Serial\r\n    Serial.println();\r\n\r\n  } \r\n  \r\n}\r\n<\/pre>\n<p><strong>setup.ino<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"arduino\" data-enlighter-title=\"\">\r\n\/\/ Setup\r\nvoid setup()\r\n{\r\n\r\n  \/\/ Serial\r\n  Serial.begin(SERIAL_BAUD);\r\n\r\n  \/\/ LED\r\n  pinMode( iLED , OUTPUT);\r\n\r\n  \/\/ RFM12B Radio\r\n  isSetupRFM12BRadio();\r\n\r\n}\r\n<\/pre>\n<p>&#8212;&#8212;<\/p>\n<p><strong>People can contact us:<\/strong> https:\/\/www.donluc.com\/?page_id=1927<\/p>\n<p><strong>Technology Experience<\/strong><\/p>\n<ul>\n<li>Single-Board Microcontrollers (PIC, Arduino, Raspberry Pi,Espressif, etc&#8230;)<\/li>\n<li>IoT<\/li>\n<li>Wireless (Radio Frequency, Bluetooth, WiFi, Etc&#8230;)<\/li>\n<li>Robotics<\/li>\n<li>Camera and Video Capture Receiver Stationary, Wheel\/Tank and Underwater Vehicle<\/li>\n<li>Unmanned Vehicles Terrestrial and Marine<\/li>\n<li>Machine Learning<\/li>\n<li>RTOS<\/li>\n<li>Research &#038; Development (R &#038; D)<\/li>\n<\/ul>\n<p><strong>Instructor, E-Mentor, STEAM, and Arts-Based Training<\/strong><\/p>\n<ul>\n<li>IoT<\/li>\n<li>PIC Microcontrollers<\/li>\n<li>Arduino<\/li>\n<li>Raspberry Pi<\/li>\n<li>Espressif<\/li>\n<li>Robotics<\/li>\n<\/ul>\n<p><strong>Follow Us<\/strong><\/p>\n<p><strong>Luc Paquin \u2013 Curriculum Vitae &#8211; 2023<\/strong><br \/>\nhttps:\/\/www.donluc.com\/luc\/<\/p>\n<p><strong>Web:<\/strong> https:\/\/www.donluc.com\/<br \/>\n<strong>Facebook:<\/strong> https:\/\/www.facebook.com\/neosteam.labs.9\/<br \/>\n<strong>YouTube:<\/strong> https:\/\/www.youtube.com\/channel\/UC5eRjrGn1CqkkGfZy0jxEdA<br \/>\n<strong>Twitter:<\/strong> https:\/\/twitter.com\/labs_steam<br \/>\n<strong>Pinterest:<\/strong> https:\/\/www.pinterest.com\/NeoSteamLabs\/<br \/>\n<strong>Instagram:<\/strong> https:\/\/www.instagram.com\/neosteamlabs\/<\/p>\n<p><strong>Don Luc<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8212;&#8212; #DonLucElectronics #DonLuc #RadioFrequency #Moteino #Send #Receive #ASK #Arduino #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant &#8212;&#8212; &#8212;&#8212; &#8212;&#8212; &#8212;&#8212; Send and Receive These RF Transmitter Modules are very small in dimension and have a wide operating voltage range. The low cost RF Transmitter can be used to transmit signal up to 100 meters. It is &#8230; <a title=\"Project #26 &#8211; Radio Frequency &#8211; Moteino ASK &#8211; Mk03\" class=\"read-more\" href=\"https:\/\/www.donluc.com\/?p=3323\" aria-label=\"Read more about Project #26 &#8211; Radio Frequency &#8211; Moteino ASK &#8211; Mk03\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[247,50,49,38,59,5,261,58,10],"tags":[6,102,4,19,85,24,263,266,9,27,264,33,34],"class_list":["post-3323","post","type-post","status-publish","format-standard","hentry","category-radio-frequency","category-arduino","category-consultant","category-digitalelectronics","category-fritzing","category-microcontrollers","category-moteino","category-arduino-programming","category-projects","tag-arduino","tag-components","tag-consultant","tag-electronics","tag-fritzing","tag-microcontroller","tag-moteino","tag-moteino-ask","tag-programming","tag-projects-2","tag-radio-frequency","tag-technology","tag-video-blog"],"_links":{"self":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/3323","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3323"}],"version-history":[{"count":2,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/3323\/revisions"}],"predecessor-version":[{"id":4875,"href":"https:\/\/www.donluc.com\/index.php?rest_route=\/wp\/v2\/posts\/3323\/revisions\/4875"}],"wp:attachment":[{"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3323"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.donluc.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}