- A Mind for Numbers
- Accelerate
- Agile Project Management for Dummies
- Algorithms to Live By
- Atomic Habits
- AWS Certified Cloud Practitioner Study Guide
- Banking on It
- Brexitland
- Build Your Dream Network
- Bulletproof SSL and TLS
- Business Analysis
- Collapse
- CompTIA Security+ Practice Tests
- CompTIA Security+ Study Guide
- Corporate Rebels
- Countdown to Zero Day
- Creative Acts for Curious People
- Creative DIY Microcontroller Projects with TinyGo...
- Cryptanalysis
- Crypto Trader
- Cryptography
- Culture Code
- Daniel Goleman Omnibus
- Deep and deliberate delegation
- Dhl
- Drive
- Effective Python
- Every Tool's a Hammer
- Exam Ref AZ-900 Microsoft Azure Fundamentals
- Expert Scripting and Automation for SQL Server...
- Fifty Quick Ideas to Improve Your User Stories
- Fixing Your Scrum
- Fundamentals of ServiceNow Administration and...
- Future Leader
- Future of Violence - Robots and Germs, Hackers and...
- GCHQ Puzzle Book
- Getting Things Done
- Harvard Business Review manager's handbook
- Hooked
- How Google Works
- How to Take Smart Notes
- How to Win Friends and Influence People
- HTML and CSS
- I Think, Therefore I Am
- Itsm Value Streams : Transform Opportun
- JavaScript and jQuery
- Kill It with Fire
- Leaders Eat Last
- Leading change
- Leading Without Authority
- Lean Thinking
- LONDON'S UNDERGROUND.
- Managing Successful Projects Prince2
- Managing Successful Projects with PRINCE2
- Measure What Matters : OKRs
- Meteorology today
- Mindf*ck
- Modern Cryptanalysis
- Modernist cuisine at home
- Money Revolution
- Never Split the Difference
- New One Minute Manager
- Open Circuits
- Oversubscribed
- Permanent Record
- PHP 5 advanced
- Practical Docker with Python: Build, Release and...
- Practical electronics for inventors
- PRINCE2 for dummies
- Pro Python 3: Features and Tools for Professional...
- Pro SQL Server Always On Availability Groups
- Pro SQL Server on Linux: Including Container-Based...
- Professional Scrum Master Guide
- Project to Product
- Radical Simplicity
- Rules of People
- SAFe 5.0 Distilled
- Sapiens
- SEARCH INSIDE YOURSELF- TPB
- Secret Barrister
- Securing SQL Server: DBAs Defending the Database
- Site Reliability Engineering
- SQL Server 2017 Administration Inside Out
- Start with Why
- System Center Configuration Manager Current Branch...
- T-SQL Fundamentals
- Teach Yourself Electricity and Electronics,...
- Teach Yourself Setting Up a Small Business (Teach...
- Team Topologies
- The Art of Deception
- The art of invisibility
- The Chimp Paradox How Our Impulses And Emotions...
- The coaching habit
- The code book
- The Courage To Be Disliked
- The DevOps handbook
- The Epic Guide to Agile
- The Five Dysfunctions of a Team: A Leadership...
- The Go Programming Language
- The Golden Ratio
- The Introvert's Guide to the Workplace
- The Manager's Path
- The New Silk Roads: The Present and Future of the...
- The outward mindset
- The Phoenix Project
- The Professional Product Owner
- The Unicorn Project
- Turn The Ship Around!
- Visual Thinking
- Weapons of Math Destruction
- Who Moved My Cheese?
- Work Rules!
- Working Out Loud
- Writing An Interpreter In Go
- Wrong Fit, Right Fit
Thinking inside the box – Introducing ChIoT
For a while now, I’ve been working on an Internet of Things (IoT) project that brings multiple ideas and learning objectives together into one well defined goal. The project consists of programming in Go (GoLang) and Python, writing modules for the production ready Caddy Server v2, using Raspberry Pi computers and other microcontrollers, and wiring up an endless supply of electronics.
I have been creating Raspberry Pi stacks and development environments for years, but I always encounter the same problem. If lose interest or become busy for a while, they get dusty. I also have too many of them to choose from, which usually causes a delay whilst trying to decide which I should work on. There’s always some made up pressure towards working on one or other board, the feeling that I need to complete this one first, etc.
There are many elements to a development board like this. There is one or more Raspberry Pi computers, the Linux operating system on each SD card, the wiring, the LoRa radio modules, and enough distractions to creativity when the dust starts to settle. The presentation is a perfect visual representation of the problem that needs to be solved, in this case, one Raspberry Pi needs to send data to the other using the LoRa radios. In addition to this, they should be able to send their sensor data via radio through a LoRaWAN gateway to internet based The Things Network for consumption via their Cloud service.
Go (GoLang) is the programming language of choice for this project, as it compiles into a single binary, and therefore somewhat resembles a firmware file. Go provides an extensive amount of functionality in it’s standard libraries and for anything else, there any many community projects that can be imported into your project. There are a number of values that I stand by, one being that HTTP without encryption is no longer a viable option, especially within IoT projects.
Caddy Server is an excellent web server written in Go. It defaults to serving content over HTTPS and automatically provisions free SSL certificates from Let’s Encrypt. The plugin / module architecture of Caddy allows it to be extended beyond being a plain web server, for example, CoreDNS extends Caddy to provide a DNS server which is a valuable component in a Kubernetes cluster.
I have been following the Caddy project from the beginning and it has always featured in my projects. The benefit of writing a Caddy module is that I can compile multiple ChIoT modules into a single binary, and still take advantage of all the Caddy security features and functionality.
I decided the way forward was to avoid the dust and build my projects into some kind of box. I’ve previously tried deep picture frames that could be hung on the wall when not in use but that didn’t quite work. I stumbled across a Really Useful Box and started to investigate how to contain the project components. The bottom of the box is covered with 5cm wide sticky back heavy duty Velcro, with the opposite fluffy side under each component. This box may eventually become too small, but as a proof of concept, it has already changed the way I frame the project in my mind, and visibly depicts a self-defining scope.
The goal of this project is to provide access to IoT sensors and devices, supporting the recording of telemetry and data management, automation, data transport and media conversion, interactivity, and identity. An interoperability between ChIoT and other microcontrollers will allow the most appropriate device to be implemented, where ChIoT can be a standalone IoT solution or used as an edge compute device. Edge computing is positioned between your devices and the Clould, and can enable low powered devices to offload elements like their processing, internet access, communications, or other abilities to a central device or a number of distributed devices.
The beauty of containing the project in a box with a lid is that I can avoid the dust collecting whilst I’m writing code, and I can concentrate my thoughts on what is in this box, rather than the other boxes containing future sensors and components. As time goes on, other components will have a strip of Velcro applied to them and they will join the box, along with other microcontrollers and more Raspberry Pis. It is for this reason that I believe the box will soon become too small, but at the moment it is just big enough to provide the ground work and design.
There are a few exceptions to what can fit in the box, as I have several robots and other devices that I plan to use with ChIoT. My robots are likely to be programmed in Python, a popular programming language that is widely used in robotics, IoT, and by Makers. This is not only to develop my own skills, but also to allow more projects to get involved with ChIoT.
There is a lot of work ahead, but it’s an exciting challenge that I enjoy. I will continue to post updates so watch this space.