[{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n        \u003cp\u003eWe're close to publicly releasing UART support for Adafruit.io and WipperSnapper. This would enable a device running WipperSnapper to initialize a physically connected UART device, such as the \u003ca href=\"https://www.adafruit.com/product/3686\"\u003ePM2.5 Air Quality Sensor and Breadboard Adapter Kit - PMS5003\u003c/a\u003e, and send its data to Adafruit.io. As always with WipperSnapper firmware, this is all performed without requiring a user to write code.\u003c/p\u003e\n\u003cp\u003eBelow is a sneak peek of the following, but how did we get to this result over the course of a month? What went into adding a feature to Adafruit.io and WipperSnapper Firmware? \u003c/p\u003e\n      \n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/000/173/original/uarttest.png?1694791384","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n  \n  \n        \u003ch2\u003eProtocol Buffers: How WipperSnapper and Adafruit IO Communicate\u003c/h2\u003e\n\u003cp\u003eWhen we developed WipperSnapper, we employed Protocol Buffers (Google's open-source data interchange format) to send data between a Device and Adafruit IO.\u003c/p\u003e\n\u003cp\u003eWhat are Protocol Buffers? (\u003ca href=\"https://protobuf.dev/#what-are-protocol-buffers\"\u003evia protobuf.dev\u003c/a\u003e)\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cspan\u003eProtocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003cspan\u003eThe core of this communication revolves around the Adafruit IO website, specifically the component picker form. When you select a UART component on Adafruit.io, it will look something like this:\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003c/p\u003e\n      \n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/000/174/original/uart_component.png?1694791974","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n  \n        \u003cp\u003eThis form enables you to select which specific air quality measurements you'd like the device to send to Adafruit.io and how often. But, where are the protocol buffers?!\u003c/p\u003e\n\u003cp\u003eThe communication occurs when you click that blue \u003cstrong\u003eCreate Component\u003c/strong\u003e button. Specifically, a message within \u003ca href=\"https://github.com/adafruit/Wippersnapper_Protobuf/blob/2d175a04892a19c84655a3f42fc4d21578d9bd91/proto/wippersnapper/uart/v1/uart.proto\"\u003euart.proto\u003c/a\u003e, \u003ca href=\"https://github.com/adafruit/Wippersnapper_Protobuf/blob/2d175a04892a19c84655a3f42fc4d21578d9bd91/proto/wippersnapper/uart/v1/uart.proto#L24\"\u003eUARTDeviceAttachRequest\u003c/a\u003e, is sent from Adafruit.io to a device. This communication occurs over MQTT and the protobuf data is considered to be the MQTT payload. The full sequence diagram of what happens when you click \"Create Component\" looks like this:\u003c/p\u003e\n      \n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/000/175/original/uart.png?1694792251","metadata":{"caption":""}},{"element_type":"text","content":"\n        \u003ch2\u003eWhat happens in WipperSnapper Firmware?\u003c/h2\u003e\n\u003cp\u003eMore coming soon..\u003c/p\u003e\n      ","metadata":{}}]