A Noob's guide to Arduino (a.k.a. where do I start?)
Tags: arduino, iot, ai
Published: 2019-12-20 04:35:54

I'm still a student about to dive into the wonderful world of front-end web development. I was asked to join a hackathon because I also have a huge interest in AI and wanted to build something. Thinking that the idea wouldn't make the first round, I submitted the idea and stopped thinking about it. 

One day, I checked my email and I received a message saying I made it to the second round. I was ecstatic! I messaged the teammate who helped with the idea so we can get started on the prototype. But once I realized the work to build the prototype was much more complicated, I began to have cold feet. I knew nothing about electrical engineering. I knew nothing about hardware or how to build an Internet of Things architecture. I didn't know the difference between an Arduino or a Raspberry Pi. I definitely had self-doubt.

After being confused by suggestions from a family member about drawing board schematics using components I had no idea how to work with or what they did, I began looking for online resources. This is what I came to understand so far.

### Boards
For a board to do any simple automation with, an Arduino Uno or similar would do the trick. If you plan on connecting the project to the internet or controlled by a device such as a smartphone or a web application, you can look into board modules such as an ESP-12E or an ESP8266, which is a development board with a WIFI chip built in. I went with the latter choice because I want to be able to send sensor information to the cloud, but it can also act as a web server which is really cool. I mentioned modules above, and I'll talk about them more later.

### Wiring

I also learned to understand how wiring works (more or less). You need to be able to know what kind of voltage is able to pass through those wires to avoid burning anything out. There's tons of looking at pinouts and schematics (images) of how things are laid out. Often times, you will be working with a breadboard, which is a workspace where you can lay out the wires and modules you will need in your architecture. Some breadboard contain special lines or grooves that can affect the circuit, so make sure to look into the one you want to buy.

### Modules (Finally!!)

We heard of modules in front-end that can be used to make up a project like node modules, or components for UI that make up a client-side environment in React or Vue. In the case of IoT, from what I've seen so far, modules and components are interchangeable in term. They are simply parts of an architecture that does something. You can buy modules for WIFI, GSM cards for SMS messaging, sensor modules to do temperature, buzzers, voice recognition, etc. Each module corresponds only to what it does, and simply ties into the whole using resistors and wires.

### Editors
The main editor used with Arduino is the Arduino IDE. I'm currently using that since it's the one mostly used in tutorials and recommended for beginners (like me :) ). I've seen videos where people use VSCode to code and upload sketches (code scripts are called sketches in Arduino terms) to their Arduino, but I prefer the Arduino's IDE library system and feel it's more suited for development.

The code you'll write is in C, so if you're not comfortable with this, there's tons of resources. The IDE gives tons of examples and code snippets to refer to. There's also an online Arduino IDE but has a pay wall if you want to connect generic boards or an ESP8266 to it other than simple Arduino boards.

### Cloud Services
Once you build your architecture, you might want to store your information in the cloud. In that case, you have a few choices. The one I'm currently working with for the hackathon is Azure IoT Hub, but there are open source ones with low-end subscription models like Thingsboard.io or even Arduino's own IoTCloud (but you need to have a wifi-based Arduino such as a MAKR to use for free). These options allow you to push to the cloud and in real-time on certain platforms, if real-time data is important to you.

---
So far, that's it. This is a general overview but there are many more in-depth topics I found while dabbling in building something with Arduino. I will definitely want to learn more outside of my normal web-dev schedule. I'm sure there are people in the community who have more knowledge than I do, so please chime in if I am wrong about something, add your experiences with Arduino, or add any missing information that we all can use and learn from. Thanks for reading!