14

I am a newbie in IoT and want to start my career in IoT. As I search on Google for startups in IoT, I found many blogs. And I found the languages used in IoT like C#, Java, Node.js, and the microcontrollers like Arduino, Raspberry Pi, Intel, Netduino, etc.

As I am new to IoT I don't know which language is best and which microcontroller I use for a startup?

For the basic startup I say, I want to create a device that have the display that show the weather for the location given from my mobile. So it may be a good example for startup that covers the hardware, Internet and the software.

Device will be a battery-powered, a small digital display and yes cost restriction.

Which microcontroller and language should I use that fulfils my requirements for showing the weather?

3
  • 2
    Also, for selecting the microcontroller, this answer is truly fantastic.
    – Aurora0001
    Commented Jan 27, 2017 at 10:55
  • 1
    Picking nits: The Arduino is a microcontroller. The Pi is a full computer, things like Pis and Beaglebones and Gumstix are typically called "single-board computers" (SBCs) or "computer-on-modules" (COMs). Unlike the Pi, the Arduino doesn't run an OS -- the Arduino is just an Atmel ATmega??8 on a nice little easy-to-use board that ships with a convenient IDE. The Pi is an actual computer with an ARM Cortex-A53 microprocessor core. You might use, say, a Pi to do all the networking and display output and complex control with an Arduino to do simple work like read buttons, RFID tags or something.
    – Jason C
    Commented Jan 27, 2017 at 14:29
  • 1
    Battery powered devices: do you mean like a smartphone/smartwatch (Li battery, life a few days between recharges), or like a clock (AA non-rechargeable, life a few months)? That will drive your design and severely restrict your options if you choose the latter.
    – pjc50
    Commented Jan 27, 2017 at 16:37

4 Answers 4

6

Personally, I'd select a Raspberry Pi 3B for this, although it's probably far more powerful than you really need. The reasons for me suggesting this are:

  • It has built-in 802.11 b/g/n Wireless LAN, so you'll be able to connect it to a Wi-Fi network rather than by Ethernet cable

  • It also supports Bluetooth, so you might be able to connect to the phone through that.

You will also need a display unit, and, conveniently, there are several displays designed for the Raspberry Pi, like this 4DPI-32 touchscreen. You should just be able to slot the display directly on to the 40-pin header:

40 Pin
(source: raspberrypi.org)

Raspberry Pi Foundation, CC BY-SA 4.0. I'm aware this is technically a Pi 2B, but the GPIO is the same on the 3B.

As for the programming aspect in this case, all you'd need to do is fetch the weather from an API somewhere, and display it on the screen as a GUI program. The display just functions like any HDMI output for the Pi, so you don't need to do anything special. For Python, you could use Tkinter to create a basic UI, or you might even choose to write a web application in HTML/CSS/JS, depending on what you're comfortable with. You could use the OpenWeatherMap API for free; the documentation is linked for each API endpoint.

At this point, it's up to you really. The best language here is the language you're most comfortable with. If you like AngularJS, just create a HTML page, fetch the weather with Angular (or use a library like this to help you) and display it using some CSS to make it look nice.

To actually get the location, I suspect it would be easier to just allow the user to type in their location on the Pi's touch screen. Sending the location of your phone is probably a little more difficult, although you might be able to find something if you research a lot.

For battery usage, this question on Raspberry Pi Stack Exchange is worth reading.

5
  • 1
    Gotta plug the Vilros Pi Kits, which work right out-of-the-box and save a ton of annoying initial setup. Also off-topic but for debugging I've found this (and its ruggedized version if you search the site) to be incredibly useful. Expensive for single use but worth it if you use it all the time. Functions well with an HDMI -> VGA adapter.
    – Jason C
    Commented Jan 27, 2017 at 14:14
  • 1
    No. First because of the reliance on a fragile SD card, second because you can't really go into manufacturing in moderate quantities. A pi might get you a proof of concept, but then you'll have to redesign around something you can actually use in a product. Further, it's basically a complete non-starter for battery power in any serious usage. Commented Feb 1, 2017 at 7:57
  • @ChrisStratton: For a beginner like the OP, a RPi seems a viable option in my opinion. Yes, for large scale production, this would not be ideal, but I focused on providing an accessible, easy to modify idea; a POC is exactly what is needed here. I don't think the SD card is really a great concern either for a hobbyist setup; in mass production the story is different but for a starting point, I think this should work well enough. I'm open to any suggestions for a better approach though.
    – Aurora0001
    Commented Feb 1, 2017 at 15:00
  • Even apart from the ways those issues make it non-viable in a product, the poster's battery power requirement rules it out from the start. Because the pi is a set-to-box architecture without the power management of a mobile one, you won't get more than a few hours out of any reasonable battery. Commented Feb 1, 2017 at 16:14
  • "probably far more powerful than you really need" - yes. "built-in 802.11 b/g/n ... Bluetooth" ... OIC, you really meant to recommend ESP32, didn't you? ;-)
    – Mawg
    Commented Dec 25, 2020 at 14:09
11

The Onion Omega 2 claims to be the smallest Linux computer in the world. That claim may not quite be true (see the vocore2 below, for example) but in my experience it's got to be in the smallest 3. Costs only $5, built-in wifi, designed with IoT specifically in mind. Has a few shields available on their web site. Brand new product, seems to have a strong and active community. Kickstarter backers get the device. Worth checking out.

Also, as pointed out in comments, check out the vocore2, which actually seems to be smaller than the Onion, and cheaper at $4. It's currently being funded at IndieGoGo and estimated shipping dates are February 2017 (next month at the time of this writing). Also looks to have an assortment of docks available, and has a built-in wifi router, which is kinda cool.

I just came across those the other day and have no experience with them. Note, however, due to their newness, some of the Linux packages you may be used to using may not be available yet (for example, I know for a fact that at the time of this writing a gstreamer package is not available on the Onion yet, you have to build from source, although gstreamer is not relevant for you).

Short of those, like the other answer says, the Pi is a great low cost device. Don't forget the Raspberry Pi Zero, another tiny $5 computer along the lines of the Onion. It doesn't have all the ports on board that the larger Pi's have but if you don't mind, or if you just want to use a 3 for development and a Zero for its size in final products, it's another choice worth considering.

Other devices, some expensive, include:

  • BeagleBone Black (this is the only Pi alternative I'd seriously consider because of its low cost).
  • Gumstix ($$$, but we use these all the time in projects for their size)
  • Udoo ($$$ but packs a punch)
  • Toradex Colibri (A bit hard to work with but we use these a lot, too, better specs than a Gumstix, and have the option of running Windows CE with an instant boot feature if you'd prefer a Windows toolchain and virtually zero boot time).

Also note that Vilros makes some awesome Pi starter kits (cheaper on Amazon) pre-packaged with an OS, working Wifi, heat sinks, a case, works right out of the box and saves a ton of grunt setup work. Also worth checking out if you go the Pi route. Vilros also used to make Beaglebone starter kits, which no longer seem to be available on their site but if you search Newegg/Amazon/etc. you can still find available stock.


By the way, an Arduino (or another microcontroller, contrast with the full-blown single-board computers listed above) on its own probably isn't what you want here. The Arduino is just an Atmel ATmega168/328. It does not run an OS and doesn't really do anything besides precisely what you tell it to do. So for example, for networking you'd need the ethernet shield, which ships with a full ethernet control library that I believe provides a TCP and UDP stack (I've never used it, just browsing their site) and of course takes up a lot of limited code space.

Then you'd have to build your weather client and everything on top of that, and you've got to do it all in 32KB or less. It's a different flavor of development than doing Linux/Windows development on the Pi/Beaglebone/Gumstix/Colibri/etc. A bit outside the scope of this answer.

What the Arduino is good for here is as an add-on to your main system to do hardware interface stuff, like read pressure sensors, buttons, control basic electronic elements, that kind of thing.

Embedded systems development is a whole different beast than the desktop development you'd be doing on the Pi, and I really wouldn't recommend trying to do this with an Arduino alone, especially without experience.

6
  • 2
    vocore2 is smaller and cheaper at the moment ($4) at still runs OpenWRT (Linux) Commented Jan 27, 2017 at 18:24
  • 2
    What's the open source story with this one? Commented Jan 28, 2017 at 10:27
  • @SeanHoulihane Great question. I'll see if I can find out, their Kickstarter page and home page are lacking on the matter. I'm actually a little miffed at the Onion folks' "world's smallest" claim after Matija's vocore2 comment above, but maybe they can redeem themselves (in my humble eyes) with an open architecture.
    – Jason C
    Commented Jan 28, 2017 at 17:42
  • 3
    Remember, people can claim anything on Kickstarter... Commented Jan 28, 2017 at 17:59
  • 1
    As much as I like the Onion series, and the Pis, this really does seem like a job for an ESP32 to me
    – Mawg
    Commented Dec 25, 2020 at 14:10
7

I suggest a step by step approach to find out what language and controller you should use. The microcontroller you need will depend on the tasks you want it to do. Theoretically the task will set up some requirements that an appropriate microcontroller will fulfill, so you should choose the microcontroller by these requirements.

  1. Define a user story for the device. What do you expect from it? What do you want it to be capable of?

    In your case it is already defined by you:

    A battery powered device that should be capable of receiving inputs from a smart-phone and display weather information of requested locations on its own display.

  2. Now step 1. gives you something to start with. You can decide what hardware you need on a block diagram level.

    You will certainly need a display and possibly a WiFi or Bluetooth module to communicate with your mobile. Accessing global weather databases will possibly require Internet connection. You should control both of these with an MCU or the WiFi module (you need Internet so you can exclude Bluetooth) should be able to control the display and run your software.

  3. You can start looking for specific parts. You can start with deciding what battery you will use, so you can take into consideration the power consumption of your potential parts. I have summed a general process for selecting MCUs in one of my previous answer. Basically the same should be done here. Find a cheap display, it will probably use an SPI or I2C interface for communication. Then you can search for either a Wifi module with SPI/I2C and has an integrated MCU or a separate MCU and a WiFi module. The individual WiFi module will probably use UART to communicate so the individual MCU should have that along the SPI/I2C.

  4. As for the language. Most microcontroller will limit your possibilities in this field. In most cases your choices will be either C, C++ or Assembly, strictly speaking of microcontrollers here and not single board computers.

    If you decide to go with a BeagleBone or Raspberry which can run Linux or other powerful OS then I say that the best language will be the one that you know the best, of course it should be able to handle the task. (You can run Java on the RPi if you like.)

    Opening a socket to a global weather data service can be done in C, C# or Python as well. Would be a bit more difficult to process JSON with C but certainly possible.

Speaking about costs in general. The best option is to search for WiFi enabled display devices, there will be a lot of results and most of them will use the same hardware, and probably this will be the cheapest.


You could use an ESP8266 WiFi module which is Arduino compatible to connect to the internet and interface a display. It will require much tinkering than a Raspberry Pi would but will be cheaper.

Here is a Hackaday project about ESP8266 + OLED display.

1
  • 2
    Good breakdown of the process. Micropython is available for many small boards, maybe one factor to consider is the ecosystem of the board, and if there are any open source libraries (although MCU vendors often provide good libraries too). Commented Jan 27, 2017 at 18:01
7

Creating a startup is not about what you can do with the technology and not even about the product. For a successful startup that can captivate VC's you should first think about the market that you are going to serve. But thinking about the market you will serve is not enough. You need to have real data about the market. It is not just about something that makes sense to you. Creating a product and then tying to sell it is not a successful approach and that is the way most unsuccessful startups end. A market is a REAL NEED. When you crate a product create it to address a specific Market. This is what makes a successful product, a product that sell itself because people are already looking for it. VC's invest only on startups that have such products especially if they are already selling.

To chose a technology to develop your product first you need to know what your product needs to do, this is how is it going to solve the problem in the selected Market. Then look at what the potential customers are willing to pay for it. Then chose the technology which allows the fastest time-to-market while keeping the cost within the budget. Then outsource the development or get a partner that can do it and is willing to work with you. Share the profits 50/50 with your partner. Then when you have a prototype, start laying-out your business plan and remember that you can only captivate VC's if you show them how they can make money.

If you need to lower the cost of your product for mass production you can use lower level languages and less resourceful micro-controllers like Microchip PIC or Silicon Labs EFM with ASM/C/C++. If the product is not going for mass production (100k+) use a higher level language and more resourceful micro-controllers, like Micro Python or Lua with ARM32 MIPS, or even Linux with ARM32/64. This saves on the development costs but increases the price of the hardware. Remember, the price of the product is not just a PCB with components; development, housing, packing and everything else necessary to sell the product should go into it's cost. Put that in the business plan. And don't go to a VC with an Arduino or a Raspberry pi or an Onion or any thing that looks like a hobbyist gadget, make a proper PCB with your logo on it and use a nice housing to make it look like a final product, VC's rarely trust hobbyist gadgets.

Start up, not down, and best of lucks.

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.