Is ESP32 (including SDK) stable for making commercial products? - stability

I'm studying ESP32 for a wifi project, although there are alternatives like CC3200 (TI), because of its price. But I suspect the reliability of ESP32's hardware or SDK.
I found some bugs while developing simple projects. I reported these to ESP but, they just delivered it to the development team, there was no additional response.
I would like to use a big company product like TI, but the price competitiveness of ESP32 is too good.
I would like to hear from those who have developed commercial products with ESP32.

I'm not sure that just saying that because Espressif has shipped 100 Million ESP32 chips is the best answer to the question of whether it is stable enough for implementation in a product. I will say that my company is using it, but the newness of the chip has definitely added some hurdles. However, I do believe it is stable enough for use in products. I'm not sure if you were using the Arduino libraries or the IDF, but my experience with the IDF has been pretty good.
The ESP-IDF v3 (which is currently in pre-release) appears to have added substantial stability as well as opening up new features such as Light Sleep. I would recommend implementing Over The Air updates if you plan on using wifi, just in case though. That way you can update your customers' firmware if you end up finding any bugs later.
Something else to consider is the amount of documentation on the chip and the idf that you'll need. Both are pretty well documented, but I've ocassionaly found myself wishing there were more examples or guides for some function sets. The documentation is definitely improving though, so as time goes on this will get better. Espressif is extremely active on the ESP-IDF GitHub.
Also, the chip has had a couple of silicon revisions, so that may be something you want to look into as well to see if anything revised will hinder you in one version of the chip vs. another.
You can check a lot of this out for yourself in the ESP32 Docs: https://esp-idf.readthedocs.io/en/latest/index.html and ESP-IDF GitHub: https://github.com/espressif/esp-idf
Side-Note: I don't agree that this should be posted in arduino.stackexchange.com at all... Why would the fact that the ESP32 has Arduino wrapper libraries make this specific question only relevant to the Arduino Stackexchange?

This is a good developer question. I would say : Is ESP32 SDK reliable enough to make a "professional" product? Then I would say simply YES. Just because Espressif shipt 100 Million chips in one year. 100 Millions of SDK/application cannot be only lab and DIY buggy IoT... Therefore, the "SDK" Github is very alive...

Related

Accept contactless payments on smartphones using NFC chip

Whilst this question has obviously been asked before, year's have gone by since then. Apple has released a new NFC spec in that time and further software updates indicate more speculation in this area.
A smartphone has an NFC chip. Is it possible to harness this to take an EMV payment from a contactless card or eWallet? This would obviously require an installed EMV kernel to securely process the payment and possible a means of accessing the secure layer for any PIN entry.
As much as this may seem like an ambiguous question, clearly the hardware is capable. Is it possible / legal / licensed in anyway yet. There is a service that claims to be working on it called PHOS.
Quite obviously, SO is not the right place for such a question as it's unrelated to programming. There's quite a lot of discussion regarding the topic and answers also will tend to be opinion based.
Up to this moment, it hasn't been possible on Apple (due to closed ecosystem, not hardware incompatibility) and became allowed for Android. Technically it's been possible for a while already, but regulations made consumer grade devices incapable of acceptance - they are still quite terrible in the physical aspect as they are not designed to either handle entries securely as well as generate the electromagnetic field according to EMVCo requirements as to the shape and operating volume. Payment schemes have generated as list of special criteria for solutions based on consumer grade devices and the company you mentioned is one of many that have been working on it. There certainly are already some production deployments with limits that have been set by the schemes.
There might be changes in Apple approach (especially as they acquired a company dedicated to such solutions) or not. This is just speculation. The fact is that consumer devices tend not to be as good as dedicated hardware but only time will tell if this stays true. Security research is ongoing, we shall see the results and how will that affect companies policy and further development in the area. It's just too early too tell.

ESP32 IDF Ble Gatt Server Example

I am trying to use esp32 IoT development framework. It is a bit complicated for me especially BLE examples. I am trying to understand gatts_service_table example but it has huge code inside and too hard for the first BLE APP. Is there any simple Ble example on IDF? I know kolbans libraries and I tried that but my aim is IDF. But to learn IDF I have to improve my programming skills first.
I want to create a profile. After add service inside, and characteristic. After creating my BLE architecture, send receive data with a phone app.
BLE looks simple from the user's point-of-view but is quite complex under the hood. It took me several months to wrap my head around it.
This example is organized much better than the example from Espressif (BlueDroid-based, it's what I'm using in my product):
https://github.com/eagi223/esp-idf_Bluetooth_Multi-Service
(vs. the Espressif example: https://github.com/espressif/esp-idf/tree/master/examples/bluetooth/bluedroid/ble/gatt_server_service_table )
BTW, Now NimBLE is available in ESP-IDF 4+, which is supposed to be more memory efficient and simple to use, but I haven't tried it yet. https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/bluetooth/nimble/index.html
The examples of nimble ble given in espressif documents are quite difficult to follow. It took me some time to understand nimble BLE use with esp32. After referring many other sources, I finally succeeded in its use.
So I have written a tutorial which I think is easier to follow than examples given in espressif documents.
https://github.com/Zeni241/ESP32-NimbleBLE-For-Dummies
Hope it will help someone.

High performance OS/hardware/networking optimizations

I am working on a very latency sensitive application, and it's at the point where we are trying to get 10s of microseconds of performance improvements out of it. In addition to code optimizations, hardware and OS specific topics have come up, such as processor affinity and interrupt coalescence.
While this is very useful, I've found that these topics come up as tribal knowledge - someone read an article that mentioned a topic, then we do some research into it, and if it feels promising, we finally try implementing it and measure the results. This feels haphazard to me and I am looking for a more regimented approach to learning about these things. The big problem that I face is not knowing what I don't know.
What is a good approach to learning about lower level OS, hardware and networking specific optimizations? Are there specific books or papers that I should read on the topic, or is it more a matter of reading hardware manuals such as this one?
Vendors: work with Intel and AMD for processor optimisations, work with RedHat, SuSe, and Microsoft for OS optimisations, subscribe to various mailing lists for development updates on compiler technologies: Clang, and library dependencies: Glibc, etc.
Want high speed networking? Contact Mellanox, Solarflare, Intel: all are high end vendors and can offer consulting and technology resources for improving development practice and provide insight into future directions.

Can a software engineer create an embedded system?

I want to create an embedded system using Linux similar to E book reader using ARM9 processor. I am not an electronics expert but I would love to learn it. I know basics of electronics like transistors, flip-flops, multiplexers. etc. I love software and would like to create something like an E book reader. Is it possible for a software engineer to create an embedded system? I do not want to buy single board computer available in market, I want to create it myself.
Where do I get some kind of tutorial?
Is my knowledge of operating systems enough to create such a system?
Building a system requires knowledge from multiple engineering disciplines. You can only achieve such a task by buying off-the-shelf modular components and assemble them, and in the case of an e-book putting together the modular components won't be pleasant.
Also learning any of the single disciplines needed will take you a long and concentrated effort.
To (loosely) indicate the problem areas:
you need a computing platform of the right form-factor with all the right chipsets (Apple integrate their own single CPU, as of recently, using hardware designs from multiple companies). You will not find a suitable computing platform of the right form-factor.(Electronic Engineer: Digitial designer, Analog Designer)
You need to try to attach an LCD to the right platform, and other peripherals such as USB/ charging port/ WIFI etc etc.
(Electronic Engineer, Product Designer)
You need to build a case for the platform.
(Product Designer)
You need to get a embedded operating system (potentially real-time) (working on your platform) that fits your needs.
(Embedded programmer, Kernel Programmer)
You need to extend said operating system to behave the way you want it.
(Application Programmer, Graphics Programmer)
The most important part is the platform, and getting a suitable one is very hard and very expensive. The original iphone had a platform created by a third party that apple bought and used to apply points 2-5 -- and it still took their best engineers a long time to make a prototype.
Not really; hardware engineering is a degree-level subject in it's own right, and you need at least three different specialities to do that job. Not to mention that CAD software and CNC machines cost a heck of a lot more than gcc, so hardware engineers' overheads are huge.
However, you can hire that done, for a substantial fee. Or you can use embedded boards and get the case design done for you.
For example, a beagleboard with these accessories in a custom case.
Or, a Gumstix overo with one of these and one of these in a custom case.
In either case, running some embedded linux.
Development boards save a lot of time and money, but in both cases, if you have the capital you can get those boards boiled down into a custom board that will do just what you need for your application, and cost less in large numbers.
Do not underestimate the case design; you're looking at the thick end of a hundred thousand dollars just for the tooling to manufacture a plastic, die-cast metal or stamped metal case, without paying for the design work.
Creating embedded hardware from scratch requires a lot of expertise and resources. It would be better to start off with a low-cost evaluation board in order to learn the basics of embedded programming and interfacing first. That should keep you busy for a few months. Beyond that, embedded CPU suppliers typically have reference designs that you can incorporate into your own embedded product, but at this point you will need to start investing a lot of time, effort and money into tooling up for hardware design and development.
There is basically no need to create (I mean to solder) the embedded system. A good approach may be to buy some controller board like this this or this. You need to be careful with the board but there is nothing about it a software engineer could not manage; it has the familiar serial, USB and RJ45 ports and normally already boots Linux. Finding enclosure, connecting peripherials (including analog/digital converters, or adding some relays to the output ports) is fully in the range of capabilities of someone who wants also some work with hardware. Expect to develop in C.
You can buy off the shelf hardware for embedded software development.
PC 104 Boards

Great idea for embedded development

For my university I (and three others), are searching for a project that utilizes at least one embedded device, web services or other web technology, and a Graphical User Interface.
Currently we are looking at developing a unified remote, that is an extendable application on a cell phone through which you can control your media center. Any ideas, or advice on this will be appreciated, though it is not the focus of this question.
We are having a hard time finding interesting (or funny) projects on which we can work a complete semester. Any ideas will be greatly appreciated. The software will be released as free software. (GPL or BSD license).
We all have a Bsc in Software Engineering.
EDIT: I am very pleased with the suggestions so far. Thanks to everyone, and keep it coming.
How about follower: carry a device, as you move from room to room in your house devices configure themselves to your preference - lights, music etc. If two people are in the room some precedence rules.
Is that possible just on the presence of a mobile phone?
Another idea (from the top of my head):
A work environment ensurance thing. We programmers like to develop in nice and quiet environments. Unfortunately some people tends to annoy us with their disturbing behaviour (or just by being loud).
So the project could be to create devices wich tracks the stress level (sweat levels, pulse etc.) of the individual and their impact onto others.
An example: One individual is very loud (the device should measure this), and others around him becomes stressed and/or unfocused because of this. The serverside sw, should then detect and warn him to quit down a bit to improve the work environment.
Comments?
What do you peeps like doing? Build an app for it.
So, if you like drinking coffee build a application which will find the nearest frothy coffee shoppe (or if you're particular, the nearest Peets/Starbucks/Whatever-ocino). This idea works for beer too.
If you buy stuff off e-Bay build a sniper app.
If you enjoy playing frisbee build an app which locates your nearest friends and sends them a text asking whether they want to goof off lectures and go to the park.
Heck, you could even build an app which monitors your SO questions and alerts you when you get an answer (although I don't know whether the data services SO currently offer will be up to the job).
The standout companies that have made great universal (programmable) remotes are : logitech, and philips.
One of the big problems with these types of devices is the ability of the general consumer to actually program all of their various devices. Logitech has done an outstanding job of providing a fairly simple Web based user setup experience that then implements a very usable universal control.
I would definitely look at what they have done for some ideas on universal remote controls.
How about an app and hardware that will tell me when my wife's plants need watering? (It's somehow my fault if they don't get watered.)
OK then: the recipe generating fridge. Rfid tags on the contents know what's available and the expiry dates. The database knows the recipes. The fridge emails/texts you to say "buy some mushrooms and you can have a delicous ham and mushroom omelette while the eggs are still fresh."
Benjamin and all those aspiring to do embedded projects ...
When you start a project, especially in embedded systems, you need to understand that the hardware is not your PC but some special device. And every sensor will be a transducer in itself. The only thing that would matter to students is that everything costs and are costly
So, it will be good to make sure that the idea is such that,
It can be completed by the
project members within the given timeframe
All the required development
tools like hardware etc can be
really bought
Of all, it good to ensure that the
project enables you to learn
something useful for your career ...
To do all this it is better set some achievable goals
Develop a system in which you can program the lighting system of your house. You can set up their schedule one time and everything should work automatically.
I really love working witht the Atmel ststk1000/stk1006/stk1002 development boards for tht AVR32. ATSTK1000
2x Ethernet
QVGA lcd
USB 2.0
SD/MMC
Conpact flash
Supported embedded linux
IR
Audio
ps2 interfaces
uarts
++
familiy atmel page:
AVR 32 family home
online forums
Forums for CPU

Resources