{"id":446,"date":"2021-09-24T17:40:15","date_gmt":"2021-09-24T15:40:15","guid":{"rendered":"https:\/\/thegreydiamond.de\/blog\/?p=446"},"modified":"2022-10-11T22:51:14","modified_gmt":"2022-10-11T20:51:14","slug":"sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w","status":"publish","type":"post","link":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/","title":{"rendered":"Sending, Receiving and verifying messages sent over LoRa using RFM95W"},"content":{"rendered":"\n<p>In this blog post, I will be using an RFM95W LoRa chip together with an ESP8266\/ESP32 to transmit (receive\/send) data and check if this data is complete.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preperations<\/h2>\n\n\n\n<p>My first course of action was to get two ESPs ready to send\/receive data via LoRa. If you have trouble or are looking for a dedicated tutorial have a look at these posts for the <a href=\"https:\/\/thegreydiamond.de\/blog\/2021\/09\/21\/getting-started-with-rfm95w-lora-and-esp32\/\" target=\"_blank\" rel=\"noreferrer noopener\">ESP32<\/a> and <a href=\"https:\/\/thegreydiamond.de\/blog\/2021\/09\/23\/getting-started-with-rfm95w-lora-and-esp8266\/\" target=\"_blank\" rel=\"noreferrer noopener\">ESP8266.<\/a> I have decided that my ESP8266 will send data and my ESP32 receive this data.<\/p>\n\n\n\n<p>As a simple first test, I used the provided example sketches. This worked pretty well, I received my packets on the ESP32. After looking at it for a while I found a problem: RF has (like everything else) the problem of packet corruption, it doesn&#8217;t happen very often but when it does, it gets annoying.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Problem<\/h2>\n\n\n\n<p>Our main problem is data corruption, my goal for this is to detect data corruption and ignore the received message. Let&#8217;s take an example: You have a simple LoRa node connected to a motion sensor, we send a data packet containing the battery state and the motion sensor&#8217;s state, like so:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">0;1<\/code><\/pre>\n\n\n\n<p>The zero being the motion state (0, meaning false \/ no motion), and the 1 being the battery health (1, meaning true \/ healthy). Now let&#8217;s imagine there is a packet corruption and the first part (<code>0;<\/code>) gets removed, now our first item is a 1. If the receiver doesn&#8217;t notice the broken package, it might be that a false alarm gets triggered. After all the first bit, so motion, was true. This is the reason we need to check if a package is actually healthy. <\/p>\n\n\n\n<p>My idea was to send the data and append some kind of hash to it. I will be using a sha1 hash for this, as ESPs can calculate this hash pretty easily, even though it&#8217;s a little overkill for this application. My new package will now look like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">Actual data here;hash\nHello 4;a94a8fe5ccb19ba61c4c0873d391e987982fbbd3<\/code><\/pre>\n\n\n\n<p>Okay, after making the theory clear let&#8217;s implement it!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The implementation<\/h2>\n\n\n\n<p>Starting with my sending code, it looks like this:<\/p>\n\n\n\n<div class=\"wp-block-uagb-inline-notice uagb-inline_notice__align-left uagb-block-9d43ff6d uagb-inline_notice__outer-wrap\"><h4 class=\"uagb-notice-title\"><strong>Use the right frequencies for your region<\/strong><\/h4><div class=\"uagb-notice-text\"><p>If you adapt this code please check if you use the right frequency. Different regions use different frequencies for LoRa. Please check your local guidelines. Europe uses 868MHz (868E6). Update your LoRa.begin line! <a href=\"https:\/\/www.thethingsnetwork.org\/docs\/lorawan\/frequencies-by-country\/\" target=\"_blank\" rel=\"noreferrer noopener\">Here is a useful table by TTN.<\/a><\/p><\/div><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">#include &lt;SPI.h&gt;\n#include &lt;LoRa.h&gt;\n#include \"Hash.h\"\n\nint counter = 0;\n\/\/ - Pin configs - ESP32 -\n\/\/ #define ss 5\n\/\/ #define rst 14\n\/\/ #define dio0 2\n\n\/\/ - Pin configs - ESP8266 -\n#define ss 4    \/\/ D2\n#define rst  5 \/\/ D1\n#define dio0 -1 \/\/ Disabled\n\n\n\nvoid setup() {\n  Serial.begin(115200);\n  while (!Serial);\n  delay(1000);\n\n  Serial.println(\"LoRa Sender\");\n  \/\/ Setup LoRa transceiver module\n  LoRa.setPins(ss, rst, dio0);\n  if (!LoRa.begin(868E6)) {\n    Serial.println(\"Starting LoRa failed!\");\n    delay(5000);\n    Serial.println(\"Now waiting for Watchdog to restart\");\n    while (1);\n  }else{\n    Serial.println(\"Starting LoRa successful\");\n    }\n  \n}\n\n\/\/ Sends a string every 5000ms (5 seconds)\nvoid loop() {\n  Serial.print(\"Sending packet: \");\n  Serial.println(counter);\n\n  \/\/ send packet\n  LoRa.beginPacket();\n  String result = sha1(\"hello \" + String(counter)); \/\/ Creating the hash value for our string\n  LoRa.print(\"hello \");\n  LoRa.print(counter);\n  LoRa.print(\";\");\n  LoRa.print(result);\n  LoRa.endPacket();\n\n  counter++;\n\n  delay(5000);\n}<\/code><\/pre>\n\n\n\n<p>This will send our packets with the hash appended. For the next bit, we will need to receive the message and check if the supplied hash is correct.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">#include &lt;SPI.h&gt;\n#include &lt;LoRa.h&gt;\n#include &lt;Hash.h&gt;\n\/\/ - Pin configs - ESP32 -\n#define ss 5\n#define rst 14\n#define dio0 2\n\n\/\/ - Pin configs - ESP8266 -\n\/\/ #define ss 4    \/\/ D2\n\/\/ #define rst  5 \/\/ D1\n\/\/ #define dio0 -1 \/\/ Disabled\n\n\/\/ Taken from https:\/\/forum.arduino.cc\/t\/arduino-split-funktion-eines-strings\/595753\nString split(String s, char parser, int index) {\n  String rs = \"\";\n  int parserIndex = index;\n  int parserCnt = 0;\n  int rFromIndex = 0, rToIndex = -1;\n  while (index &gt;= parserCnt) {\n    rFromIndex = rToIndex + 1;\n    rToIndex = s.indexOf(parser, rFromIndex);\n    if (index == parserCnt) {\n      if (rToIndex == 0 || rToIndex == -1) return \"\";\n      return s.substring(rFromIndex, rToIndex);\n    } else parserCnt++;\n  }\n  return rs;\n}\n\nvoid setup() {\n  Serial.begin(115200);\n  while (!Serial);\n\n  Serial.println(\"LoRa Receiver\");\n  LoRa.setPins(ss, rst, dio0);\nif (!LoRa.begin(868E6)) {\n    Serial.println(\"Starting LoRa failed!\");\n    delay(5000);\n    Serial.println(\"Now waiting for Watchdog to restart\");\n    while (1);\n  }else{\n    Serial.println(\"Starting LoRa successful\");\n    }\n}\n\nvoid loop() {\n  \/\/ try to parse packet\n  int packetSize = LoRa.parsePacket();\n  if (packetSize) {\n    \/\/ received a packet\n    Serial.print(\"Received packet '\");\n\n    \/\/ Create a string of the incoming message\n    String message = \"\";\n    while (LoRa.available()) {\n      message += (char)LoRa.read();\n    }\n    Serial.print(message);\n \n    String result = sha1(split(message, ';', 0)); \/\/ Take the first element, the raw message and hashing it\n    String tempy = message;\n    tempy.replace(split(message, ';', 0) + \";\", \"\"); \/\/ Now replace the message so only the hash is left\n    if (result == tempy) { \/\/ Is the hash the same?\n      Serial.print(\" Hash ok \");\n    } else {\n      Serial.print(\" Hash fail, expectd hash \");\n      Serial.print(tempy);\n      Serial.print(\" \"); \n      Serial.print(split(message, ';', 1)); \n      Serial.print(\" \"); \n    }\n\n    \/\/ print RSSI of packet\n    Serial.print(\"' with RSSI \");\n    Serial.println(LoRa.packetRssi());\n  }\n}<\/code><\/pre>\n\n\n\n<div class=\"wp-block-uagb-inline-notice uagb-inline_notice__align-left uagb-block-93b5f0cb uagb-inline_notice__outer-wrap\"><h4 class=\"uagb-notice-title\">Using the hash library on ESP32<\/h4><div class=\"uagb-notice-text\"><p>For some reason, the ESP32 does not implement the same hash functions as the ESP8266. Therefore I used <a href=\"https:\/\/github.com\/bbx10\/Hash_tng\" target=\"_blank\" rel=\"noreferrer noopener\">this third party library<\/a> to get the same functinality.<\/p><\/div><\/div>\n\n\n\n<p>After running the code for a while I got this output on my receiver serial console. It worked! Sadly it&#8217;s pretty hard to break a package on purpose, but I checked it and this code works, however, I sadly don&#8217;t have a screenshot of a broken transmission.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img decoding=\"async\" src=\"https:\/\/cdn.thegreydiamond.de\/img\/2021\/09\/24\/2021-09-24_17-28-06-81602345-5288-4c57-9fb8-e407697ac6c9.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>This concludes my little experiment\/project here, I have achieved my goal to detect broken transmissions and that&#8217;s it! I hoped this helped someone on their way.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today, I will be using an RFM95W LoRa chip together with an ESP8266\/ESP32 to transmit data and check if this data is complete using a SHA1 hash.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[1],"tags":[4,5,68,6,7,67,77,69,70,8],"class_list":["post-446","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-arduino","tag-diy","tag-esp32","tag-esp8266","tag-iot","tag-lora","tag-lorawan","tag-rfm95","tag-rfm95w","tag-smarthome","post-preview"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Sending, Receiving and verifying messages sent over LoRa using RFM95W &#8211; Thegreydiamond<\/title>\n<meta name=\"description\" content=\"t, I will be using an RFM95W LoRa chip together with an ESP8266\/ESP32 to transmit data and check if this data is complete using a SHA1 hash.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sending, Receiving and verifying messages sent over LoRa using RFM95W &#8211; Thegreydiamond\" \/>\n<meta property=\"og:description\" content=\"t, I will be using an RFM95W LoRa chip together with an ESP8266\/ESP32 to transmit data and check if this data is complete using a SHA1 hash.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/\" \/>\n<meta property=\"og:site_name\" content=\"Thegreydiamond\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-24T15:40:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-10-11T20:51:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.thegreydiamond.de\/img\/2021\/09\/24\/2021-09-24_17-28-06-81602345-5288-4c57-9fb8-e407697ac6c9.png\" \/>\n<meta name=\"author\" content=\"TheGreydiamond\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"t, I will be using an RFM95W LoRa chip together with an ESP8266\/ESP32 to transmit data and check if this data is complete using a SHA1 hash.\" \/>\n<meta name=\"twitter:creator\" content=\"@thegreydiamond2\" \/>\n<meta name=\"twitter:site\" content=\"@thegreydiamond2\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"TheGreydiamond\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2021\\\/09\\\/24\\\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2021\\\/09\\\/24\\\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\\\/\"},\"author\":{\"name\":\"TheGreydiamond\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#\\\/schema\\\/person\\\/a7ba7a2ca50e4001f3f8f852c079910d\"},\"headline\":\"Sending, Receiving and verifying messages sent over LoRa using RFM95W\",\"datePublished\":\"2021-09-24T15:40:15+00:00\",\"dateModified\":\"2022-10-11T20:51:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2021\\\/09\\\/24\\\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\\\/\"},\"wordCount\":545,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2021\\\/09\\\/24\\\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cdn.thegreydiamond.de\\\/img\\\/2021\\\/09\\\/24\\\/2021-09-24_17-28-06-81602345-5288-4c57-9fb8-e407697ac6c9.png\",\"keywords\":[\"arduino\",\"DIY\",\"esp32\",\"esp8266\",\"iot\",\"lora\",\"LoRaWAN\",\"rfm95\",\"rfm95w\",\"smarthome\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2021\\\/09\\\/24\\\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2021\\\/09\\\/24\\\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\\\/\",\"url\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2021\\\/09\\\/24\\\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\\\/\",\"name\":\"Sending, Receiving and verifying messages sent over LoRa using RFM95W &#8211; Thegreydiamond\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2021\\\/09\\\/24\\\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2021\\\/09\\\/24\\\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cdn.thegreydiamond.de\\\/img\\\/2021\\\/09\\\/24\\\/2021-09-24_17-28-06-81602345-5288-4c57-9fb8-e407697ac6c9.png\",\"datePublished\":\"2021-09-24T15:40:15+00:00\",\"dateModified\":\"2022-10-11T20:51:14+00:00\",\"description\":\"t, I will be using an RFM95W LoRa chip together with an ESP8266\\\/ESP32 to transmit data and check if this data is complete using a SHA1 hash.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2021\\\/09\\\/24\\\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2021\\\/09\\\/24\\\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2021\\\/09\\\/24\\\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\\\/#primaryimage\",\"url\":\"https:\\\/\\\/cdn.thegreydiamond.de\\\/img\\\/2021\\\/09\\\/24\\\/2021-09-24_17-28-06-81602345-5288-4c57-9fb8-e407697ac6c9.png\",\"contentUrl\":\"https:\\\/\\\/cdn.thegreydiamond.de\\\/img\\\/2021\\\/09\\\/24\\\/2021-09-24_17-28-06-81602345-5288-4c57-9fb8-e407697ac6c9.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2021\\\/09\\\/24\\\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sending, Receiving and verifying messages sent over LoRa using RFM95W\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/\",\"name\":\"Thegreydiamond\",\"description\":\"TheGreydiamonds Blog\",\"publisher\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#organization\",\"name\":\"TheGreydiamond\",\"url\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/09\\\/logoVersuch2.png\",\"contentUrl\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/09\\\/logoVersuch2.png\",\"width\":1000,\"height\":1000,\"caption\":\"TheGreydiamond\"},\"image\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/thegreydiamond2\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#\\\/schema\\\/person\\\/a7ba7a2ca50e4001f3f8f852c079910d\",\"name\":\"TheGreydiamond\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/55ee91221a0c102f9e4fa464a2edf06cc82724dc4f1299c99818b23e45801a75?s=96&d=mm&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/55ee91221a0c102f9e4fa464a2edf06cc82724dc4f1299c99818b23e45801a75?s=96&d=mm&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/55ee91221a0c102f9e4fa464a2edf06cc82724dc4f1299c99818b23e45801a75?s=96&d=mm&r=pg\",\"caption\":\"TheGreydiamond\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Sending, Receiving and verifying messages sent over LoRa using RFM95W &#8211; Thegreydiamond","description":"t, I will be using an RFM95W LoRa chip together with an ESP8266\/ESP32 to transmit data and check if this data is complete using a SHA1 hash.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/","og_locale":"en_US","og_type":"article","og_title":"Sending, Receiving and verifying messages sent over LoRa using RFM95W &#8211; Thegreydiamond","og_description":"t, I will be using an RFM95W LoRa chip together with an ESP8266\/ESP32 to transmit data and check if this data is complete using a SHA1 hash.","og_url":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/","og_site_name":"Thegreydiamond","article_published_time":"2021-09-24T15:40:15+00:00","article_modified_time":"2022-10-11T20:51:14+00:00","og_image":[{"url":"https:\/\/cdn.thegreydiamond.de\/img\/2021\/09\/24\/2021-09-24_17-28-06-81602345-5288-4c57-9fb8-e407697ac6c9.png","type":"","width":"","height":""}],"author":"TheGreydiamond","twitter_card":"summary_large_image","twitter_description":"t, I will be using an RFM95W LoRa chip together with an ESP8266\/ESP32 to transmit data and check if this data is complete using a SHA1 hash.","twitter_creator":"@thegreydiamond2","twitter_site":"@thegreydiamond2","twitter_misc":{"Written by":"TheGreydiamond","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/#article","isPartOf":{"@id":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/"},"author":{"name":"TheGreydiamond","@id":"https:\/\/thegreydiamond.de\/blog\/#\/schema\/person\/a7ba7a2ca50e4001f3f8f852c079910d"},"headline":"Sending, Receiving and verifying messages sent over LoRa using RFM95W","datePublished":"2021-09-24T15:40:15+00:00","dateModified":"2022-10-11T20:51:14+00:00","mainEntityOfPage":{"@id":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/"},"wordCount":545,"commentCount":0,"publisher":{"@id":"https:\/\/thegreydiamond.de\/blog\/#organization"},"image":{"@id":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.thegreydiamond.de\/img\/2021\/09\/24\/2021-09-24_17-28-06-81602345-5288-4c57-9fb8-e407697ac6c9.png","keywords":["arduino","DIY","esp32","esp8266","iot","lora","LoRaWAN","rfm95","rfm95w","smarthome"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/","url":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/","name":"Sending, Receiving and verifying messages sent over LoRa using RFM95W &#8211; Thegreydiamond","isPartOf":{"@id":"https:\/\/thegreydiamond.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/#primaryimage"},"image":{"@id":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.thegreydiamond.de\/img\/2021\/09\/24\/2021-09-24_17-28-06-81602345-5288-4c57-9fb8-e407697ac6c9.png","datePublished":"2021-09-24T15:40:15+00:00","dateModified":"2022-10-11T20:51:14+00:00","description":"t, I will be using an RFM95W LoRa chip together with an ESP8266\/ESP32 to transmit data and check if this data is complete using a SHA1 hash.","breadcrumb":{"@id":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/#primaryimage","url":"https:\/\/cdn.thegreydiamond.de\/img\/2021\/09\/24\/2021-09-24_17-28-06-81602345-5288-4c57-9fb8-e407697ac6c9.png","contentUrl":"https:\/\/cdn.thegreydiamond.de\/img\/2021\/09\/24\/2021-09-24_17-28-06-81602345-5288-4c57-9fb8-e407697ac6c9.png"},{"@type":"BreadcrumbList","@id":"https:\/\/thegreydiamond.de\/blog\/2021\/09\/24\/sending-receiving-and-verifying-messages-sent-over-lora-using-rfm95w\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thegreydiamond.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Sending, Receiving and verifying messages sent over LoRa using RFM95W"}]},{"@type":"WebSite","@id":"https:\/\/thegreydiamond.de\/blog\/#website","url":"https:\/\/thegreydiamond.de\/blog\/","name":"Thegreydiamond","description":"TheGreydiamonds Blog","publisher":{"@id":"https:\/\/thegreydiamond.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thegreydiamond.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/thegreydiamond.de\/blog\/#organization","name":"TheGreydiamond","url":"https:\/\/thegreydiamond.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/thegreydiamond.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2021\/09\/logoVersuch2.png","contentUrl":"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2021\/09\/logoVersuch2.png","width":1000,"height":1000,"caption":"TheGreydiamond"},"image":{"@id":"https:\/\/thegreydiamond.de\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/thegreydiamond2"]},{"@type":"Person","@id":"https:\/\/thegreydiamond.de\/blog\/#\/schema\/person\/a7ba7a2ca50e4001f3f8f852c079910d","name":"TheGreydiamond","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/55ee91221a0c102f9e4fa464a2edf06cc82724dc4f1299c99818b23e45801a75?s=96&d=mm&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/55ee91221a0c102f9e4fa464a2edf06cc82724dc4f1299c99818b23e45801a75?s=96&d=mm&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/55ee91221a0c102f9e4fa464a2edf06cc82724dc4f1299c99818b23e45801a75?s=96&d=mm&r=pg","caption":"TheGreydiamond"}}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"post-image":false},"uagb_author_info":{"display_name":"TheGreydiamond","author_link":"https:\/\/thegreydiamond.de\/blog\/author\/thegreydiamond\/"},"uagb_comment_info":3,"uagb_excerpt":"Today, I will be using an RFM95W LoRa chip together with an ESP8266\/ESP32 to transmit data and check if this data is complete using a SHA1 hash.","_links":{"self":[{"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/posts\/446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/comments?post=446"}],"version-history":[{"count":0,"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/posts\/446\/revisions"}],"wp:attachment":[{"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/media?parent=446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/categories?post=446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/tags?post=446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}