diff --git a/.gitignore b/.gitignore index d57a8d594..3d7d065a9 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ node_modules resources .hugo_build.lock .vscode +.idea diff --git a/.lycheeignore b/.lycheeignore index cbc03b798..dbd60e786 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -6,3 +6,27 @@ https://www.theembeddedrustacean.com/subscribe https://docs.espressif.com/projects/esp-modbus/en/latest/esp32c61/ # content/blog/nuttx-adding-porting-an-app/index.md https://github.com/ARMmbed/mbedtls/archive + +# Domains which rejects validation requests from GitHub Action +https://www.kickstarter.com +https://platform.openai.com +https://openai.com/ +https://launchstudio.bluetooth.com +https://www.linkedin.com/in +https://www.gartner.com +https://www.worldwildlife.org +https://www.eeweb.com +https://www.eetimes.com +https://www.aliexpress.com +https://www.instagram.com +https://espressif.us15.list-manage.com + +# Domains returning time-to-time 500 +https://www.analog.com +https://educ8s.tv + +# Domains with frequent time out +https://www.waveshare.com + +# Links from examples +socket://localhost diff --git a/assets/img/featured/featured-esp-journal.webp b/assets/img/featured/featured-esp-journal.webp deleted file mode 100644 index 8d1c7118c..000000000 Binary files a/assets/img/featured/featured-esp-journal.webp and /dev/null differ diff --git a/assets/img/featured/featured-espressif.webp b/assets/img/featured/featured-espressif.webp new file mode 100644 index 000000000..30bbff4a9 Binary files /dev/null and b/assets/img/featured/featured-espressif.webp differ diff --git a/content/authors/aditya-patwardhan/_index.md b/content/authors/aditya-patwardhan/_index.md new file mode 100644 index 000000000..b71921303 --- /dev/null +++ b/content/authors/aditya-patwardhan/_index.md @@ -0,0 +1,3 @@ +--- +title: Aditya Patwardhan +--- diff --git a/content/authors/adwait-patankar/_index.md b/content/authors/adwait-patankar/_index.md new file mode 100644 index 000000000..c3dbae4df --- /dev/null +++ b/content/authors/adwait-patankar/_index.md @@ -0,0 +1,3 @@ +--- +title: Adwait Patankar +--- diff --git a/content/authors/ali-hassan-shah/_index.md b/content/authors/ali-hassan-shah/_index.md new file mode 100644 index 000000000..fc555af80 --- /dev/null +++ b/content/authors/ali-hassan-shah/_index.md @@ -0,0 +1,3 @@ +--- +title: Ali Hassan Shah +--- diff --git a/content/authors/amey-inamdar/_index.md b/content/authors/amey-inamdar/_index.md new file mode 100644 index 000000000..f4e4868a6 --- /dev/null +++ b/content/authors/amey-inamdar/_index.md @@ -0,0 +1,3 @@ +--- +title: Amey Inamdar +--- diff --git a/content/authors/anant-raj-gupta/_index.md b/content/authors/anant-raj-gupta/_index.md new file mode 100644 index 000000000..4c1b32b9f --- /dev/null +++ b/content/authors/anant-raj-gupta/_index.md @@ -0,0 +1,3 @@ +--- +title: Anant Raj Gupta +--- diff --git a/content/authors/chirag-atal/_index.md b/content/authors/chirag-atal/_index.md new file mode 100644 index 000000000..48315295d --- /dev/null +++ b/content/authors/chirag-atal/_index.md @@ -0,0 +1,3 @@ +--- +title: Chirag Atal +--- diff --git a/content/authors/david-cermak/_index.md b/content/authors/david-cermak/_index.md new file mode 100644 index 000000000..51ee8bbb4 --- /dev/null +++ b/content/authors/david-cermak/_index.md @@ -0,0 +1,3 @@ +--- +title: David Cermak +--- diff --git a/content/authors/deepakumar-v-u/_index.md b/content/authors/deepakumar-v-u/_index.md new file mode 100644 index 000000000..253148e15 --- /dev/null +++ b/content/authors/deepakumar-v-u/_index.md @@ -0,0 +1,3 @@ +--- +title: Deepakumar V U +--- diff --git a/content/authors/developer-portal/_index.md b/content/authors/developer-portal/_index.md new file mode 100644 index 000000000..a45db3817 --- /dev/null +++ b/content/authors/developer-portal/_index.md @@ -0,0 +1,3 @@ +--- +title: Developer Portal +--- diff --git a/content/authors/dhaval-gujar/_index.md b/content/authors/dhaval-gujar/_index.md new file mode 100644 index 000000000..dfbd934c7 --- /dev/null +++ b/content/authors/dhaval-gujar/_index.md @@ -0,0 +1,3 @@ +--- +title: Dhaval Gujar +--- diff --git a/content/authors/glauber-ferreira/_index.md b/content/authors/glauber-ferreira/_index.md new file mode 100644 index 000000000..342562428 --- /dev/null +++ b/content/authors/glauber-ferreira/_index.md @@ -0,0 +1,3 @@ +--- +title: Glauber Ferreira +--- diff --git a/content/authors/guo-jiacheng/_index.md b/content/authors/guo-jiacheng/_index.md new file mode 100644 index 000000000..8cd602c25 --- /dev/null +++ b/content/authors/guo-jiacheng/_index.md @@ -0,0 +1,3 @@ +--- +title: Guo Jiacheng +--- diff --git a/content/authors/harshal-patil/_index.md b/content/authors/harshal-patil/_index.md new file mode 100644 index 000000000..8ada79d8a --- /dev/null +++ b/content/authors/harshal-patil/_index.md @@ -0,0 +1,3 @@ +--- +title: Harshal Patil +--- diff --git a/content/authors/hrishikesh-dhayagude/_index.md b/content/authors/hrishikesh-dhayagude/_index.md new file mode 100644 index 000000000..d64d02b96 --- /dev/null +++ b/content/authors/hrishikesh-dhayagude/_index.md @@ -0,0 +1,3 @@ +--- +title: Hrishikesh Dhayagude +--- diff --git a/content/authors/juraj-sadel/_index.md b/content/authors/juraj-sadel/_index.md new file mode 100644 index 000000000..0a7850edc --- /dev/null +++ b/content/authors/juraj-sadel/_index.md @@ -0,0 +1,3 @@ +--- +title: Juraj Sadel +--- diff --git a/content/authors/kedar-sovani/_index.md b/content/authors/kedar-sovani/_index.md new file mode 100644 index 000000000..072c3ba34 --- /dev/null +++ b/content/authors/kedar-sovani/_index.md @@ -0,0 +1,3 @@ +--- +title: Kedar Sovani +--- diff --git a/content/authors/lucas-tamborrino/_index.md b/content/authors/lucas-tamborrino/_index.md new file mode 100644 index 000000000..ea5738a45 --- /dev/null +++ b/content/authors/lucas-tamborrino/_index.md @@ -0,0 +1,3 @@ +--- +title: Lucas Tamborrino +--- diff --git a/content/authors/mahavir-jain/_index.md b/content/authors/mahavir-jain/_index.md new file mode 100644 index 000000000..529b76696 --- /dev/null +++ b/content/authors/mahavir-jain/_index.md @@ -0,0 +1,3 @@ +--- +title: Mahavir Jain +--- diff --git a/content/authors/marek-fiala/_index.md b/content/authors/marek-fiala/_index.md new file mode 100644 index 000000000..2b1980da0 --- /dev/null +++ b/content/authors/marek-fiala/_index.md @@ -0,0 +1,3 @@ +--- +title: Marek Fiala +--- diff --git a/content/authors/ondrej-kosta/_index.md b/content/authors/ondrej-kosta/_index.md new file mode 100644 index 000000000..774300f2b --- /dev/null +++ b/content/authors/ondrej-kosta/_index.md @@ -0,0 +1,3 @@ +--- +title: Ondrej Kosta +--- diff --git a/content/authors/piyush-shah/_index.md b/content/authors/piyush-shah/_index.md new file mode 100644 index 000000000..c33666021 --- /dev/null +++ b/content/authors/piyush-shah/_index.md @@ -0,0 +1,3 @@ +--- +title: Piyush Shah +--- diff --git a/content/authors/roland-dobai/_index.md b/content/authors/roland-dobai/_index.md new file mode 100644 index 000000000..44b6253e1 --- /dev/null +++ b/content/authors/roland-dobai/_index.md @@ -0,0 +1,3 @@ +--- +title: Roland Dobai +--- diff --git a/content/authors/sachin-parekh/_index.md b/content/authors/sachin-parekh/_index.md new file mode 100644 index 000000000..598942d01 --- /dev/null +++ b/content/authors/sachin-parekh/_index.md @@ -0,0 +1,3 @@ +--- +title: Sachin Parekh +--- diff --git a/content/authors/sara-monteiro/_index.md b/content/authors/sara-monteiro/_index.md new file mode 100644 index 000000000..4d6eff53a --- /dev/null +++ b/content/authors/sara-monteiro/_index.md @@ -0,0 +1,3 @@ +--- +title: Sara Monteiro +--- diff --git a/content/authors/scott-mabin/_index.md b/content/authors/scott-mabin/_index.md new file mode 100644 index 000000000..d7dd78cbb --- /dev/null +++ b/content/authors/scott-mabin/_index.md @@ -0,0 +1,3 @@ +--- +title: Scott Mabin +--- diff --git a/content/authors/shu-chen/_index.md b/content/authors/shu-chen/_index.md new file mode 100644 index 000000000..a94dd71e7 --- /dev/null +++ b/content/authors/shu-chen/_index.md @@ -0,0 +1,3 @@ +--- +title: Shu Chen +--- diff --git a/content/authors/shubham-kulkarni/_index.md b/content/authors/shubham-kulkarni/_index.md new file mode 100644 index 000000000..4ae004070 --- /dev/null +++ b/content/authors/shubham-kulkarni/_index.md @@ -0,0 +1,3 @@ +--- +title: Shubham Kulkarni +--- diff --git a/content/authors/teo-swee-ann/_index.md b/content/authors/teo-swee-ann/_index.md new file mode 100644 index 000000000..c4cd9937c --- /dev/null +++ b/content/authors/teo-swee-ann/_index.md @@ -0,0 +1,3 @@ +--- +title: Teo Swee Ann +--- diff --git a/content/blog/3rd-party-integrations-in-esp-rainmaker/img/rd-1.webp b/content/blog/3rd-party-integrations-in-esp-rainmaker/img/rd-1.webp new file mode 100644 index 000000000..f2ce405f6 Binary files /dev/null and b/content/blog/3rd-party-integrations-in-esp-rainmaker/img/rd-1.webp differ diff --git a/content/blog/3rd-party-integrations-in-esp-rainmaker/img/rd-2.webp b/content/blog/3rd-party-integrations-in-esp-rainmaker/img/rd-2.webp new file mode 100644 index 000000000..05f2809f3 Binary files /dev/null and b/content/blog/3rd-party-integrations-in-esp-rainmaker/img/rd-2.webp differ diff --git a/content/blog/3rd-party-integrations-in-esp-rainmaker/img/rd-3.webp b/content/blog/3rd-party-integrations-in-esp-rainmaker/img/rd-3.webp new file mode 100644 index 000000000..d7a327aac Binary files /dev/null and b/content/blog/3rd-party-integrations-in-esp-rainmaker/img/rd-3.webp differ diff --git a/content/blog/3rd-party-integrations-in-esp-rainmaker/index.md b/content/blog/3rd-party-integrations-in-esp-rainmaker/index.md new file mode 100644 index 000000000..bdebd0296 --- /dev/null +++ b/content/blog/3rd-party-integrations-in-esp-rainmaker/index.md @@ -0,0 +1,74 @@ +--- +title: "3rd Party Integrations in ESP RainMaker" +date: 2020-06-30 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - piyush-shah +tags: + - Espressif + - Rainmaker + - Alexa + - Google Home +--- +{{< figure + default=true + src="img/rd-1.webp" + >}} + +IoT, in general, has come a long away. During the very early stage, there was browser based control and monitoring, which, though more convenient than non-IoT devices, had a very narrow market. With the advent of Smartphones, IoT devices became much more easier to use and mass adoption became a possibility. However, the real push was given by the advent of various eco-systems and Voice assistants like Siri, Alexa and Google Assistant. Controlling by just asking verbally is much more natural than opening some app in a smartphone and tapping buttons. + +With this in mind, we now have added 3rd party integrations, particularly Alexa and Google Voice Assistant (GVA) support in ESP RainMaker! + +## How does this work? + +If you are already familiar with ESP RainMaker, you may know that it has the concepts of [devices](https://rainmaker.espressif.com/docs/spec-concepts.html#devices) and [parameters](https://rainmaker.espressif.com/docs/spec-concepts.html#parameters). The devices and parameters have an optional “type” field. We have defined our own standard types for some common smart home devices like switches, lightbulbs, fans, etc. You can find information about the standard types [here](https://rainmaker.espressif.com/docs/standard-types.html). We have now created a layer which maps these parameters to formats that are understood by Alexa and GVA. So a device type in RainMaker (like light, switch, etc.) maps to a similar device type there, and their parameters like power, brightness, hue, saturation, intensity. etc. get mapped to the corresponding capabilities/traits. If you have just the power and brightness params, you get a simple brightness controllable light. If you include hue, saturation and intensity, you get a color light in Alexa and GVA. + +## Usage + +The code required to implement the standard devices is very simple. Let us look at a colour light example (led_light) which is already available on [GitHub](https://github.com/espressif/esp-rainmaker/tree/master/examples/led_light). The relevant code snippet below is self explanatory. + +```c +/* Create a standard lightbulb (internally adds name and power as mandatory parameters */ +esp_rmaker_create_lightbulb_device("Light", common_callback, NULL, DEFAULT_POWER); +/* Add the standard brightness parameter */ +esp_rmaker_device_add_brightness_param("Light", "brightness", DEFAULT_BRIGHTNESS); +/* Add the standard hue parameter */ +esp_rmaker_device_add_hue_param("Light", "hue", DEFAULT_HUE); +/* Add the standard saturation parameter */ +esp_rmaker_device_add_saturation_param("Light", "saturation", DEFAULT_SATURATION); +``` + +The [switch example on GitHub](https://github.com/espressif/esp-rainmaker/tree/master/examples/switch) is also ready out of the box for Alexa/GVA. + +Once you build and flash the Lightbulb/Switch example, provision your board and link to your account using the [ESP RainMaker Phone apps](https://rainmaker.espressif.com/docs/quick-links.html#phone-apps). Give the device some friendly name so that it is easy to identify. + +## Enabling Alexa + +- Open the Alexa app on your phone, go to Skills and Games in the menu and search for ESP RainMaker. + +{{< figure + default=true + src="img/rd-2.webp" + >}} + +- Select the skill, tap on “Enable to Use” and provide your RainMaker credentials. +- Once the account linking is successful, allow Alexa to discover your devices. +- Once the devices are successfully discovered, the setup is complete and you can start controlling them using Alexa. + +## Enabling Google Voice Assistant (GVA) + +- Open the Google Home app on your phone. +- Tap on “+” -> Set up Device. +- Select the “Works with Google” option meant for devices already set up. +- Search for ESP RainMaker and sign in using your RainMaker credentials. +- Once the Account linking is successful, your RainMaker devices will show up and you can start using them. + +{{< figure + default=true + src="img/rd-3.webp" + >}} + +- Some users may not see the list like above, but the devices should show up in the device list in the Google Home app. + +So, go ahead and start linking your RainMaker devices to your favourite voice assistants. Currently, only switch and light are supported. Let us know what you would like us to add next by dropping a message either on the [forum](https://esp32.com/viewforum.php?f=41) or [GitHub](https://github.com/espressif/esp-rainmaker/issues). diff --git a/content/blog/a-ceos-experience-during-the-covid-19-crisis-part-iii-looking-ahead/img/a-1.webp b/content/blog/a-ceos-experience-during-the-covid-19-crisis-part-iii-looking-ahead/img/a-1.webp new file mode 100644 index 000000000..ba65f6ffe Binary files /dev/null and b/content/blog/a-ceos-experience-during-the-covid-19-crisis-part-iii-looking-ahead/img/a-1.webp differ diff --git a/content/blog/a-ceos-experience-during-the-covid-19-crisis-part-iii-looking-ahead/img/a-2.webp b/content/blog/a-ceos-experience-during-the-covid-19-crisis-part-iii-looking-ahead/img/a-2.webp new file mode 100644 index 000000000..44a2446fb Binary files /dev/null and b/content/blog/a-ceos-experience-during-the-covid-19-crisis-part-iii-looking-ahead/img/a-2.webp differ diff --git a/content/blog/a-ceos-experience-during-the-covid-19-crisis-part-iii-looking-ahead/img/a-3.webp b/content/blog/a-ceos-experience-during-the-covid-19-crisis-part-iii-looking-ahead/img/a-3.webp new file mode 100644 index 000000000..9326ed8f3 Binary files /dev/null and b/content/blog/a-ceos-experience-during-the-covid-19-crisis-part-iii-looking-ahead/img/a-3.webp differ diff --git a/content/blog/a-ceos-experience-during-the-covid-19-crisis-part-iii-looking-ahead/index.md b/content/blog/a-ceos-experience-during-the-covid-19-crisis-part-iii-looking-ahead/index.md new file mode 100644 index 000000000..4e084daa4 --- /dev/null +++ b/content/blog/a-ceos-experience-during-the-covid-19-crisis-part-iii-looking-ahead/index.md @@ -0,0 +1,69 @@ +--- +title: "A CEO’s Experience During the COVID-19 Crisis — Part III : Looking Ahead" +date: 2020-03-07 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - teo-swee-ann +tags: + - Covid-19 + - Espressif + - Esp32 + - Ceo Blog + - Esp Rainmaker + +--- +*The COVID-19 situation is developing rapidly, and the CEO of Espressif, Teo Swee Ann, gives a short update of the situation and some considerations of the future.* + +{{< figure + default=true + src="img/a-1.webp" + >}} + +The COVID-19 situation continues to unfold fast and globally. It has reached Europe, Japan, South Korea, and the United States, and on the minds of many is whether COVID-19’s advance will be arrested by warmer weather or if a cure or vaccine will be found. + +{{< figure + default=true + src="img/a-2.webp" + >}} + +## Update + +In Espressif, the COVID-19 situation has imposed upon us many changes, such as how we conduct meetings and interact. But we have otherwise been operating normally for close to three weeks, since the Chinese New Year break. + +Here are some of the statistics: 97% of our staff in China are now back to work, of which about 23% are working from home. 2.5% are at home under quarantine, most of whom will return this coming week. + +{{< figure + default=true + src="img/a-3.webp" + >}} + +## Making Chips + +Two weeks ago, we had a test chip back from fabrication, and our engineers have, since then, been busy with the measurements.This chip is one of those “high risk test chips” where we put in our latest ideas and see what works and what doesn’t. As usual, the initial results are a mixed bag: some things work and that’s great; some things don’t work and that’s even better — it tells us that there is perhaps a lesson to be learnt here. + +In the last couple of days, the measurement results of the chip have given us more hope as we gradually figure out how we need to adjust our settings in order to coax the best performance from it. The result is a net improvement in performance and lowered power consumption under limited conditions. + +## Moving Forward One Step At A Time + +Limited conditions? Yes, it’s about first getting to the higher ground so that we could build upon it and generalize and build a platform. I am glad that I still feel the joy of achieving the gain in performance in the chip, because I have had been distracted by the COVID-19 issues. I still have a daily update from my staff about the figures from various countries, the latest news about the virus and spend time reading the statistics. + +While it is possible that the virus will be with us for a relatively long period of time on the order of a couple of year or more, the best outcome would be a winding down of infections starting from April, as the weather gets warmer. But in the short term, given that it’s another 30 days to get to warmer weathers, COVID-19 is highly infectious and many parts of the world are not taking drastic measures, if COVID-19 spreads to 5% of the world’s population outside of China with a mortality rate of 1%, then we are talking about ~2.5 million deaths over the next 1–2 months. + +## Staying on Course + +Despite this, we do not see the direct impact of the virus extending beyond 2020, because there is a very high probability of a vaccine or effective medication to be found within this time frame. With researchers all around the world working round the clock to solve the COVID-19 crisis, and the recent advances in microbiology and science, it is probable that new effective solutions will be implemented by the end of the year. + +For the rest of us, we need to focus on some of the bigger issues on the horizon, and in particular, the global environmental crisis. + +## IOT + +IOT can be an important technology to combat against the global environmental crisis: global warming, rising sea levels, species extinction, resource depletion, plastics, etc. Espressif continues to contribute to useful knowledge of the world, through our [open source projects](https://github.com/espressif) related to IOT and artificial intelligence. In the process of this, we hope to build collaborations and consensus. + +Espressif remains on our course to better serve our customers and Makers through the democratization of technology, to use open source IOT technology to build cost effective, smart, secure, connected devices, and in the process of it, solve some real world problems. + +This is my last update on COVID-19. [So Long, and Thanks for All the Fish!](https://www.amazon.com/Long-Thanks-Hitchhikers-Guide-Galaxy-ebook/dp/B001OF5F1E) + +Teo Swee Ann, CEO Espressif Systems + +7 March 2020 diff --git a/content/blog/a-ceos-experience-during-the-ncov-crisis-part-i-safety-first/img/a-1.webp b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-i-safety-first/img/a-1.webp new file mode 100644 index 000000000..2de9d48cd Binary files /dev/null and b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-i-safety-first/img/a-1.webp differ diff --git a/content/blog/a-ceos-experience-during-the-ncov-crisis-part-i-safety-first/index.md b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-i-safety-first/index.md new file mode 100644 index 000000000..e1819f2d1 --- /dev/null +++ b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-i-safety-first/index.md @@ -0,0 +1,103 @@ +--- +title: "A CEO’s Experience During the nCoV Crisis — Part I: Safety First" +date: 2020-02-09 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - teo-swee-ann +tags: + - Espressif + - Ceo Blog + - Esp32 + - Coronaviruses + - Esp Rainmaker + +--- +*As Espressif is a company with their main offices in China, the recent coronavirus outbreak has affected us as well. Even though there is an obvious impact on the way we work, the blow is cushioned because we have offices outside of China. Additionally, the way our IT is structured allows most of our staff to work from home, and even for the jobs that do need people to be at the office, there are ways to work around the current issues. CEO Teo Swee Ann gives some insight the thought process behind the decisions made.* + +It was approaching Chinese New Year. I had just left for Okinawa on 24th Jan 2020, from Shanghai with my family — a planned vacation during the Chinese New Year celebration that we were looking forward to. In fact, it had been more than 2 years, since I last had a holiday together with my family. + +However, it was to be a holiday that wasn’t meant to be. The coronavirus outbreak situation in China was developing rapidly: just a day ago, Wuhan was locked down and the news reported that there is human-human transmission of the coronavirus. Still at that point of time, most people thought that it was going to blow over soon, and it wasn’t not that bad. It was said to be no more dangerous than a common flu and to only affect the elderly, albeit highly contagious. + +> Many things went through my mind on the plane en route to Okinawa. As I watch the clouds floating by, from my window seat, I wondered how the virus will spread in in China, when it would be over, would it affect our colleagues in China, how many days of delay would this be? I had optimistically thought that it would blow over within a month. + +## Safety First + +As with all new problems, we need to first establish the facts and consider what our alternatives are. Once I landed in Okinawa and checked into the hotel, I immediately called for an online meeting with our China management team to discuss and gather what we know. First, we knew that it was infectious. Second, the mortality rate wasn’t too high. Third, the virus was only fatal to people who were aged or had pre-existing conditions. Of concern, we have some staff who fall within the susceptible age group. + +Based on these information, we formulated our base case and decided to push back the start date of the company to the 3rd of Feb instead of the 30th of Jan (which was later pushed back to the 17th). With this established, we then considered the extreme case: what if nCoV-2019 is the biological equivalent of a nuclear holocaust; with a couple of mutations, it acquires a mortality rate like that of MERS (70%) and is highly infectious? + +> Could we move our staff out of harm’s way? + +The discussion was long and no one was sure how serious it is. Should we wait for the government to make an announcement? Should we panic? We finally decided that we should err on the side of caution, and pro-actively mitigate our risks. For the case of our expat staff, working in Shanghai, we would move them overseas, because many of the group do not speak Chinese and are relatively older. In the case of an emergency, the language barrier may severely disadvantage them. + +> We also knew that when we move our colleagues from Shanghai to another country, we could possibly exacerbate the situation, by spreading it to other countries. How do we square this risk with the considerations about the safety of our colleagues? I made the decision that we should look at the facts as they were: was Shanghai being quarantined? No. Do I think that our staff were infected or exposed? I don’t know everything but I think no — our colleagues were not in Wuhan, or had contact with people from Wuhan. Do I think we should move as many people as we could as long as the laws do not bar us from doing so, our staff are symptoms free and do not have exposure to Wuhan? Yes. + +On the 27th, we had most of our expat staff leave Shanghai for their home countries with instructions to self-quarantine themselves for at least 10 days thereafter. One of our directors stayed put in Shanghai because his child has flu-like symptoms. + +How about our local staff in China? First of all, everyone has families in China and naturally everyone wants to be with their family. We briefly considered moving our staff to a warmer climate (within China), such as balmy Hainan (an island in southern China) — it was theorized in the previous SARS outbreak that hot climate and high humidity may have helped stemmed the outbreaks in some regions. After a long exchange, we came to a conclusion that the best course of action was to stay put. Most Chinese cities such as Shanghai, Suzhou and Wuxi, where most of our staff are located, have good medical resource; the Chinese government was also taking a vigorous response to the crisis — the plan to impose strict quarantine on entire major cities and making use of the Chinese New Year to isolate every household is unprecedented in scope and audacity. + +The early intervention and coordination of the Chinese central government have played a huge role in reining in the spread of the virus to the other Chinese cities and countries, giving everyone precious time to prepare for this contagion. While there have had been criticism of the initial handling of the Chinese government of this crisis, I am of the opinion that the Chinese central government has responded decisively and swiftly once they had gathered the information. + +## Situational Analysis + +## Chip Production + +Based on the feedback from our supply chain and logistics partners, our chip supply functions are unaffected. On the silicon wafer side, our associate foundries are located in Taiwan and unaffected. Our partner module factories in China will be resume operations on the 10th of February. + +Our current considerations are how we could without endangering our colleagues and our partners, fulfill the needs of our customers. We note that our manufacturing partners have automated processes that require very little physical workforce. However, we will have another review of our manufacturing processes and supply chain over the next 1 week as we obtain new data from and continue to build new contingencies. + +## New Product and Customer Support + +After we moved some of our colleagues out of China, we would regroup everyone in our Czech and Indian offices to proceed with the launch of our new product, ESP32-S2. The R&D of ESP-IDF, solutions frameworks and customer support from these sites are not affected. + +## Chip R&D + +About 40% of our staff in China are issued with laptops and can work from home without any issues. + +The majority of the chip design is done in our China offices and this year, we have completed and verified major pieces of our core IPs (some of which are used in ESP32-S2) and we are just finishing up on our integration for ESP32-S3 and ESP32-C2. While there is some impact on chip R&D due to the need to access simulation servers, this can be mitigated by enabling remote access. + +Based on our current estimates, more than 90% of our staff will be back and ready to get back to work within 14 days from now, either physically or via remote access. We are also preparing to have *all* our staff work online, in the event that the situation turns for the worse. + +## Contingencies and Questions + +Over the past two weeks, our global management team has formed the business contingencies, created a new emergency response team (ERT) and carefully evaluated all of the functions of our groups. When formulating the contingencies, we have to make sure that they are real contingencies for the worst case scenarios, including what if I and the management team were infected and down. Although the chances of this happening is extremely small, but we still have to consider these scenarios — things can be unpredictable. + +While our aims are to restore the full function of the company as soon as possible, we have to put the safety of our staff at first place. There are certain functions of the company which will require the physical presence of our staff. How do we evaluate the risk? + +First, the risk of spreading an infection is described by the following equation: + +*probability*[spread at least 1 new infection] = 1 — (1 — 𝜹) ^ ( *N*[interactions] ⨉ *N*[infected] ) + +where 𝜹 is the probability of spreading the virus with each interaction, *N*[interaction] is the number of direct interactions each infected person has with other non-infected people in one epoch (we define as 5 days), and *N*[infected] is the number of infected people in the group. (95% of the population develop symptoms when infected, within 5 days.) + +If any of the values: 𝜹, *N*[interactions] or *N*[infected] is equal to zero, there would be no chance of spreading the infection. Hence, to minimize the risks of spreading any infection within the company, we then have to do these 3 groups of actions: + +## More on Reducing Infectivity (or 𝜹) + +Here’s our list of recommendations: + +## Practical Questions + +## The Situation in Wuhan + +As we have learnt, the situation in Wuhan is critical. Medical staff are getting infected and falling sick. The frontline medical workers are putting their lives at stake to battle the disease. There are even some who have died not of the disease but of exhaustion. The central government is sending thousands of medical workers to Wuhan to relieve the crisis. As of today (10 Feb 2020), the number of new infections in Wuhan are on a downward trend. + +## What Next + +In this epidemic, we are currently in unknown territory; we do not know how the situation will develop or the outcome. Experts have commented that with a R0 that is greater than 2.5, it would probably become a pandemic. But these may not be taking into account the drastic quarantine measures in China. These quarantine measures could also possibly keep the infection rates low enough to buy some time, till warmer weather eliminates the virus. + +> Based on the current statistics, the mortality rates outside of Wuhan is 0.2%. This could be no worse than a bad influenza, which has a mortality rate of 0.1%? + +We have taken measures to keep Espressif going and to keep everyone within Espressif healthy to fight another day. Espressif Czech and Espressif India are unaffected and continue to support our customers directly and develop our latest solutions. In case the situation deteriorates, we will have our entire China workforce to work from home. + +We are also ready to contribute to the fight against the virus with IOT technology, such with our low cost AI enabled voice recognition (hands free) solution ESP-SKAÏNET and soon to be announced ESP-RAINMAKER. __@Makers, please share your ideas!__ We will help support any IOT solutions that help control the epidemic. + +{{< figure + default=true + src="img/a-1.webp" + >}} + +Teo Swee Ann, CEO Espressif Systems + +10 Feb 2020 diff --git a/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/img/a-1.webp b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/img/a-1.webp new file mode 100644 index 000000000..c5a655aba Binary files /dev/null and b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/img/a-1.webp differ diff --git a/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/img/a-2.webp b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/img/a-2.webp new file mode 100644 index 000000000..e4ca55390 Binary files /dev/null and b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/img/a-2.webp differ diff --git a/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/img/a-3.webp b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/img/a-3.webp new file mode 100644 index 000000000..1966e9350 Binary files /dev/null and b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/img/a-3.webp differ diff --git a/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/img/a-4.webp b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/img/a-4.webp new file mode 100644 index 000000000..4a347e361 Binary files /dev/null and b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/img/a-4.webp differ diff --git a/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/index.md b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/index.md new file mode 100644 index 000000000..59796f529 --- /dev/null +++ b/content/blog/a-ceos-experience-during-the-ncov-crisis-part-ii-on-the-ground/index.md @@ -0,0 +1,74 @@ +--- +title: "A CEO’s Experience During the nCoV Crisis — Part II : On the Ground" +date: 2020-02-12 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - teo-swee-ann +tags: + - Coronavirus + - Espressif + - Covid + - CEO + - Ceo Blog + +--- +*As Espressif is a company with their main offices in China, the recent coronavirus outbreak has affected us as well. CEO Teo Swee Ann gives an update of the situation in Shanghai.* + +After I landed in Shanghai from Singapore on 10 Feb, the first thing I did was to get to the company. Thirty of our staff are reporting for work today. Along the way, I noticed that the traffic has been greatly reduced. It is understandable that with the COVID-19 crisis unfolding, most trips to Shanghai have been cancelled. + +{{< figure + default=true + src="img/a-1.webp" + >}} + +There is a sense of surreality because when you pass by all the familiar places, most of them are empty, though the lights are still on. I quickly got back to reality, once I entered the office; I had a long meeting with the company secretary on various matters regarding regulations, finances and status of our colleagues, now scattered in various cities, and evaluated the situation and our options. The discussion centered on things that are in general so detailed and convoluted that they would warrant a face-to-face meeting. + +## Evaluation of The Ground + +On 11 Feb, I decided to buy food for myself and experience the situation. I hailed a cab on my phone using Didi (the Chinese equivalent of Uber), and went to a nearby open mall. + +{{< figure + default=true + src="img/a-2.webp" + >}} + +Despite being devoid of visitors, shops are still making business via online platforms and food deliveries. This is one major differences between a megacity like Shanghai and any other megacities in the world: one can do practically everything via phone Apps such as WeChat, Alipay, Meituan, Starbucks, etc, without having to handle any paper currency or credit cards or even leaving your home. + +Logistically, there would be no issues if one wishes to quarantine himself indefinitely. One of our colleagues joked that if we could get the entire world to do this once a year and we could eradicate chicken pox, influenza, measles, etc. Based on the latest statistics, it appears possible that China could stem new infections over the next couple of months. But, what about the rest of the world? + +## Life Goes On — Sort Of + +Yesterday, I was told that I would not be allowed into the company, as I had embarked from Singapore, which had cases of the virus. Hence, I was advised to stay away from work for another 12 days. (It is a rule of the business complex.) A staff asked if we should fudge the rules for me. I declined and cited Kant’s Deontological Ethics — it is something that we often talked about within the company. + +So since yesterday, I have had been working from home, going out only to have my meals. + +{{< figure + default=true + src="img/a-3.webp" + >}} + +Besides the option of ordering food using online platforms, many restaurants are open in the normal sense of the word, albeit with some rules. For instance, I have had my lunch at an Italian eatery today (picture above) while working on my circuits and running simulations via remote access. I was however, the only person at the restaurant (I sat in the open) for that two hours, except for food delivery guys who dropped by every so often to pick up their orders. I finally left because it was too windy for me to have my WeChat teleconference. + +> Despite the strict quarantine measures and disruptions, Shanghai city hums along with quiet resolve and expansive tenacity, rapidly adjusting herself to the new circumstances — there have had been no disruption to water, electricity and food, and streets continue to be maintained. Somehow, even the cats in the vicinity of our workplace get fed too. + +{{< figure + default=true + src="img/a-4.webp" + >}} + +## Restoring Functions + +Our engineers and partners have made significant progress over the past two days to address our concerns regarding logistics and the supply chain. I was informed today that our manufacturing partners resumed operations yesterday and are producing our Espressif modules. A couple of new module designs were also being sent to our partners. + +I don’t remember if I have had ever been so happy about such routine matters—they now rank high on The Checklist. + +## The Virus + +In the cities other than Hubei, new infections are decreasing. In Shanghai, for instance, there were only 7 new cases detected today. In Hubei, there was a sharp rise in the number of infections (increase of more than 15,000) reported, and which was attributed to the change in the diagnostic criteria. The Hubei governor was also replaced by the central government today. + +It’s not a perfect day, but things are moving in the correct direction. + +Teo Swee Ann, CEO Espressif Systems + +13 Feb 2020 diff --git a/content/blog/accelerate-your-iot-development-with-the-espressif-webide/img/accelerate-1.webp b/content/blog/accelerate-your-iot-development-with-the-espressif-webide/img/accelerate-1.webp new file mode 100644 index 000000000..2dc5cbab5 Binary files /dev/null and b/content/blog/accelerate-your-iot-development-with-the-espressif-webide/img/accelerate-1.webp differ diff --git a/content/blog/accelerate-your-iot-development-with-the-espressif-webide/index.md b/content/blog/accelerate-your-iot-development-with-the-espressif-webide/index.md new file mode 100644 index 000000000..4e20194ad --- /dev/null +++ b/content/blog/accelerate-your-iot-development-with-the-espressif-webide/index.md @@ -0,0 +1,107 @@ +--- +title: "Accelerate Your IoT Development with the Espressif WebIDE" +date: 2023-04-17 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - brian-ignacio +tags: + - Espressif + - Eclipse Theia + - Docker + - Esp32 + - Ide + +--- +{{< figure + default=true + src="img/accelerate-1.webp" + >}} + +The [__Espressif Web IDE__ ](https://github.com/espressif/idf-web-ide) is an implementation of the [__Eclipse Theia__ ](https://theia-ide.org) framework with the [ESP-IDF extension for Visual Studio Code](https://github.com/espressif/vscode-esp-idf-extension) and few additional tools. You can see it in action in the Espressif DevCon22 presentation below. + +{{< youtube cXgCjGslvoI >}} + +If you haven’t used Eclipse Theia before, it is an open-source framework to develop Cloud & Desktop IDEs and tools in TypeScript with a Visual Studio Code UI and Visual Studio Code extensions support or extensions implemented in the [OpenVSX registry](https://open-vsx.org/). + +Most of the features of [ESP-IDF extension for Visual Studio Code](https://github.com/espressif/vscode-esp-idf-extension) are also available for the Espressif Web IDE. Specific commands are the chip serial port connection. For that we have implemented two additional tools: + +On the Web IDE side, there a couple commands implemented for each tool: + +For __ESP-IWIDC__ , click the menu *Remote* and then *Remote Flash* or *Remote Monitor*. For esptool-js, click the the menu *Remote* and then *Flash with Webserial* or *Monitor with Webserial*. You will need to select the serial device before the flashing or monitor starts. + +You can use the Espressif Web IDE in 2 ways, running directly from source code compilation or using the attached Dockerfile to build a docker container. + +```shell +git clone https://github.com/espressif/idf-web-ide.git +cd idf-web-ide +yarn +cd browser-app +yarn run start — port=8080 +``` + +Open __127.0.0.1:8080__ in your browser (Use Chrome for best experience). + +2. To run using Docker do: + +Pull the [latest docker image](https://hub.docker.com/r/espbignacio/idf-web-ide) using + +```shell +docker pull espbignacio/idf-web-ide +``` + +or build the docker image from the IDF-Web-IDE repository with: + +```shell +docker build . — tag espressif/idf-web-ide — platform linux/amd64 +``` + +Run the container with: + +```shell +docker run -d -e IWI_PORT=8080 -p 8080:8080 --platform linux/amd64 -v ${PWD}:/home/projects espressif/idf-web-ide +``` + +Open __127.0.0.1:8080__ in your browser (Use Chrome for best experience). + +If you want to use the [ESP-IWIDC](https://github.com/espressif/iwidc/) you can get a built executable from Windows [here](https://github.com/espressif/iwidc/releases) or use the Python script from the repository. + +Run the executable to start the ESP-IWIDC: + +```shell +.\dist\main.exe — port PORT +``` + +and to see available ports. + +```shell +.\dist\main.exe +``` + +If you are using the ESP-IWIDC python script directly, make sure to install required python packages with: + +```shell +pip3 install -r ${ESP-IWIDC}/requirements.txt +python3 main.py +python3 main.py - port [SERIAL_PORT_OF_ESP_32] +``` + +For the esptool-js commands you don’t need to install anything. + +The advantage of using the docker container is that you have a ESP-IDF ready docker container, the ESP32 QEMU fork and you don’t need to configure ESP-IDF for the IDE. Just open any ESP-IDF project and start coding! + +The Espressif Web IDE uses the [Clang OpenVSX plugin](https://open-vsx.org/extension/llvm-vs-code-extensions/vscode-clangd) to provide C/C++ language support. This plugin uses the __build/compile_commands.json__ file to provide *Go to declaration* and other language features. + +## Conclusion + +Give the [Espressif Web IDE](https://github.com/espressif/idf-web-ide) a try and let us know what can we add or improve here! You can also look at our previous post about the [ESP-IDF extension for Visual Studio Code](/whats-new-in-the-esp-idf-extension-for-vscode-7f571c24414f). + +## Related links: + +- [ESP-IDF Web IDE](https://github.com/espressif/idf-web-ide) +- [Eclipse Theia](https://theia-ide.org/) +- [ESP-IDF extension for Visual Studio Code](https://github.com/espressif/vscode-esp-idf-extension) +- [Espressif IDF Web Desktop Companion (ESP-IWIDC)](https://github.com/espressif/iwidc/) +- [esptool-js](https://github.com/espressif/esptool-js) +- [OpenVSX registry](https://open-vsx.org/) +- [Clang OpenVSX plugin](https://open-vsx.org/extension/llvm-vs-code-extensions/vscode-clangd) diff --git a/content/blog/accelerating-matter-device-manufacturing/img/accelerating-1.webp b/content/blog/accelerating-matter-device-manufacturing/img/accelerating-1.webp new file mode 100644 index 000000000..7ae870214 Binary files /dev/null and b/content/blog/accelerating-matter-device-manufacturing/img/accelerating-1.webp differ diff --git a/content/blog/accelerating-matter-device-manufacturing/img/accelerating-2.webp b/content/blog/accelerating-matter-device-manufacturing/img/accelerating-2.webp new file mode 100644 index 000000000..4f27dd55f Binary files /dev/null and b/content/blog/accelerating-matter-device-manufacturing/img/accelerating-2.webp differ diff --git a/content/blog/accelerating-matter-device-manufacturing/index.md b/content/blog/accelerating-matter-device-manufacturing/index.md new file mode 100644 index 000000000..de6f16c48 --- /dev/null +++ b/content/blog/accelerating-matter-device-manufacturing/index.md @@ -0,0 +1,74 @@ +--- +title: "Accelerating Matter Device Manufacturing" +date: 2023-02-19 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Matter + - Espressif + - Esp32 + +--- +[Espressif Matter Series](/matter-38ccf1d60bcd) #9 + +Given the latest developments in the IoT industry, there is a strong rush towards building Matter enabled smart devices. (If you are new to Matter, please read up about Matter in our series of blog posts [here](/matter-38ccf1d60bcd)). + +We have been actively working on creating solutions that help accelerate our customers to build and launch Matter-enabled devices faster and that too in a cost-effective way. An often overlooked, but important, part of the device production process is how fast can you manufacture devices on the line. This becomes especially important in the case of Matter, which places some unique requirements on each device. + +This blog post will talk about Espressif’s Matter Pre-Provisioning Service that allows you to quickly manufacture Matter-enabled devices. + +## Matter Pre-Provisioning Service + +> Espressif’s Matter Pre-Provisioning Service allows you to order modules from Espressif that are securely pre-programmed with the unique details that every Matter device needs to have. Once you receive the modules, you can directly put them on your PCBs and you are ready to go. Everything from DAC, to secure enablement is already taken care of on the modules. + +Let’s understand why such a service is even required and what it offers. + +## 1. Device Attestation + +When any Matter device is being commissioned, the commissioning agent (phone app) will ensure that this is a genuine Matter device. This process is called Device Attestation. + +For Device Attestation to happen, all Matter devices must have a unique set of certificates, called Device Attestation Certificates (DAC), that are programmed in them (You may read more about DACs in the [Matter Security Model](/matter-security-model-37f806d3b0b2) post). The DACs ascertain that the product, that is being commissioned, genuinely comes from Vendor X. + +These DACs are X.509 certificates that should chain back to a valid Product Attestation Authority (PAA) that is registered with the Connectivity Standards Alliance (CSA). This ensures that only some authority that is approved by the CSA can generate and distribute these DACs, thus ensuring authenticity of the devices. + +Espressif is an authorised PAA that can generate DACs for your devices. You can request modules that are securely pre-provisioned at Espressif’s end with the DACs created for your devices, before they are shipped out to you. Care is taken that the private key of the DACs never leaves the module, and the modules are securely locked before they are shipped out. + +For implementing this, Espressif uses 2 components: + +This ensures that the entire process is maintained and operated with the highest levels of security and compliance. + +{{< figure + default=true + src="img/accelerating-1.webp" + >}} + +## 2. Uniqueness + +Matter manufacturing requires a few unique objects to be programmed on each device. This includes the DACs as we discussed earlier. Every Matter device also requires a unique QR Code that allows it to get commissioned. Unique secrets corresponding to this QR Code should also be programmed into each device that allow apps to securely commission the device. + +As you may be aware, mass flashing common images on a high volume run is fairly easy. Having to program unique images per-device becomes costlier. Additionally, mapping those unique images, to the corresponding QR Code, that should be pasted on each device, is another task. + +{{< figure + default=true + src="img/accelerating-2.webp" + >}} + +Espressif’s Matter Pre-Provisioning Service will configure the modules with the DACs and the appropriate authentication credentials that are required for the proper operation of Matter. We will provide a manifest file that captures the details that are configured on all the modules. This typically includes information about the MAC Address of modules, serial numbers, if any, and the corresponding QR Codes that should go along with these modules. + +## 3. Security + +Finally, the DAC Certificates and the operational secrets need to be protected on the device from unauthorized access. It must be ensured that only trusted firmware, that executes on the chipset, has access to the DAC certificate. This requires the enablement of __secure boot, flash encryption__ and other security settings on all the chipsets. The Espressif manufacturing process is set up in such a way that these features are enabled in Espressif’s factory, but still enabling customers to program their production and test firmware on their own. + +Espressif’s Matter Pre-Provisioning Service will securely lock the modules, before being shipped out to you. + +## 4. Firmware Flashing + +Many of our customers also prefer that their modules are pre-programmed with their bootloader and firmware images (along with the other data that is configured so far). + +If you opt for this option, you can point us to your signed bootloader and the signed firmware that should be pre-programmed on all the modules before locking and shipping them out to you. + +We are very glad to see that this service is proving to be a significant accelerator for customers building Matter-enabled devices. If you are interested in this service, please reach out to [sales@espressif.com](mailto:sales@espressif.com) with your request. + +This article is part of a series of articles [*Espressif Matter Series*](/matter-38ccf1d60bcd). diff --git a/content/blog/alexa/img/alexa-1.webp b/content/blog/alexa/img/alexa-1.webp new file mode 100644 index 000000000..bdd791e5d Binary files /dev/null and b/content/blog/alexa/img/alexa-1.webp differ diff --git a/content/blog/alexa/index.md b/content/blog/alexa/index.md new file mode 100644 index 000000000..004f4c7f0 --- /dev/null +++ b/content/blog/alexa/index.md @@ -0,0 +1,35 @@ +--- +title: "Alexa" +date: 2018-10-24 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Alexa + - IoT + - Esp32 + - Technology + +--- +{{< figure + default=true + src="img/alexa-1.webp" + >}} + +Espressif’s Alexa SDK makes building Alexa-powered devices a breeze. These devices have microphones and speaker embedded within the device to provide the full Alexa experience. Alexa features like Conversation, Music Services, Alerts and Reminders are all supported within the SDK. The SDK also provides references phone apps that let you configure the device for the first time. + +We support two types of Alexa built-in device SDKs: + +- Using Espressif’s __Alexa Voice Services SDK__ : Ideal for building __Alexa-enabled speakers__ with support for Bluetooth A2DP Sink, A2DP Source, DLNA among other features. Amazon-certified speakers using this SDK are already launched in the market. +- Using Espressif’s SDK for __AVS for AWS IoT__ : Ideal for smart-devices with Alexa built-in capability. This SDK implements Amazon’s AVS integration for AWS-IoT. The same AWS-IoT connection is shared for voice exchange, as well as the smart device’s data exchange. This is fully Amazon-qualified and listed on their dev-kits page here: [https://developer.amazon.com/en-US/alexa/alexa-voice-service/dev-kits#smart-home-dev-kits](https://developer.amazon.com/en-US/alexa/alexa-voice-service/dev-kits#smart-home-dev-kits). + +We have certified solutions with DSP-G’s DBMD5P SoC and Synaptics CNX20921 SoC. These DSPs run the Wake-word engine that captures the local “Alexa” utterance. + +The SDK is available at: [https://github.com/espressif/esp-va-sdk](https://github.com/espressif/esp-va-sdk) + +Some relevant articles: + +- [Anatomy of a Voice-Integrated Device](/blog/anatomy-of-a-voice-integrated-device) +- [Espressif’s AVS SDK Release Announcement](/blog/espressifs-alexa-sdk-v1-0b1) +- [Espressif’s SDK for AVS integration for AWS IoT](https://www.espressif.com/en/news/ESP32-Vaquita-DSPG_and_SDK?position=0&list=AguoTi8cJOJycmcaOUTvPhV0fqCv3Z6oxZhbrasmZA4) diff --git a/content/blog/amazon-freertos-esp32-support/img/amazon-1.webp b/content/blog/amazon-freertos-esp32-support/img/amazon-1.webp new file mode 100644 index 000000000..d32f35a73 Binary files /dev/null and b/content/blog/amazon-freertos-esp32-support/img/amazon-1.webp differ diff --git a/content/blog/amazon-freertos-esp32-support/img/amazon-2.webp b/content/blog/amazon-freertos-esp32-support/img/amazon-2.webp new file mode 100644 index 000000000..15f487b00 Binary files /dev/null and b/content/blog/amazon-freertos-esp32-support/img/amazon-2.webp differ diff --git a/content/blog/amazon-freertos-esp32-support/index.md b/content/blog/amazon-freertos-esp32-support/index.md new file mode 100644 index 000000000..3850b845b --- /dev/null +++ b/content/blog/amazon-freertos-esp32-support/index.md @@ -0,0 +1,68 @@ +--- +title: "Amazon FreeRTOS — ESP32 Support" +date: 2018-06-19 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - mahavir-jain +tags: + - Esp32 + - IoT + - Embedded Systems + - Microcontrollers + - Framework + +--- +{{< figure + default=true + src="img/amazon-1.webp" + >}} + +## Preface + +[__Amazon FreeRTOS__ ](https://aws.amazon.com/freertos/) is the latest offering (after acquisition of FreeRTOS) from Amazon that tries to simplify cloud connectivity with Amazon services (e.g. Shadow, Green-grass etc.) It has support for multiple micro-controller platforms from different vendors. Our [__ESP32__ ](https://www.espressif.com/en/products/hardware/esp32/overview) is now officially supported in Amazon FreeRTOS. + +In this article we will discuss about — + +- ESP32 integration in Amazon FreeRTOS (using existing [__ESP-IDF__ ](https://github.com/espressif/esp-idf/)) +- Getting Started with ESP32 using Amazon FreeRTOS + +## Architecture + +Let us dig deeper in architecture of this offering in the context of ESP32 - + +{{< figure + default=true + src="img/amazon-2.webp" + >}} + +- Upstream or vanilla FreeRTOS had no support for theESP32 architecture (Xtensa LX6 dual core CPU). Support for this architecture is now available in the [__FreeRTOS V10 kernel__ ](https://github.com/aws/amazon-freertos/tree/main). As of now it only supports single core mode of operation. +- A slightly modified version of the [__ESP-IDF__ ](https://github.com/espressif/esp-idf/) is part of the Amazon FreeRTOS SDK itself. This IDF has all the required components including, hardware abstraction layer, Wi-Fi driver and other components that *do not conflict* with the ones already available in Amazon FreeRTOS SDK (e.g. Networking Stack, TLS stack etc.). Such a self contained package allows easier certification process as well. +- The [__WiFi portability__ ](https://github.com/aws/amazon-freertos/tree/main) layer acts as an abstraction, providing consistent application interface between different vendor platforms. Mostly the API for this layer helps in Wi-Fi interface/state management (Station and SoftAP) and power management. +- Another abstration layer is the secure socket layer shown above. It provides consistent application interface between different vendor’s network platforms (some of the vendors use custom Networking Stack) and interfacing with the mbedTLS stack. + +## Qualification + +The Amazon FreeRTOS Qualification Program (Amazon FQP) is for microcontroller (MCU) vendors for qualifying platforms (not SoC itself), and both ESP32-DevKitC and ESP-WROVER-KIT are certified in the latest release. + +For more information please refer to,[ https://aws.amazon.com/freertos/partners/](https://aws.amazon.com/freertos/partners/) + +## Getting Started + +Please refer to the official Getting Started Guide on the AWS website for latest instructions on working with Amazon FreeRTOS: [https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html](https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html) + +## Examples + +Please refer to [https://docs.aws.amazon.com/freertos/latest/userguide/freertos-mds-projects-struct.html](https://docs.aws.amazon.com/freertos/latest/userguide/freertos-mds-projects-struct.html) for navigating to examples, primarily includes: + +- MQTT — Client that both subscribes to and publishes to the same MQTT topic, as a result of which each time the MQTT client publishes a message to the remote MQTT broker, the broker sends the same message back to the client +- Shadow — Simple lightbulb example to illustrate how client application and things communicate with the Shadow service +- Greengrass — Simple example that performs discovery of AWS greengrass core device + +## Future Road-map (Near Term) + +Support for secure OTA updates using AWS is in Beta phase, please refer to, [https://docs.aws.amazon.com/freertos/latest/userguide/freertos-ota-dev.html](https://docs.aws.amazon.com/freertos/latest/userguide/freertos-ota-dev.html) + +This is certainly very important feature and as it evolves, all qualified vendors will support this, including Espressif. + +This is still at early stage, please stay tuned as expecting some exciting road-map (*with potential of use-cases it can cover*) here! diff --git a/content/blog/amazon-freertos/img/amazon-1.webp b/content/blog/amazon-freertos/img/amazon-1.webp new file mode 100644 index 000000000..039f7314e Binary files /dev/null and b/content/blog/amazon-freertos/img/amazon-1.webp differ diff --git a/content/blog/amazon-freertos/index.md b/content/blog/amazon-freertos/index.md new file mode 100644 index 000000000..1db9acc4e --- /dev/null +++ b/content/blog/amazon-freertos/index.md @@ -0,0 +1,24 @@ +--- +title: "Amazon FreeRTOS" +date: 2018-10-24 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Technology + - Esp32 + - IoT + +--- +{{< figure + default=true + src="img/amazon-1.webp" + >}} + +Amazon FreeRTOS is an operating system for microcontrollers that extends the FreeRTOS kernel with libraries that make it easy to connect devices to AWS services like AWS IoT Core and AWS GreenGrass. ESP32 is a certified and fully supported platform for Amazon FreeRTOS. + +Some relevant articles: + +- [Amazon FreeRTOS and ESP32](/blog/amazon-freertos-esp32-support) +- [Managing OTA Firmware Upgrades](/blog/esp32-ota-updates-amazon-freertos) diff --git a/content/blog/analysing-static-footprint/index.md b/content/blog/analysing-static-footprint/index.md new file mode 100644 index 000000000..b84852529 --- /dev/null +++ b/content/blog/analysing-static-footprint/index.md @@ -0,0 +1,110 @@ +--- +title: "Analysing Static Footprint" +date: 2018-05-13 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Building Products + +--- +The ESP32 is equipped with a 512KB of SRAM. While this may seem quite small, it can pack a lot of punch in this compact form if used well. + +As we use the various components and its features in our application firmware, the linker pulls in different functions and variables from these components. The linker will typically optimise out entities that aren’t being used (or referenced) from the current application firmware. So, depending upon what you do in your application, the contribution from various components to your footprint changes. + +The IDF provides a utility, idf_size.py, that lets you peek into the footprint utilisation so you could identify and optimise the relevant bits. The utility is also linked with the build scripts so you could directly run *make targets* to look at the footprint without having to remember a number of commands. + +Let’s look at some quick ways how this can be used to look at the effective static footprint. + +## Per-Component Size + +One way to look at the static footprint is to look at what impact every component has on your final firmware image. This can be done using the __size-components__ target of the build system. Executing this target after building the *examples/wifi/power_save* application shows me the following output: + +``` +$ __make IDF_PATH=~/work/idf size-components__ +Total sizes: + DRAM .data size: 14200 bytes + DRAM .bss size: 23224 bytes +Used static DRAM: 37424 bytes ( 143312 available, 20.7% used) +Used static IRAM: 62344 bytes ( 68728 available, 47.6% used) + Flash code: 368546 bytes + Flash rodata: 65916 bytes +Total image size:~ 511006 bytes (.bin may be padded larger) +Per-archive contributions to ELF file: + __Archive File DRAM .data & .bss IRAM Flash code & rodata Total__ + libnet80211.a 1976 8891 3358 92337 10206 116768 + liblwip.a 19 3865 0 72280 14962 91126 + libpp.a 855 6339 13035 40707 7311 68247 + libc.a 0 0 0 55343 3889 59232 + libphy.a 1334 869 4584 29104 0 35891 + libesp32.a 2685 436 8067 10719 7388 29295 + libwpa.a 0 682 0 20314 2320 23316 + libfreertos.a 4148 776 12215 0 1595 18734 +libnvs_flash.a 0 32 0 9497 2705 12234 + libgcc.a 4 20 104 9899 848 10875 +...upplicant.a 0 0 0 9492 4 9496 +...spi_flash.a 36 323 6465 912 1724 9460 + libheap.a 876 4 3390 1123 996 6389 + libdriver.a 24 4 0 883 4990 5901 + libsoc.a 669 8 3841 0 1239 5757 + libcoexist.a 1277 94 3344 0 137 4852 + libstdc++.a 8 20 0 2613 1253 3894 + libmbedtls.a 0 0 0 3109 320 3429 +...p_adapter.a 0 124 0 2578 316 3018 + libvfs.a 40 63 0 2212 417 2732 + libnewlib.a 152 252 750 463 95 1712 + libpthread.a 16 12 178 770 655 1631 + liblog.a 8 268 438 396 166 1276 + libmain.a 0 0 0 574 643 1217 + libcore.a 0 5 0 709 402 1116 + librtc.a 0 4 1090 0 0 1094 +...pp_update.a 0 0 0 123 725 848 + libhal.a 0 0 515 0 32 547 + libm.a 0 0 92 0 0 92 + libcxx.a 0 0 0 11 0 11 + libwps.a 0 1 0 0 0 1 + libwpa2.a 0 1 0 0 0 1 + libethernet.a 0 0 0 0 0 0 + ..._support.a 0 0 0 0 0 0 +``` + +As you can see from the output above, it will display footprint information that is contributed by all the components towards the firmware. The information is additionally displayed in multiple columns: + +- __DRAM .data__ : This is the size of the .*data* section of the component. This includes any pre-initialized data that can be read or written at runtime +- __DRAM .bss__ : This is the size of the .*bss* section of the component. This includes any global or statically defined variables and objects that are zero-initialised on boot-up. +- __IRAM__ : This is the size of the code (*.text*) section that needs to be loaded into IRAM. Note that most code can directly be executed from flash (XIP), without having to load it into IRAM. Typically code that is executed in interrupt context or accesses flash for read/write directly goes in here. +- __Flash Code__ : This is the size of the code (*.text*) section that is in the flash and is directly executed from there. Most of your code section will end up in this column. +- __Flash rodata__ : Any read-only data that is used by your firmware (strings, statically initialized and unmodifiable arrays) all go into this section. Since the flash can directly be accessed during execution, this need not be loaded into memory. +- __Total:__ The total contribution of this component. + +As you might have guessed the size contributions to the IRAM and DRAM section here are critical. Since SRAM is limiting factor (512KB) relative to flash (about 2–8 MB). + +## Per-Symbol Size + +Now Let’s say you found out that one of the components that you have written consumes much more memory that it should have. You can dig deeper by trying to check which symbols within this component contribute the most to the footprint. This can be done using the __size-symbols__ target to the build system. For example, + +``` +$ __make IDF_PATH=~/work/idf size-symbols COMPONENT=soc__ Total sizes: + DRAM .data size: 14200 bytes + DRAM .bss size: 23224 bytes +Used static DRAM: 37424 bytes ( 143312 available, 20.7% used) +Used static IRAM: 62344 bytes ( 68728 available, 47.6% used) + Flash code: 368546 bytes + Flash rodata: 65916 bytes +Total image size:~ 511006 bytes (.bin may be padded larger) +Symbols within the archive: libsoc.a (Not all symbols may be reported)__Symbols from section: .dram0.data__ str1.4(605) __func__$3446(23) __func__$3425(21) rtc_clk_cpu_freq_value(20) +Section total: 669__Symbols from section: .dram0.bss__ +s_cur_pll(4) s_cur_freq(4) +Section total: 8__Symbols from section: .iram0.text__ +rtc_init(1020) rtc_clk_cpu_freq_set(472) rtc_clk_bbpll_set(380) rtc_clk_cal_internal(369) .iram1(282) rtc_clk_cpu_freq_get(172) rtc_clk_32k_bootstrap(170) rtc_clk_32k_enable_internal(149) rtc_clk_wait_for_slow_cycle(129) rtc_time_get(96) rtc_clk_cpu_freq_value(96) rtc_clk_cal(78) rtc_clk_xtal_freq_get(68) rtc_clk_slow_freq_get_hz(51) rtc_clk_apb_freq_get(50) rtc_clk_32k_enable(49) rtc_clk_fast_freq_set(46) rtc_clk_slow_freq_set(43) clk_val_is_valid(32) .iram1.literal(28) rtc_clk_apb_freq_update(23) rtc_clk_slow_freq_get(16) clk_val_to_reg_val(14) reg_val_to_clk_val(8) +Section total: 3841Symbols from section: .iram0.vectorsSection total: 0Symbols from section: .flash.textSection total: 0__Symbols from section: .flash.rodata__ +soc_memory_regions(704) soc_memory_types(320) str1.4(159) soc_reserved_regions(48) soc_reserved_region_count(4) soc_memory_region_count(4) +Section total: 1239 +``` + +Notice that we pass an additional parameter *COMPONENT=* in the make command line to get per symbol information of this component. In the example above, we requested information for the component ‘soc’. + +This caused the tool to display how much every symbol (function or variable/object) from this component contributed to the firmware’s footprint. Notice how information about how much size every function contributed to __.iram0.text__ is shown in the output above. Also, because the arrays __soc_memory_types__ and __soc_memory_regions__ (defined in soc_memory_layout.c) are defined as ‘const’ are put into the flash since it is read-only data. + +This information can be effectively used to identify exactly what parts of your components are contributing to the firmware footprint and then help you focus on optimizing these parts effectively. diff --git a/content/blog/anatomy-of-a-voice-integrated-device/img/anatomy-1.webp b/content/blog/anatomy-of-a-voice-integrated-device/img/anatomy-1.webp new file mode 100644 index 000000000..e50d01b40 Binary files /dev/null and b/content/blog/anatomy-of-a-voice-integrated-device/img/anatomy-1.webp differ diff --git a/content/blog/anatomy-of-a-voice-integrated-device/img/anatomy-2.webp b/content/blog/anatomy-of-a-voice-integrated-device/img/anatomy-2.webp new file mode 100644 index 000000000..f33cf2e6b Binary files /dev/null and b/content/blog/anatomy-of-a-voice-integrated-device/img/anatomy-2.webp differ diff --git a/content/blog/anatomy-of-a-voice-integrated-device/img/anatomy-3.webp b/content/blog/anatomy-of-a-voice-integrated-device/img/anatomy-3.webp new file mode 100644 index 000000000..0f0ad559d Binary files /dev/null and b/content/blog/anatomy-of-a-voice-integrated-device/img/anatomy-3.webp differ diff --git a/content/blog/anatomy-of-a-voice-integrated-device/index.md b/content/blog/anatomy-of-a-voice-integrated-device/index.md new file mode 100644 index 000000000..bbef9da5c --- /dev/null +++ b/content/blog/anatomy-of-a-voice-integrated-device/index.md @@ -0,0 +1,72 @@ +--- +title: "Anatomy of a Voice-Integrated Device" +date: 2018-08-12 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Alexa + - Framework + - Esp32 +aliases: + - anatomy-of-a-voice-controlled-device +--- +Recently I have seen significant interest from OEMs in embedding voice assistants, like Alexa, directly into their products. Not just linking with a voice-assistant using a cloud to cloud integration, but by having the product itself be voice-enabled (with microphones and speakers). + +For example, a washing machine with a voice interface for starting it, or a smart switch with “Echo” embedded into it. + +Let us have a quick look at the internal components of a typical Voice-Integrated device. We will take Alexa as an example for this post. + +## The Record Path + +When we typically say “__Alexa__ , what is the time”, the word “Alexa” is detected locally, while the rest of the sentence “what is the time” is detected in the cloud (in this case by the Alexa Voice Service). The keyword Alexa in this case is called a __Wake-Word__ . + +The typical journey of the record path is as shown below: + +{{< figure + default=true + src="img/anatomy-1.webp" + >}} + +The sounds that the device hears using the microphone are typically processed to perform noise and echo cancellation first. + +Then a wake-word engine processes the sound to detect if a wake-word was spoken. The wake-word engine is typically trained with a sample-set of data with the particular accents that the end-users will utter. When the wake-word engine detects the wake-word it notifies the Alexa client to start processing. + +The Alexa client now knows that the user has uttered the wake-word, and may be now asking a query. The client then starts capturing the audio stream and sends it up to the cloud. + +The cloud interprets the user’s command and then instructs the device to stop recording and take the action that the user requested. + +## Mapping to Hardware + +So how do the above components map to typical hardware components? Let’s quickly check below: + +{{< figure + default=true + src="img/anatomy-2.webp" + >}} + +A combination of connectivity processors and digital signal processors can be used to achieve this. + +As in the diagram above the simplest case is all the components are running on the same host that offers connectivity too. For example, ESP32 can be used to run the algorithms for noise cancellation, the wake-word engine and also the Alexa client to transmit data over Wi-Fi. Since it is a single chip solution this will be the lowest cost solution for the job at hand. + +Then there are options of offloading the echo cancellation/beam-forming or wake-word engine to a dedicated DSP. This combination can be used to optimise for use cases where far-field interactions need to be supported, or where a wake-word needs to be detected while also playing music (barge-in). A DSP could also offer the capacity to load a wake-word engine with a much larger wake-word sample set. + +Depending upon the use-case at hand, the appropriate selection can be made for supporting it in the most effective manner. + +## The Playback Path + +In most cases, the playback path is fairly simple. + +{{< figure + default=true + src="img/anatomy-3.webp" + >}} + +In its simplest form, the playback path consists of the ESP32, acting as a client, fetching the encoded audio data (MP3, AAC etc), decoding it and forwarding the samples to a DAC which then drives a speaker. + +In case hardware options with DSP are used, the playback stream may also have to be provided to the DSP for performing acoustic echo cancellation. Depending upon the DSP, it can drive the DAC by itself, or the data needs to be duplicated (in hardware or software) for the DSP. + +We are looking at voice-controlled devices in 2 major ways: a) those with voice assistants (like Alexa) that are running on the ESP32, and b) those with conversational interfaces (like Amazon-Lex or Google DialogFlow). Stay tuned for an upcoming post on these approaches. + +If you are intereted in building Voice-Controlled Devices with ESP32, we would love to hear about it. Please reach out to sales@espressif.com with the subject line “Voice-Controlled Devices”. diff --git a/content/blog/announcing-aws-iot-reference-example-for-esp32-c3/img/announcing-1.webp b/content/blog/announcing-aws-iot-reference-example-for-esp32-c3/img/announcing-1.webp new file mode 100644 index 000000000..c29ac7fa4 Binary files /dev/null and b/content/blog/announcing-aws-iot-reference-example-for-esp32-c3/img/announcing-1.webp differ diff --git a/content/blog/announcing-aws-iot-reference-example-for-esp32-c3/img/announcing-2.webp b/content/blog/announcing-aws-iot-reference-example-for-esp32-c3/img/announcing-2.webp new file mode 100644 index 000000000..5bd0d1ba2 Binary files /dev/null and b/content/blog/announcing-aws-iot-reference-example-for-esp32-c3/img/announcing-2.webp differ diff --git a/content/blog/announcing-aws-iot-reference-example-for-esp32-c3/index.md b/content/blog/announcing-aws-iot-reference-example-for-esp32-c3/index.md new file mode 100644 index 000000000..59c4d39e1 --- /dev/null +++ b/content/blog/announcing-aws-iot-reference-example-for-esp32-c3/index.md @@ -0,0 +1,66 @@ +--- +title: "Announcing AWS IoT Reference Example for ESP32-C3" +date: 2022-05-11 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - dhaval-gujar +tags: + - '' + +--- +We had [announced](/support-for-lts-release-of-aws-iot-device-sdk-for-embedded-c-on-esp32-8eeeea28b79b) the availability of AWS IoT LTS libraries for ESP32 in beta in esp-aws-iot repository in August, 2021. Since then, many of our customers and independent developers have been using these libraries that we have ported and writing applications based on the examples. + +This beta release of the AWS LTS libraries provided individual examples showcasing usage of a particular AWS IoT related service. It had the following structure: + +{{< figure + default=true + src="img/announcing-1.webp" + >}} + +We are pleased to announce the [stable release](https://github.com/espressif/esp-aws-iot/) of esp-aws-iot on GitHub and a [reference example](https://github.com/FreeRTOS/iot-reference-esp32c3) for the ESP32-C3 developed [in collaboration](https://www.freertos.org/featured-freertos-iot-integration-targeting-an-espressif-esp32-c3-risc-v-mcu/) with the AWS team. The combination of these repositories provides a production-ready starting point for making applications that connect to AWS IoT Core using esp-aws-iot. + +{{< figure + default=true + src="img/announcing-2.webp" + >}} + +The main features of this release are listed below: + +## 1. Closer to Production Example + +While the standalone examples provided a clear path to use a particular LTS library, it was challenging to build a production application based only on the standalone examples. To address this, we have now made available a reference example for the ESP32-C3 that provides a better starting point. The reference example is built from the ground up to provide a reliable application that can handle and recover from real world cases like MQTT-level disconnections or Wi-Fi disconnections. + +It also comes baked in with Espressif’s [Unified Provisioning](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/provisioning/provisioning.html) that allows you to use our phone apps (available in open source format for [Android](https://github.com/espressif/esp-idf-provisioning-android) and [iOS](https://github.com/espressif/esp-idf-provisioning-ios) and on the [Google Play Store](https://play.google.com/store/apps/details?id=com.espressif.provble) and [Apple App Store](https://apps.apple.com/app/esp-ble-provisioning/id1473590141)) for providing the Wi-Fi credentials to the device and can be easily extended to send additional information. + +A major goal while designing the reference example, was to allow extensibility and cover a vast majority of real-world scenarios and considerations. + +## 2. Security Best Practices + +One of the important highlights of the reference example is that it is designed with security best practices in mind and provides a [comprehensive guide](https://github.com/FreeRTOS/iot-reference-esp32c3/blob/main/UseSecurityFeatures.md) for following them in production use-cases. + +It makes use of the [Digital Signature Peripheral](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/peripherals/ds.html) on the ESP32-C3, which provides a hardware root-of-trust and secure storage for certificates. This ensures that the device identity remains protected using hardware security. + +Additionally, the guide provides steps for production security considerations like enabling [Flash Encryption](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/security/flash-encryption.html) and [Secure Boot](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/security/secure-boot-v2.html) which are now de-facto features in any secure connected device. + +## 3. Combination of AWS Libraries and Features + +Most of the real world scenarios use not one, but a combination of the AWS LTS libraries. To facilitate these use-cases, the reference example integrates various libraries, like coreMQTT, coreJSON and AWS OTA. + +The reference example has three integrated functionalities:1. __*ota_over_mqtt_demo*__ : This demo uses the AWS IoT OTA service for FreeRTOS to configure and create OTA updates.2. __*sub_pub_unsub_demo*__ : The demo creates tasks which subscribe to a topic on AWS IoT Core, publish a constant string to the same topic, receive their publish, and then unsubscribes from the topic in a loop.3. __*temp_sub_pub_and_led_control_demo*__ : This demo creates a task which subscribes to a topic on AWS IoT Core. This task then reads the temperature from the onboard temperature sensor, publishes this information in JSON format to the same topic, and then receives this publish in a loop. This demo also enables a user to send a JSON packet back to the device to turn an LED off or on. + +It is simple to extend the reference example, by adding your own application logic or modifying one of the existing ones to suit your needs. + +## 4. Libraries as Individual IDF Components + +As a side-effect of the restructuring of esp-aws-iot SDK in this context, we now provide ability to use each AWS LTS library as a standalone ESP-IDF component that can easily be added to any example. Each library comes with its own port layer and configuration that is easy to manage for the application. + +## Getting Started + +esp-aws-iot is currently supported to work on ESP-IDF [v4.3](https://github.com/espressif/esp-idf/tree/release/v4.3) and [v4.4](https://github.com/espressif/esp-idf/tree/release/v4.4) release branches, you can find the steps to install and setup ESP-IDF [here](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/get-started/index.html).You can find the stable release of esp-aws-iot [here](https://github.com/espressif/esp-aws-iot/) and the Getting Started Guide for the reference example for the ESP32-C3 [here](https://github.com/FreeRTOS/iot-reference-esp32c3/blob/main/GettingStartedGuide.md). + +We hope that the stable release of the esp-aws-iot repo together with the reference example simplifies and speeds up the development of your applications that connect to AWS IoT Core. + +We will make the reference example available for other SoCs shortly. + +If you run into any problems, you can file an issue on the respective repos. diff --git a/content/blog/announcing-esp-zerocode/img/announcing-1.webp b/content/blog/announcing-esp-zerocode/img/announcing-1.webp new file mode 100644 index 000000000..ac86eb57b Binary files /dev/null and b/content/blog/announcing-esp-zerocode/img/announcing-1.webp differ diff --git a/content/blog/announcing-esp-zerocode/img/announcing-2.webp b/content/blog/announcing-esp-zerocode/img/announcing-2.webp new file mode 100644 index 000000000..9acc883fa Binary files /dev/null and b/content/blog/announcing-esp-zerocode/img/announcing-2.webp differ diff --git a/content/blog/announcing-esp-zerocode/img/announcing-3.webp b/content/blog/announcing-esp-zerocode/img/announcing-3.webp new file mode 100644 index 000000000..e46e36432 Binary files /dev/null and b/content/blog/announcing-esp-zerocode/img/announcing-3.webp differ diff --git a/content/blog/announcing-esp-zerocode/img/announcing-4.webp b/content/blog/announcing-esp-zerocode/img/announcing-4.webp new file mode 100644 index 000000000..9d3eac5ea Binary files /dev/null and b/content/blog/announcing-esp-zerocode/img/announcing-4.webp differ diff --git a/content/blog/announcing-esp-zerocode/img/announcing-5.webp b/content/blog/announcing-esp-zerocode/img/announcing-5.webp new file mode 100644 index 000000000..bcd1ad580 Binary files /dev/null and b/content/blog/announcing-esp-zerocode/img/announcing-5.webp differ diff --git a/content/blog/announcing-esp-zerocode/img/announcing-6.webp b/content/blog/announcing-esp-zerocode/img/announcing-6.webp new file mode 100644 index 000000000..4faeba26b Binary files /dev/null and b/content/blog/announcing-esp-zerocode/img/announcing-6.webp differ diff --git a/content/blog/announcing-esp-zerocode/index.md b/content/blog/announcing-esp-zerocode/index.md new file mode 100644 index 000000000..4bf8fc281 --- /dev/null +++ b/content/blog/announcing-esp-zerocode/index.md @@ -0,0 +1,102 @@ +--- +title: "Announcing ESP ZeroCode" +date: 2023-08-20 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - chirag-atal +tags: + - Esp32 + - Matter + - IoT + +--- +{{< figure + default=true + src="img/announcing-1.webp" + >}} + +Today Espressif is launching the ESP ZeroCode. This is a web application that lets you quickly prepare Matter-certifiable firmware, as per your requirements, in just a few clicks. You describe the kind of product you wish to create, the features you want to have, and its hardware configuration, that’s it. You can instantly try out the generated firmware on the physical hardware. If you don’t like something, you go back and tweak it all you want. This is truly a magical experience, try creating a product now at the [ESP ZeroCode Console](https://zerocode.espressif.com/). + +{{< figure + default=true + src="img/announcing-2.webp" + >}} + +Once you are satisfied, you can directly place orders, and get the ESP ZeroCode modules delivered to you. The ESP ZeroCode modules are pre-flashed with the firmware and all the contents required to make this a fully functional Matter device. All the complexities of unique manufacturing and programming are already taken care of. + +With ESP ZeroCode, you skip the development, as well as the maintenance phase of a typical product cycle. You directly manufacture and launch your products in the market. Espressif continues to maintain the firmware with the latest updates and security fixes to ensure that your in-field devices are always secure and Matter compatible. + +{{< figure + default=true + src="img/announcing-3.webp" + >}} + +## Exceptional End-User Experience + +All ESP ZeroCode modules are Matter certified, they work out of the box with any other Matter ecosystem of your choice. For all these platforms your users do not need a separate phone app to talk to these devices. The devices can be configured and controlled directly through leading ecosystem vendor apps or through the respective voice assistants; guaranteeing the best experience your users can have with your products. + +{{< figure + default=true + src="img/announcing-4.webp" + >}} + +## Cost-optimized + +Matter standard compatibility results in reduced direct and indirect product costs. + +For direct cost savings— Matter compatible devices don’t necessarily need to have an always-on cloud connectivity. They can be controlled remotely using the ecosystem hubs (such as Amazon Echo, Apple HomePod, Apple TV, or Google Nest hubs). The voice control too doesn’t require cloud-to-cloud messaging as voice assistants control the devices using Matter protocol in the local network. + +In terms of indirect cost savings — You don’t have to develop and maintain phone apps or voice assistant skills. Activities like Matter-compatible firmware development, maintenance, certification, and device manufacturing, which otherwise can add to the cost, is handled by Espressif in this ZeroCode offering. + +## Simplified Manufacturing + +When you order ESP ZeroCode modules, the hardware modules are pre-flashed with all the specific details necessary for your product and its configuration. The per-device unique configurations like Device Attestation Certificates, QR codes, device identifiers, and other details, which usually take longer on the factory line, are also pre-programmed. + +Specifically, Device Attestation Certificates provisioning requires setting up engagement with some signing service and a secure manufacturing setup which otherwise can add to the cost and time significantly. With ZeroCode modules you get this out of the box. + +This means all you have to do is mount these modules on your PCBs, apply the corresponding QR code stickers, and you are good to go. Everything else is already taken care of. + +## Product Branding + +The ESP ZeroCode modules are so certified that you may use the *Matter* badge on your product packaging (actual logos may vary). This logo helps the consumers choose products which they can be assured of having Matter compliance and hence greater interoperability. + +{{< figure + default=true + src="img/announcing-5.webp" + >}} + +The ESP ZeroCode modules are, optionally, certified to work well with ecosystem vendors as well. This allows for more seamless integration with these ecosystems. If opted, additional badges of __Works with Apple Home,__ and __Works With Google Home,__ may be used on your product packaging subject to your product meeting the guidelines as highlighted in the respective programs + +## Secure, Robust and Well-maintained + +The ESP ZeroCode modules, by default, have the highest possible security settings, like secure boot and flash encryption, configured on them. + +Additionally, the firmware is closely aligned with Matter’s open-source repository. Espressif ensures that the ESP ZeroCode modules will continue to get over-the-air (OTA) firmware upgrades for the next 3 years so that the latest security fixes are deployed on these devices as early as possible. + +## Supported Device Types + +{{< figure + default=true + src="img/announcing-6.webp" + >}} + +Today, the ESP ZeroCode portal supports a wide variety of devices including light bulbs, panels, downlights, lamps, LED strips, switches, wall sockets, and blind controllers among others. For all these devices, you may choose either Wi-Fi or 802.15.4/Thread-based connectivity. + +We are currently working on supporting more configurable device features as well as device types. If you are looking for a specific device type, please reach out to [zerocode@espressif.com](mailto:zerocode@espressif.com) with your request. + +## Get Going + +If you find this exciting, head over to the [ESP ZeroCode console](https://zerocode.espressif.com) and start creating your product. With the *Try in ESP Launchpad *feature you can instantly try the configured product, and once satisfied place volume orders. + +We are excited about the launch of ESP ZeroCode and look forward to enabling great end-user experiences! + +We would love to hear any feedback you may have or any new product/feature requests at: [zerocode@espressif.com](mailto:zerocode@espressif.com). + +Disclaimers: All trademarks and copyrights are property of their respective owners. + +Amazon Alexa is a trademark of Amazon.com, Inc, or its affiliates. + +Apple and Apple Home are trademarks of Apple Inc., registered in the U.S. and other countries and regions. + +Google and Google Home are trademarks of Google LLC. diff --git a/content/blog/announcing-matter-previously-chip-on-esp32/img/announcing-1.webp b/content/blog/announcing-matter-previously-chip-on-esp32/img/announcing-1.webp new file mode 100644 index 000000000..e9fbb4583 Binary files /dev/null and b/content/blog/announcing-matter-previously-chip-on-esp32/img/announcing-1.webp differ diff --git a/content/blog/announcing-matter-previously-chip-on-esp32/img/announcing-2.webp b/content/blog/announcing-matter-previously-chip-on-esp32/img/announcing-2.webp new file mode 100644 index 000000000..8e57540c2 Binary files /dev/null and b/content/blog/announcing-matter-previously-chip-on-esp32/img/announcing-2.webp differ diff --git a/content/blog/announcing-matter-previously-chip-on-esp32/img/announcing-3.webp b/content/blog/announcing-matter-previously-chip-on-esp32/img/announcing-3.webp new file mode 100644 index 000000000..d67d5036d Binary files /dev/null and b/content/blog/announcing-matter-previously-chip-on-esp32/img/announcing-3.webp differ diff --git a/content/blog/announcing-matter-previously-chip-on-esp32/index.md b/content/blog/announcing-matter-previously-chip-on-esp32/index.md new file mode 100644 index 000000000..62ba96695 --- /dev/null +++ b/content/blog/announcing-matter-previously-chip-on-esp32/index.md @@ -0,0 +1,104 @@ +--- +title: "Announcing Matter (previously ‘CHIP’) on ESP32" +date: 2021-05-25 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - hrishikesh-dhayagude +tags: + - release v4.3 + - Esp32 + - IoT + - Matter + +--- +{{< figure + default=true + src="img/announcing-1.webp" + >}} + +## Introduction + +[Matter](https://buildwithmatter.com), previously project CHIP, is the new foundation for connected things. Guided by the [Connectivity Standards Alliance](http://csa-iot.org/), and developed through collaboration amongst all the leaders of the IoT industry, Matter focuses on building connected devices that are secure, reliable, and importantly, seamless to use. + +Espressif has been a part of the Matter initiative since early days, and we have been focusing on making it easy to develop and use Matter with Espressif’s line of SoCs. In this article, we will discuss the steps to get your first Matter application up and running on an ESP32. In upcoming articles, we will discuss various technical details of Matter and explore ways to quickly build Matter certified devices on Espressif platforms. + +## Architecture + +{{< figure + default=true + src="img/announcing-2.webp" + >}} + +As illustrated above, Matter defines the application layer that will be deployed on devices and controllers as well as supported IPv6-based networks to help achieve the interoperability goals. Matter will initially support Wi-Fi and Thread for core communications and Bluetooth Low Energy (BLE) to simplify device commissioning and setup. + +## Matter on ESP32 + +## Matter SDK + +The [Matter SDK](https://github.com/project-chip/connectedhomeip) is an open source repository for the implementation of the specification and continues to be under active development. ESP32 has been a supported platform in the Matter SDK since the very beginning. At present, it is the only platform that offers support of both Wi-Fi as well as BLE. ESP32 supports commissioning (initial device configuration) over BLE as well as Wi-Fi SoftAP; and supports operational communication over Wi-Fi. + +## Sample Examples + +You could try either of the following examples: + +Either of these examples can be tested against a Matter controller. The Matter SDK provides reference implementation of controllers: + +## Getting Started + +Let’s look at the steps to try the above examples on ESP32. + +We use Espressif IoT Development Framework (ESP-IDF) [release v4.3](https://github.com/espressif/esp-idf/releases/tag/v4.3) to try this out. + +{{< figure + default=true + src="img/announcing-3.webp" + >}} + +## Build the Python Controller + +``` +$ cd /path/to/connectedhomeip$ ./scripts/build_python.sh -m platform +``` + +- Execute the controller and establish a secure session over BLE. BLE is the default mode in the application and is configurable through menuconfig. + +``` +$ source ./out/python_env/bin/activate$ chip-device-ctrlchip-device-ctrl > ble-scanchip-device-ctrl > connect -ble 3840 20202021 135246 +``` + +__Parameters:__ + +- Add credentials of the Wi-Fi network you want the ESP32 to connect to, using the AddWiFiNetwork command and then enable the ESP32 to connect to it using EnableWiFiNetwork command. In this example, we have used TESTSSID and TESTPASSWD as the SSID and passphrase respectively. + +``` +chip-device-ctrl > zcl NetworkCommissioning __AddWiFiNetwork__ 135246 0 0 ssid=str:__TESTSSID__ credentials=str:__TESTPASSWD__ breadcrumb=0 timeoutMs=1000chip-device-ctrl > zcl NetworkCommissioning __EnableNetwork__ 135246 0 0 networkID=str:__TESTSSID__ breadcrumb=0 timeoutMs=1000 +``` + +- Close the BLE connection to ESP32, as it is not required hereafter. + +``` +chip-device-ctrl > close-ble +``` + +- Resolve DNS-SD name and update address of the node in the device controller. + +``` +chip-device-ctrl > resolve 135246 +``` + +- Use the OnOff cluster command to control the OnOff attribute. This allows you to toggle a parameter implemented by the device to be On or Off. + +``` +chip-device-ctrl > zcl OnOff Off 135246 1 0 +``` + +> Note: All the above commands have help associated with them that can assist with the parameters. + +The above commands help you try the common functionality that is exposed by Matter on the ESP32. + +## ESP32-C3 Support + +ESP32-C3 support is integrated in Matter. Please follow the READMEs to run the examples on ESP32-C3 + +Stay tuned for more updates on Matter and ESP32. Happy hacking! diff --git a/content/blog/announcing-the-arduino-esp32-core-version-3-0-0/index.md b/content/blog/announcing-the-arduino-esp32-core-version-3-0-0/index.md new file mode 100644 index 000000000..fd08ae785 --- /dev/null +++ b/content/blog/announcing-the-arduino-esp32-core-version-3-0-0/index.md @@ -0,0 +1,214 @@ +--- +title: "Announcing the Arduino ESP32 Core version 3.0.0" +date: 2023-11-02 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - pedro-minatel +tags: + - Arduino + - IoT + - AIoT + - ESP32 + - DIY +--- + +Espressif Systems is announcing the new release of the Arduino ESP32 core including support for the ESP32-C6 and ESP32-H2 with the most recent ESP-IDF 5.1 + +Back in September 2021, Arduino ESP32 Core version 2.0.0 was announced and introduced the support for the ESP32-S2, ESP32-S3 (in a later release) and ESP32-C3. This release was a huge milestone for the community not only because of the new SoCs (System on Chips) support but also because of the new era for the project, including an enormous number of new features, bug fixes, new examples, drivers, and the core documentation in 14 releases, 800 commits have been added by 88 contributors after the 2.0.0 release. + +Since the Arduino ESP32 core version 2.0.0, new chips became available, and new features are now needed to keep and improve the developer’s experience and the integration with Arduino IDE (Integrated Development Environment). To continue with the remarkable success of version 2.0.0, the Arduino ESP32 core team is working hard in cooperation with the community to not stop making history. + +Now it is time to announce the Arduino ESP32 Core major version 3.0.0 release with new SoC’s support (now including support for ESP32-C6 and ESP32-H2), API improvements and breaking changes. + +## ESP32-C6 + +nnounced in 2022, this new SoC from the C-series introduced the Wi-Fi 6 and the 802.15.4. + +A low-power and cost-effective 2.4 GHz Wi-Fi 6 + Bluetooth 5 (LE) + Thread/Zigbee SoC, with a 32-bit RISC-V core, for securely connected devices. + +[ESP32-C6 Datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-c6_datasheet_en.pdf) + +## ESP32-H2 + +This new SoC from the new H-series is the latest 802.15.4 (Thread and Zigbee) with Bluetooth, however, this time without Wi-Fi connectivity. + +Espressif’s IEEE 802.15.4 + Bluetooth 5 (LE) SoC, powered by a 32-bit RISC-V core, designed for low power and secure connectivity. + +[ESP32-H2 Datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-h2_datasheet_en.pdf) + +## Moving from 2.0.X version to 3.0.0 + +The new Arduino ESP32 core is still under development, however, you can test the development version. + +Since this is a development version, you might encounter some issues. You can report them to Arduino ESP32 GitHub issue tracker. + +The expected stable release of the latest version is December 2023 and the 2.0.x will be under support maintenance until July 2024 then will be discontinued. + +Some of the major changes in version 3.0.0 are related to APIs. The changes include the updated examples to be compatible with the new APIs. + +Make sure to review and test your application. To help the migration from the Arduino ESP32 core 2.0.x to 3.0.0, we prepared a guide that will assist you with the migration process. Here is the [Migration Guide](https://docs.espressif.com/projects/arduino-esp32/en/latest/migration_guides/migration_guides.html). + +If you want to see all the changes in the development release alpha, here is the [full change log](https://github.com/espressif/arduino-esp32/releases/tag/3.0.0-alpha1). + +## Major Changes from the 2.0.x to 3.0.0 + +Here are the major changes from version 2.0.x to 3.0.0. + +### Peripheral Manager + +The Peripheral Manager was created to help users and avoid peripheral configuration with GPIOs mistakes. This new functionality will be transparent to the user; however, it will warn the user about the current peripheral configuration. + +Manages the peripherals initialization and avoid common issues like: +- Same GPIO being used on two peripherals at the same time +- Restricted GPIOs being used on some other peripherals, like FLASH and PSRAM +- Prints the report after the initialization to show all peripherals being used +- Helps on the peripheral management on different ESPs families + +ome ESPs have a different number of peripherals, channels, and limits. + +For example, if you configure the GPIO18 for the SPI peripheral and then after the SPI initialization you set the same GPIO18 for the RMT peripheral, the SPI will be deinitialized. + +The Peripheral Manager prints in the Verbose Debug Level, a full report including chip information, memory allocation, partitions, software information, board details, and the GPIO mapping. Here is an example of the Peripheral Manager report when the following peripherals are initialized: + +```log +ESP-ROM:esp32c3-api1-20210207 +Build:Feb 7 2021 +rst:0x1 (POWERON),boot:0xc (SPI_FAST_FLASH_BOOT) +SPIWP:0xee +mode:DIO, clock div:1 +load:0x3fcd5820,len:0x458 +load:0x403cc710,len:0x814 +load:0x403ce710,len:0x2878 +entry 0x403cc710 +=========== Before Setup Start =========== +Chip Info: +------------------------------------------ + Model : ESP32-C3 + Package : 0 + Revision : 3 + Cores : 1 + Frequency : 160 MHz + Embedded Flash : No + Embedded PSRAM : No + 2.4GHz WiFi : Yes + Classic BT : No + BT Low Energy : Yes + IEEE 802.15.4 : No +------------------------------------------ +INTERNAL Memory Info: +------------------------------------------ + Total Size : 341480 B ( 333.5 KB) + Free Bytes : 312940 B ( 305.6 KB) + Allocated Bytes : 24960 B ( 24.4 KB) + Minimum Free Bytes: 312940 B ( 305.6 KB) + Largest Free Block: 294900 B ( 288.0 KB) +------------------------------------------ +Flash Info: +------------------------------------------ + Chip Size : 4194304 B (4 MB) + Block Size : 65536 B ( 64.0 KB) + Sector Size : 4096 B ( 4.0 KB) + Page Size : 256 B ( 0.2 KB) + Bus Speed : 80 MHz + Bus Mode : QIO +------------------------------------------ +Partitions Info: +------------------------------------------ + nvs : addr: 0x00009000, size: 20.0 KB, type: DATA, subtype: NVS + otadata : addr: 0x0000E000, size: 8.0 KB, type: DATA, subtype: OTA + app0 : addr: 0x00010000, size: 1280.0 KB, type: APP, subtype: OTA_0 + app1 : addr: 0x00150000, size: 1280.0 KB, type: APP, subtype: OTA_1 + spiffs : addr: 0x00290000, size: 1408.0 KB, type: DATA, subtype: SPIFFS + coredump : addr: 0x003F0000, size: 64.0 KB, type: DATA, subtype: COREDUMP +------------------------------------------ +Software Info: +------------------------------------------ + Compile Date/Time : Nov 2 2023 10:06:48 + Compile Host OS : windows + ESP-IDF Version : v5.1.1-577-g6b1f40b9bf-dirty + Arduino Version : 3.0.0 +------------------------------------------ +Board Info: +------------------------------------------ + Arduino Board : ESP32C3_DEV + Arduino Variant : esp32c3 + Arduino FQBN : esp32:esp32:esp32c3:JTAGAdapter=default,CDCOnBoot=default,PartitionScheme=default,CPUFreq=160,FlashMode=qio,FlashFreq=80,FlashSize=4M,UploadSpeed=921600,DebugLevel=debug,EraseFlash=none +============ Before Setup End ============ +[ 380][I][esp32-hal-i2c.c:99] i2cInit(): Initialising I2C Master: sda=8 scl=9 freq=100000 +=========== After Setup Start ============ +INTERNAL Memory Info: +------------------------------------------ + Total Size : 341480 B ( 333.5 KB) + Free Bytes : 314976 B ( 307.6 KB) + Allocated Bytes : 22508 B ( 22.0 KB) + Minimum Free Bytes: 312360 B ( 305.0 KB) + Largest Free Block: 286708 B ( 280.0 KB) +------------------------------------------ +GPIO Info: +------------------------------------------ + 8 : I2C_MASTER + 9 : I2C_MASTER + 20 : UART_RX + 21 : UART_TX +============ After Setup End ============= +``` + +### ESP-IDF 5.1 + +The Arduino ESP32 core 3.0.0 is based on the ESP-IDF 5.1 which includes the support for the new SoCs (ESP32-C6 and ESP32-H2). This version also brings new features that could be implemented on the following versions without the need to update the ESP-IDF core like the 802.15.4 features. + +### SPI Ethernet Support + +From now on, the SPI Ethernet is supported with the ESP-IDF SPI library and Arduino SPI. This new support includes the W5500, DM9051 and the KSZ8851SNL Ethernet ICs. + +### New I2S Library + +The new I2S library has been added based on the ESP-IDF API. + +### Wake Word and Command Recognition (ESP32-S3 only) + +Based on the ESP-SR, the ESP32-S3 will support voice recognition, being capable of wake word and command recognition. + +### TensorFlowLite Micro support + +TensorFlow is now supported, and examples were added. + +### Improved APIs + +The APIs improved includes: + +- ADC +- BLE +- I2S +- LEDC +- RMT +- SigmaDelta +- Timer +- UART (HardwareSerial) + +Deprecated: The Hall Sensor is no longer supported. + +### New boards added + +New boards have been added, including from [Adafruit](https://www.adafruit.com/), [Arduino.cc](https://www.arduino.cc/), [M5Stack](https://m5stack.com/), [LILYGO](https://www.lilygo.cc/), and many others. + +## How to Install the development version of the Arduino ESP32 Core + +To install the development version of Arduino ESP32 Core on the Arduino IDE, you can follow the installation instructions in our [documentation](https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html). + +Development release link for Arduino IDE: + +```shell +https://espressif.github.io/arduino-esp32/package_esp32_dev_index.json +``` + +## Keep Updated + +If you want to keep updated about the Arduino ESP32 Core development releases, you can follow us on GitHub, Gitter channel or participate in our monthly community meetings. + +- [GitHub Repository](https://github.com/espressif/arduino-esp32) +- [Gitter](https://app.gitter.im/#/room/#espressif_arduino-esp32:gitter.im) +- [Community Meetings](https://github.com/espressif/arduino-esp32/discussions/categories/monthly-community-meetings) + +A special thank you to all our community that motivated us to keep improving the Arduino ESP32 core support! diff --git a/content/blog/apple-homekit/img/apple-1.webp b/content/blog/apple-homekit/img/apple-1.webp new file mode 100644 index 000000000..a34b61dbb Binary files /dev/null and b/content/blog/apple-homekit/img/apple-1.webp differ diff --git a/content/blog/apple-homekit/index.md b/content/blog/apple-homekit/index.md new file mode 100644 index 000000000..02002d128 --- /dev/null +++ b/content/blog/apple-homekit/index.md @@ -0,0 +1,28 @@ +--- +title: "Apple HomeKit" +date: 2018-10-24 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Smart Home + - Esp32 + - Homekit + +--- +{{< figure + default=true + src="img/apple-1.webp" + >}} + +Espressif’s HomeKit SDK is a fully certified SDK that conforms to the latest HomeKit specification. The SDK is engineered to expose an easy to use API, while also being flexible enough to create a variety of accessories and bridges. Espressif supports the entire workflow from development to certification and manufacturing. This way you can focus on your product, and let the SDK manage HomeKit conformance. + +The SDK is available at: + +- Apple’s HomeKit ADK: [https://github.com/espressif/esp-apple-homekit-adk](https://github.com/espressif/esp-apple-homekit-adk) +- Espressif’s HomeKit SDK: [https://github.com/espressif/esp-homekit-sdk](https://github.com/espressif/esp-homekit-sdk) + +More Details: + +- [HomeKit On Espressif’s ESP32](/blog/homekit-on-espressifs-esp32) diff --git a/content/blog/apr-2021/img/apr-1.webp b/content/blog/apr-2021/img/apr-1.webp new file mode 100644 index 000000000..efd860a4d Binary files /dev/null and b/content/blog/apr-2021/img/apr-1.webp differ diff --git a/content/blog/apr-2021/img/apr-2.webp b/content/blog/apr-2021/img/apr-2.webp new file mode 100644 index 000000000..0599e55b9 Binary files /dev/null and b/content/blog/apr-2021/img/apr-2.webp differ diff --git a/content/blog/apr-2021/img/apr-3.webp b/content/blog/apr-2021/img/apr-3.webp new file mode 100644 index 000000000..bd3cf5b23 Binary files /dev/null and b/content/blog/apr-2021/img/apr-3.webp differ diff --git a/content/blog/apr-2021/img/apr-4.webp b/content/blog/apr-2021/img/apr-4.webp new file mode 100644 index 000000000..cf826fc9c Binary files /dev/null and b/content/blog/apr-2021/img/apr-4.webp differ diff --git a/content/blog/apr-2021/img/apr-5.webp b/content/blog/apr-2021/img/apr-5.webp new file mode 100644 index 000000000..fa53602e4 Binary files /dev/null and b/content/blog/apr-2021/img/apr-5.webp differ diff --git a/content/blog/apr-2021/img/apr-6.webp b/content/blog/apr-2021/img/apr-6.webp new file mode 100644 index 000000000..66e30db57 Binary files /dev/null and b/content/blog/apr-2021/img/apr-6.webp differ diff --git a/content/blog/apr-2021/index.md b/content/blog/apr-2021/index.md new file mode 100644 index 000000000..854424b53 --- /dev/null +++ b/content/blog/apr-2021/index.md @@ -0,0 +1,70 @@ +--- +title: "Apr 2021" +date: 2021-04-30 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Newsletter + +--- +Hi everyone, + +RISC-V Days Tokyo is Japan’s largest live online RISC-V event, featuring presentations, virtual demo booths, and an online press conference. RISC-V Days Tokyo aims to bring together leading RISC-V technologies and products, key persons and engineers, while providing business opportunities for product recognition, collaboration among companies, and exchange of information among industry experts. Last year’s event attracted a total of 1,053 participants from 11 countries. + +This year’s event took place on 22–23 April and, of course, Espressif was there. On 22 April 2021, Espressif’s Senior Software and Technical Marketing Manager, Jeroen Domburg, made a presentation of ESP32-C3, which is Espressif’s recently released, RISC-V-based Wi-Fi+Bluetooth LE SoC. With more than twenty years of experience in embedded systems, Jeroen is involved with both the software and the hardware design process of Espressif’s microcontroller units. Thus, Jeroen discussed the technical specifications of ESP32-C3, which is a SoC intended for IoT connectivity with WiFi and Bluetooth LE. The launch of this chip has also marked Espressif’s first SoC with a RISC-V processor at its core and, therefore, Jeroen talked about our experience of changing over to a RISC-V-based solution. + +{{< figure + default=true + src="img/apr-1.webp" + >}} + +*Jeroen Domburg: Espressif’s Senior Software & Technical Marketing Manager* + +Other topics you can read about in this month’s newsletter include: + +[__Announcing ESP32-C6: a Wi-Fi 6 + Bluetooth 5 (LE) SoC__ ](https://www.espressif.com/en/news/ESP32_C6) + +{{< figure + default=true + src="img/apr-2.webp" + >}} + +ESP32-C6 is Espressif’s first low-power and cost-effective Wi-Fi 6 + Bluetooth 5 (LE) SoC, with a 32-bit RISC-V core, for securely connected devices. ESP32-C6 is already [certified by Wi-Fi Alliance](https://www.wi-fi.org/). + +[__ESP32-C3 Is Now Wi-Fi CERTIFIED™__ ](https://www.espressif.com/en/news/ESP32-C3_Wi-Fi_Certified) + +{{< figure + default=true + src="img/apr-3.webp" + >}} + +[ESP32-C3](https://www.espressif.com/en/products/socs/esp32-c3) has passed the [Wi-Fi Alliance certification](https://www.wi-fi.org/)for providing industry-leading, Wi-Fi connectivity, and high-standard data security to private users and enterprises alike. + +[__ESP32-S2-HMI-DevKit-1 for Human-Machine Interaction__ ](https://www.espressif.com/en/news/SP32-S2-HMI-DevKit-1) + +{{< figure + default=true + src="img/apr-4.webp" + >}} + +Espressif recently launched [ESP32-S2-HMI-DevKit-1](https://github.com/espressif/esp-dev-kits/tree/master/esp32-s2-hmi-devkit-1), which is specifically designed for [human-machine interfaces](https://youtu.be/1LNdpcw5t0Q) in smart-home automation controllers, smart speakers with a display, smart alarm clocks, etc. It comes with a 4.3-inch color LCD and a touch panel. + +[__“App Fairy” for ThingPulse ESP-based Devices Released__ ](https://www.espressif.com/en/news/ESP_App_Fairy) + +{{< figure + default=true + src="img/apr-5.webp" + >}} + +[ThingPulse](https://thingpulse.com/) has recently developed the [App Fairy](https://github.com/ThingPulse/app-fairy), in order to make their ESP-based devices more accessible and user-friendly. The App Fairy is a self-contained app store for your computer. It allows you to install and configure applications for ThingPulse devices, without editing any source code. + +[__ESP32-based Autonomous Sensors by VZ__ ](https://www.espressif.com/en/news/ESP32_VAS) + +{{< figure + default=true + src="img/apr-6.webp" + >}} + +VocalZoom (VZ), a provider of laser sensors for industry 4.0, has just launched its [ESP32-based](https://www.espressif.com/en/products/socs/esp32)Autonomous Sensors for the Industrial Internet of Things (IIoT). diff --git a/content/blog/april-2018/img/april-1.webp b/content/blog/april-2018/img/april-1.webp new file mode 100644 index 000000000..57703732b Binary files /dev/null and b/content/blog/april-2018/img/april-1.webp differ diff --git a/content/blog/april-2018/img/april-2.webp b/content/blog/april-2018/img/april-2.webp new file mode 100644 index 000000000..5450fd3c2 Binary files /dev/null and b/content/blog/april-2018/img/april-2.webp differ diff --git a/content/blog/april-2018/img/april-3.webp b/content/blog/april-2018/img/april-3.webp new file mode 100644 index 000000000..3d9f41a47 Binary files /dev/null and b/content/blog/april-2018/img/april-3.webp differ diff --git a/content/blog/april-2018/img/april-4.webp b/content/blog/april-2018/img/april-4.webp new file mode 100644 index 000000000..b08c2a315 Binary files /dev/null and b/content/blog/april-2018/img/april-4.webp differ diff --git a/content/blog/april-2018/img/april-5.webp b/content/blog/april-2018/img/april-5.webp new file mode 100644 index 000000000..3ec9518f3 Binary files /dev/null and b/content/blog/april-2018/img/april-5.webp differ diff --git a/content/blog/april-2018/index.md b/content/blog/april-2018/index.md new file mode 100644 index 000000000..c833f6074 --- /dev/null +++ b/content/blog/april-2018/index.md @@ -0,0 +1,68 @@ +--- +title: "April 2018" +date: 2018-05-07 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Newsletter + +--- +{{< figure + default=true + src="img/april-1.webp" + >}} + +Hi everyone, The month of April is an exciting one for Espressif, since it is our birthday month. This year, in particular, we are celebrating the tenth birthday of our company on 29 April, and we plan our celebrations to extend even in May! Many things have coincided with this occasion, making our tenth anniversary even more special. + +Our brand new audio development boards, [ESP32-LyraTD-MSC](https://www.espressif.com/sites/default/files/documentation/esp32-lyratd-msc_user_guide_en.pdf) and [ESP32-LyraT](https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/dev-boards/), have been officially released and our customers can order them or make enquiries about them through our [CRM system](https://www.espressif.com/en/company/contact/pre-sale-questions-crm). Also, [ESP32-WROOM-32D](https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32d_esp32-wroom-32u_datasheet_en.pdf) is now available to the Japanese market through [www.switch-science.com](https://www.switch-science.com/catalog/3753/). ESP32-WROOM-32D is a powerful Wi-Fi+BT/BLE module that targets a wide variety of applications, ranging from low-power sensor networks to the most demanding tasks, such as voice encoding, music streaming and MP3 decoding. + +Additionally, our presence in Europe is becoming stronger by the day. Our branch in the Czech Republic is developing quickly, while also our distribution partners in France, Astone Technology, brought Espressif to the spotlight in the latest exhibition in Paris about [embedded systems and machine-to-machine (M2M) communications](http://www.zyyne.com/zh5/224667#p=2) at the Expo Porte de Versailles on 21 and 22 March 2018. + +Most importantly, however, the latest report by [Techno Systems Research](http://www.t-s-r.co.jp/) regarding the 2017 market shares in the semiconductorindustry was released last month, showing that Espressif Systems ranked first in the MCU Embedded Wi-Fi market with a share of about 30%, which was well over that of our competitors. As our company continues to develop, it is important to us to be not only a mainstream IoT company, but an integral part of the innovation that drives the semiconductor industry forward. We will continue creating IoT solutions that deliver exactly this. Furthermore, we will remain loyal to our motto about the democratization of technology, maintaining our competitive prices which allow everyone’s access to the alluring world of IoT. + +In the April edition of our newsletter you will also find out more about Talent Land 2018, the biggest gathering of hi-tech people in Latin America, and the ESP8266-powered electronic badge that they offer as a limited-edition souvenir; a very interesting tutorial about how to use ESP8266 and/or ESP32 to achieve voice-controlled relay; a home-made Arduino robot based on ESP8266, which everyone can recreate in order to control their home appliances over the internet; and an ESP8266-enabled smart-parking app to assist you in finding and reserving an available parking spot, so that others cannot beat you to it. + +Enjoy reading our newsletter and do not forget to like us on [Facebook](https://www.facebook.com/espressif/) and follow us on [Twitter](https://twitter.com/EspressifSystem). + +Best wishes,John LeeSenior Customer Support Officer + +## Mexico’s “Talent Land 2018” with an ESP8266 Badge + +{{< figure + default=true + src="img/april-2.webp" + >}} + +On 2 April Talent Land 2018 started. This is the largest innovation and entrepreneurship event that takes place in Mexico every year. It is a five-day event addressed to the maker community in Latin America, attracting talented young developers, investors, institutions and recruiters who meet up, share knowledge and strengthen the community’s development. What’s more, this year there is a limited-edition badge designed specifically for Talent Land 2018, which is based on our very own [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview). + +## Voice-Controlled Relay with ESP32 and ESP8266 + +{{< figure + default=true + src="img/april-3.webp" + >}} + +Rui Santos has just published on his very interesting RNT blog a [tutorial](https://www.randomnerdtutorials.com/alexa-echo-with-esp32-and-esp8266/)through which readers can learn how to control [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview) or [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview) with voice commands, using Amazon’s Alexa. The RNT blog helps makers, hobbyists and engineers build projects about electronics. In this particular tutorial, Rui uses the example of controlling two 12V lamps, with a relay. He also shows how to physically control these lamps, using a wireless 433 MHz switch on a wall. + +## ESP8266-based GO-4 Smart-Home Arduino Bot + +{{< figure + default=true + src="img/april-4.webp" + >}} + +Ahmed Azouz, an Egyptian software engineer, has developed an application that uses the ESP8266 IoT technology to control home appliances remotely over the internet. Ahmed said on hackster.io, where his project is published in full: “There is a small technological marvel called [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview) and it is a great tool for enabling your project’s access to the internet. You can plug it into an Arduino easily and control it over the internet from anywhere in the world via its unique IP address!” + +## ESP8266-Controlled Smart-Parking + +{{< figure + default=true + src="img/april-5.webp" + >}} + +“[Astro](https://www.hackster.io/90426/smart-park-with-astro-6fe898?utm_campaign=new_projects&utm_content=1&utm_medium=email&utm_source=hackster&utm_term=project_name)” is a smart-parking system created by [Priyanka Joshi](https://www.hackster.io/priyanka-joshi), a graduate student at the University of Texas at Dallas majoring in Computer Science with specialization in Intelligent Systems, and Shubham Pradeep Kothari. Astro was created to save drivers’ time and fuel wastage, while looking for parking space, which can be quite an arduous task in densely populated urban areas. Of course, the whole project has been based on our powerful [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview). + + +*Originally published at *[*mailchi.mp*](https://mailchi.mp/5c9f4c2f53ba/espressif-esp-news-april-2018)*.* diff --git a/content/blog/april-2019/img/april-1.webp b/content/blog/april-2019/img/april-1.webp new file mode 100644 index 000000000..756141639 Binary files /dev/null and b/content/blog/april-2019/img/april-1.webp differ diff --git a/content/blog/april-2019/img/april-2.webp b/content/blog/april-2019/img/april-2.webp new file mode 100644 index 000000000..a4fd337ad Binary files /dev/null and b/content/blog/april-2019/img/april-2.webp differ diff --git a/content/blog/april-2019/img/april-3.webp b/content/blog/april-2019/img/april-3.webp new file mode 100644 index 000000000..9bbd1067c Binary files /dev/null and b/content/blog/april-2019/img/april-3.webp differ diff --git a/content/blog/april-2019/img/april-4.webp b/content/blog/april-2019/img/april-4.webp new file mode 100644 index 000000000..50f9be795 Binary files /dev/null and b/content/blog/april-2019/img/april-4.webp differ diff --git a/content/blog/april-2019/index.md b/content/blog/april-2019/index.md new file mode 100644 index 000000000..623b672c9 --- /dev/null +++ b/content/blog/april-2019/index.md @@ -0,0 +1,77 @@ +--- +title: "April 2019" +date: 2019-04-04 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Newsletter + - Esp + +--- +Welcome to our April Newsletter + +Hi everyone, + +We’re really excited this month because Espressif has just started the process of offering its shares to the public for the first time (IPO), through the Shanghai Stock Exchange. We are hopeful that this process will come to fruition by the end of the year and that Espressif will be listed on the new Science and Technology Innovation Board of the Shanghai Stock Exchange. The Science and Technology Innovation Board, which aspires to become the Chinese version of Nasdaq, is designed to help technology-oriented enterprises grow their finances and drive innovation. + +Espressif has gone from strength to strength over the last few years. Our achievements include prestigious collaborations, awards and investments, while also providing evidence that our business cycle has significantly expanded both in China and abroad. Submitting, then, our IPO application to the Shanghai Stock Exchange was the next step in our path to driving technological innovation in China and beyond. + +Other news you can read in this month’s newsletter include: + +- Jumpstart, Espressif’s new reference guide which aims to +- help developers convert their ideas into actual products in the least possible amount of time; +- Embedding voice into ESP32 devices using Google’s Dialogflow, which provides developers with a hassle-free way of building their own conversational platforms for their own products; +- ESP-EYE being featured on WeChat, which is China’s biggest social media platform, with more than a billion monthly active users; and last, but not least, +- “Kevin”, who is your new ESP32-based virtual housemate. Built by Mitipi, a Swiss startup, Kevin seems “determined” to deter any burglars from breaking into your house. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on Facebook, Twitter, LinkedIn, Instagram and YouTube. We respond to all of your messages as quickly as possible! + +Best wishes, John Lee. Senior Customer Support Officer + +## ESP-Jumpstart: Building ESP32 Products Fast + +{{< figure + default=true + src="img/april-1.webp" + >}} + +Espressif has once again responded to the need of IoT makers for quick product development. [ESP-Jumpstart](https://docs.espressif.com/projects/esp-jumpstart/en/latest/introduction.html) is Espressif’s new reference guide which aims to help developers convert their ideas into actual products in the least possible amount of time. It provides users with a complete guide for product development. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP_Jumpstart) + +## Google Dialogflow: Embedding Voice into Devices with ESP32 + +{{< figure + default=true + src="img/april-2.webp" + >}} + +Dialogflow is a Google service that runs on the Google Cloud Platform, allowing users to build engaging AI-powered conversational interfaces on their products. ESP32 now supports Dialogflow with [Espressif’s Voice-Assistant SDK](https://github.com/espressif/esp-va-sdk), enabling IoT developers to embed natural-language processing in their devices. + +[*Keep reading*](https://www.espressif.com/en/news/Google_Dialogflow_with_ESP32) + +## ESP EYE on WeChat + +{{< figure + default=true + src="img/april-3.webp" + >}} + +To people living outside China, [Tencent](https://www.tencent.com/en-us/)’s ubiquitous messaging application,[ WeChat](https://www.cnbc.com/2019/02/04/what-is-wechat-china-biggest-messaging-app.html), might be relatively unknown. But to everyone in China, WeChat is much more than just a smartphone app. With more than a billion monthly active users, WeChat is also a powerful marketing tool. Espressif, as a top social-media influencer in the Chinese AIoT industry, has developed its own WeChat mini program (an app within WeChat) that will enhance the use of [ESP-EYE](https://www.espressif.com/en/products/hardware/esp-eye/overview), Espressif’s brand new AI development board. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP_EYE_on_WeChat) + +## ESP32-based Protection Against Burglars + +{{< figure + default=true + src="img/april-4.webp" + >}} + +Everyone can agree that even the idea of getting back home and finding it robbed can give you the shivers. Mitipi is a Swiss company that has built “Kevin”, an ESP32-based virtual housemate who will deter any burglars from breaking into your house. Kevin will make any burglars lurking around your neighborhood think that you are still at home when you are actually away. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP32-based_Protection_Against_Burglars) + +*Originally published at *[*mailchi.mp*](https://mailchi.mp/12241081b332/espressif-esp-news-april-2019?e=f9593a0e62)*.* diff --git a/content/blog/april-2020/img/april-1.webp b/content/blog/april-2020/img/april-1.webp new file mode 100644 index 000000000..6538ffb25 Binary files /dev/null and b/content/blog/april-2020/img/april-1.webp differ diff --git a/content/blog/april-2020/img/april-2.webp b/content/blog/april-2020/img/april-2.webp new file mode 100644 index 000000000..80d6fe670 Binary files /dev/null and b/content/blog/april-2020/img/april-2.webp differ diff --git a/content/blog/april-2020/img/april-3.webp b/content/blog/april-2020/img/april-3.webp new file mode 100644 index 000000000..e19c5e224 Binary files /dev/null and b/content/blog/april-2020/img/april-3.webp differ diff --git a/content/blog/april-2020/img/april-4.webp b/content/blog/april-2020/img/april-4.webp new file mode 100644 index 000000000..f0bc56998 Binary files /dev/null and b/content/blog/april-2020/img/april-4.webp differ diff --git a/content/blog/april-2020/index.md b/content/blog/april-2020/index.md new file mode 100644 index 000000000..a2f24c0b5 --- /dev/null +++ b/content/blog/april-2020/index.md @@ -0,0 +1,78 @@ +--- +title: "April 2020" +date: 2020-05-04 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +Espressif is known for its keen sense of corporate social responsibility. We have long supported low-power, green technologies, while we have also based our entire business model on the idea of democratizing technology with open-source software . + +At present, we are deeply concerned about climate change, which has been the result of human actions in recent decades. Hoping to create more public awareness of this crisis, we are launching a wildlife protection program which draws on the environmental insight brought about by [The IUCN Red List of Threatened Species™](https://www.iucn.org/zh-hans/node/24442). This is considered the most authoritative guide for evaluating biodiversity and the extinction risk of thousands of species. + +From now on, some of Espressif’s new development boards will be named after endangered animals. Some revenue from these development boards will be donated to the IUCN. We hope that our contribution will help the IUCN people to protect a greater number of threatened species. So far we have launched: + +- [ESP32-Vaquita-DSPG](https://github.com/espressif/esp-va-sdk/blob/master/docs/en/hw-reference/esp32/user-guide-esp32-vaquita-dspg.md), an Alexa built-in solution named after [Vaquita](https://www.worldwildlife.org/species/vaquita), the world’s rarest marine mammal on the verge of extinction. +- [ESP32-S2-Saola-1](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-saola-1-v1.2.html), a general-purpose development board named after [Saola](https://www.worldwildlife.org/species/saola), the so-called Asian unicorn, which is a critically endangered mammal. +- [ESP32-S2-Kaluga-1](https://www.espressif.com/en/news/ESP32-S2-mass-production), a new multimedia development board, named after [Kaluga](https://www.iucnredlist.org/species/10268/3186676), which is a critically endangered sturgeon inhabiting the Amur River in the Russian Far East. + +Other topics you can read about in this month’s newsletter include: + +- ESP RainMaker, Espressif’s end-to-end platform which enables makers realize their IoT ideas faster, with Espressif’s ESP32-S2 SoC, and without the hassle of managing the infrastructure involved. +- ESP32-Korvo, Espressif’s new AI development board, which features a multi-microphone array that enables it to achieve high performance, spoken-command recognition and far-field voice wake-up. +- The release of Espressif’s ESP8266 NonOS SDK, v3.0.3, which contains the latest bug fixes and updates. +- M5Stack ATOM, the smallest ESP32-based development board on the market, which is mainly designed for portable embedded systems and IoT development projects. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog). We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer + +## ESP RainMaker Released + +{{< figure + default=true + src="img/april-1.webp" + >}} + +Last week, Espressif announced the release of [ESP RainMaker](https://rainmaker.espressif.com/), which has been designed to empower firmware developers with more freedom, creativity and potential than ever before. You can now build connected devices really quickly. With ESP32-S2 and our ESP-IDF open-source SDK you can avoid all the hassle of managing the infrastructure involved in building connected devices. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP-RainMaker) + +## ESP32-Korvo Launched + +{{< figure + default=true + src="img/april-2.webp" + >}} + +[ESP32-Korvo](https://github.com/espressif/esp-skainet/blob/master/docs/en/hw-reference/esp32/user-guide-esp32-korvo-v1.1.md) is an artificial-intelligence development board based on [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview) and [ESP-Skainet](https://www.espressif.com/en/products/software/esp-skainet/overview), Espressif’s speech recognition SDK. ESP32-Korvo features two boards connected with an FPC cable, as well as a multi-microphone array which is suitable for far-field speech recognition applications with a low-power consumption. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP32-Korvo) + +## ESP8266 NonOS SDK V3.0.3 Released + +{{< figure + default=true + src="img/april-3.webp" + >}} + +Espressif continuously optimizes and updates its SDKs to meet its customers’ needs. That’s why Espressif has just released [ESP8266 NonOS SDK v3.0.3](https://github.com/espressif/ESP8266_NONOS_SDK/releases) . Customers using the ESP8266 NonOS SDK are advised to update their systems to the latest version, v3.0.3. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP8266_NonOS_3.0.3) + +## M5Stack ATOM: An ESP32-based Portable Development Toolkit + +{{< figure + default=true + src="img/april-4.webp" + >}} + +The [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview)-based M5Stack ATOM is the smallest development board on the market, measuring only 24×24mm. Designed for portable embedded systems and IoT development projects, [M5Stack ATOM](https://m5stack.com/products/atom-matrix-esp32-development-kit) is truly cost-effective not just because of its small size, but also because it has no integrated battery. + +[*Keep Reading*](https://www.espressif.com/en/news/M5Stack_ATOM_ESP32) diff --git a/content/blog/april-2022/img/april-1.webp b/content/blog/april-2022/img/april-1.webp new file mode 100644 index 000000000..8195ab553 Binary files /dev/null and b/content/blog/april-2022/img/april-1.webp differ diff --git a/content/blog/april-2022/img/april-2.webp b/content/blog/april-2022/img/april-2.webp new file mode 100644 index 000000000..5464e9903 Binary files /dev/null and b/content/blog/april-2022/img/april-2.webp differ diff --git a/content/blog/april-2022/img/april-3.webp b/content/blog/april-2022/img/april-3.webp new file mode 100644 index 000000000..78d629cdb Binary files /dev/null and b/content/blog/april-2022/img/april-3.webp differ diff --git a/content/blog/april-2022/index.md b/content/blog/april-2022/index.md new file mode 100644 index 000000000..7e1363ca0 --- /dev/null +++ b/content/blog/april-2022/index.md @@ -0,0 +1,60 @@ +--- +title: "April 2022" +date: 2022-05-01 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + - Esp32 + - IoT + +--- +Hi everyone, + +As many of you may have already heard, Shanghai is currently undergoing a major lockdown due to COVID-19. In the midst of this lockdown, we received our production wafers of ESP32-C2, and proceeded with verification. Quarantine rules have caused us some logistics problems, but gradually we managed to find solutions and go ahead with ramping up the design and production of this chip. Also, thanks to Espressifers from Brazil, the Czech Republic, India and Singapore, the integration of ESP32-C2 into ESP-IDF and ESP-RainMaker continues at full speed. + +__ESP32-C2 is a combo Wi-Fi 4 + Bluetooth 5 ( LE) chip__ that was conceived during last year’s semiconductor supply shortages which -to a certain extent- persist even today. Hence, one of the most important goals for us in creating this chip was to reduce its silicon area and the flash size requirement. Thus, after almost a year of preparations, the resulting chip targets simple, high-volume, low-data-rate, IoT applications, such as smart plugs and light bulbs. + +ESP32-C2 is a chip __in a 4mm x 4mm package__ , with __272 kB of memory__ . It runs frameworks, such as [__ESP-Jumpstart__ ](https://github.com/espressif/esp-jumpstart/blob/master/README.md) and [__ESP RainMaker®__ ](https://rainmaker.espressif.com/), while it also runs [__ESP-IDF__ ](https://www.espressif.com/en/products/sdks/esp-idf). ESP-IDF is Espressif’s open-source, real-time operating system for embedded IoT devices, which has been trusted by users across the whole wide world. It is supported by [Espressif](http://www.espressif.com/) and the community for all [ESP32 chips](https://www.esp32.com/). __The ROM code of ESP32-C2 is optimized, as it reduces the need for flash.__ + +__Thus, if you need a small, simple and cheap SoC that is able to provide your application with robust connectivity, ESP32-C2 is the way to go.Besides, ESP32-C2 also continues the tradition of Espressif’s excellent security, having such features as secure boot and flash encryption, while also providing hardware root-of-trust for any applications.__ + +Other topics you can read about in this month’s newsletter include: + +{{< figure + default=true + src="img/april-1.webp" + >}} + +[__Introducing the ESP USB Bridge__ ](https://www.espressif.com/en/news/ESP32-C2) + +The [ESP USB Bridge](https://github.com/espressif/esp-usb-bridge) is an ESP-IDF project utilizing [ESP32-S2](https://www.espressif.com/en/products/socs/esp32-s2) or [ESP32-S3](https://www.espressif.com/en/products/socs/esp32-s3) to create a link between a computer and a target microcontroller. It can serve as a replacement for USB-to-UART chips, e.g. CP210x. + +{{< figure + default=true + src="img/april-2.webp" + >}} + +[__AnalogLamb’s Version of ESP32-S3 Offers a 2 MP Camera, a Mic, and Two LCDs__ ](https://www.espressif.com/en/news/Maple_Eye_ESP32-S3) + +[AnalogLamb’s Maple Eye ESP32-S3](https://www.analoglamb.com/product/maple-eye-esp32-s3-board-with-camera-and-lcds/) is a Wi-Fi-and-Bluetooth dev board based on Espressif’s [ESP32-S3](https://www.espressif.com/en/products/socs/esp32-s3)dual-core Xtensa LX7 microcontroller. Additionally, it is equipped with one 2MP camera, one microphone, and two LCDs placed on each side of the board. + +{{< figure + default=true + src="img/april-3.webp" + >}} + +[__Tracer: An ESP32-Powered Wearable for Things!__ ](https://www.espressif.com/en/news/ESP32_Tracer) + +Tracer is an open-source, ESP32-based, embedded project created by independent maker [elektroThing](https://ko-fi.com/elektrothing#instant-signup-modal). Tracer leverages the wide variety of software libraries written for [ESP32](https://www.espressif.com/en/products/socs/esp32), allowing tinkerers to gain insight into the necessary processing and algorithms required to develop their very own fitness tracker. + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/arduino-esp-now-lib/index.md b/content/blog/arduino-esp-now-lib/index.md index ca19989ca..79b006731 100644 --- a/content/blog/arduino-esp-now-lib/index.md +++ b/content/blog/arduino-esp-now-lib/index.md @@ -3,6 +3,7 @@ title: "Using ESP-NOW in Arduino" date: 2024-08-06T09:00:24-03:00 tags: ["Arduino", "ESP-NOW", "Wireless", "Wi-Fi", "ESP32", "ESP32-S2", "ESP32-S3", "ESP32-C3", "ESP32-C6"] showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" authors: - "lucas-vaz" --- diff --git a/content/blog/arduino-esp32-support-version-2-0-0-is-out/index.md b/content/blog/arduino-esp32-support-version-2-0-0-is-out/index.md new file mode 100644 index 000000000..23f55724f --- /dev/null +++ b/content/blog/arduino-esp32-support-version-2-0-0-is-out/index.md @@ -0,0 +1,76 @@ +--- +title: "Arduino ESP32 support version 2.0.0 is out!" +date: 2021-08-31 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - pedro-minatel +tags: + - version 2.0.0 + - 2.0.0 + - Espressif + - Arduino + - Esp32 + - USB + - IoT + +--- +Arduino is definitely one of the most popular embedded development frameworks, and this popularity is mostly due to its simplicity and huge community. + +This popularity is also shared with the ESP32. When the first support was introduced for the ESP8266, Espressif saw the full potential about using Arduino on the SoCs, and all the possibilities for creating IoT products as easier as before. + +After all the incredible success on the ESP8266, Espressif has started the ESP32 support for Arduino. This support is based on the ESP-IDF, the official IoT Development Framework. Prior to [version 2.0.0](https://github.com/espressif/arduino-esp32/releases/tag/2.0.0), it was based on the IDF v3.3, only supporting ESP32. + +Espressif is continuously expanding the ESP32 family, first introducing the ESP32-S2, the first SoC with embedded USB and Wi-Fi only and secondly the ESP32-C3, the first SoC with RISC-V architecture. + +To see all ESP products, visit our product page [here](https://products.espressif.com/). + +## Introducing Arduino ESP32 2.0.0 + +As the ESP32 family increases, it’s time to move forward and give Arduino ESP32 support for the recently introduced SoC’s. + +The new version, the [2.0.0](https://github.com/espressif/arduino-esp32/releases/tag/2.0.0) (this is the Arduino ESP32 support version, and it’s not related to the Arduino IDE version 2.0.0) is based on the latest ESP-IDF development version and includes all new features and bugfix since the ESP-IDF v3.3. This is the major difference from the v1.0.6 and it’s also the reason for upgrading. + +With this major update, can now support the ESP32-S2 and ESP32-C3 and in the future the ESP32-S3. + +## ESP32-S2 + +> ESP32-S2 is a highly integrated, low-power, single-core Wi-Fi Microcontroller SoC, designed to be secure and cost-effective, with a high performance and a rich set of IO capabilities. + +More about [ESP32-S2](https://docs.espressif.com/projects/arduino-esp32/en/latest/boards/ESP32-S2-Saola-1.html). + +## ESP32-C3 + +> ESP32-C3 is a single-core Wi-Fi and Bluetooth 5 (LE) microcontroller SoC, based on the open-source RISC-V architecture. It strikes the right balance of power, I/O capabilities and security, thus offering the optimal cost-effective solution for connected devices. The availability of Wi-Fi and Bluetooth 5 (LE) connectivity not only makes the device’s configuration easy, but it also facilitates a variety of use-cases based on dual connectivity. + +More about [ESP32-C3](https://docs.espressif.com/projects/arduino-esp32/en/latest/boards/ESP32-C3-DevKitM-1.html). + +## Major Changes and New Features Added + +This version introduces major changes since the [2.0.0-alpha1](https://github.com/espressif/arduino-esp32/tree/2.0.0-alpha1). + +Some of the most important ones are: + +- Support for ESP32-S2. +- Support for ESP32-C3. +- Upload over CDC. +- Support for the KSZ8081 (Ethernet PHY). +- LittleFS update for partition label and multiple partitions. +- Added support for RainMaker. +- BLE5 features for ESP32-C3 (ESP32-S3 ready). +- ESPTOOL update. +- Added FTM support. +- Online Documentation added. See [here](https://docs.espressif.com/projects/arduino-esp32/en/latest/). +- USB MSC and HID support (ESP32-S2 only). +- UART refactoring (SerialHardware). +- New examples. +- Boards added. +- Bugs fixed. + +See the complete list [here](https://github.com/espressif/arduino-esp32/releases). + +## How to Upgrade to v2.0.0 + +To install or to upgrade to version 2.0.0, see this detailed process on our [online documentation](https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html#installing). + +You can also install directly from the [Arduino IDE](https://www.arduino.cc/en/software), [PlatformIO](https://platformio.org/) (supported on Windows, Linux and macOS). diff --git a/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-1.webp b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-1.webp new file mode 100644 index 000000000..d81348d26 Binary files /dev/null and b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-1.webp differ diff --git a/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-2.webp b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-2.webp new file mode 100644 index 000000000..d7ab71c3a Binary files /dev/null and b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-2.webp differ diff --git a/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-3.webp b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-3.webp new file mode 100644 index 000000000..2b260aee0 Binary files /dev/null and b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-3.webp differ diff --git a/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-4.webp b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-4.webp new file mode 100644 index 000000000..2ec2241d7 Binary files /dev/null and b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-4.webp differ diff --git a/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-5.webp b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-5.webp new file mode 100644 index 000000000..8dcb243cb Binary files /dev/null and b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-5.webp differ diff --git a/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-6.webp b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-6.webp new file mode 100644 index 000000000..cb3ac19af Binary files /dev/null and b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-6.webp differ diff --git a/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-7.webp b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-7.webp new file mode 100644 index 000000000..3c27bffcc Binary files /dev/null and b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/img/arduino-7.webp differ diff --git a/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/index.md b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/index.md new file mode 100644 index 000000000..3bbbd3fc5 --- /dev/null +++ b/content/blog/arduino-for-esp32-s2-and-esp32-c3-is-coming/index.md @@ -0,0 +1,123 @@ +--- +title: "Arduino for ESP32-S2 and ESP32-C3 is coming!" +date: 2021-06-08 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - pedro-minatel +tags: + - Arduino + - Espressif + - Esp32 + - Risc V + - IoT + +--- +{{< figure + default=true + src="img/arduino-1.webp" + >}} + +> This tutorial was created based on the Arduino for ESP32 version 2.0.0-alpha1 (preview version) on April 30th, 2021. + +If you were waiting for the ESP32-S2 and ESP32-C3 support for Arduino, you will soon have it! + +Few days ago, we released the preview support for the S2 and C3. This is still a work in progress, but we will let you have some early access to both chips. + +The ESP32-S2 was released in the end of 2019 and it’s the first ESP32 with USB support. To see more details about the S2, see this [datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf). + +At end of 2020, ESP32-C3 was announced to be [Espressif’s](https://www.espressif.com) first RISC-V SoC and soon will be ready for shipment to developers, customers and distributors all over the world. + +This means that most of you will receive the new ESP32-C3 and it will be already supported in the Arduino framework! + +The Arduino core for the ESP32 version 2.0.0 is a huge milestone for the community, not only for the new chip support but also due to the upgrade in the [ESP-IDF](https://idf.espressif.com/) (running under the hood of the Arduino framework). This adds new functionalities that can be added to the Arduino framework as well as a possibility to get future support to the ESP32-S3 faster than the ESP32-S2. + +For now, we are offering the preview version. Some work is still in progress to fully support these new chips. We will get everything working smoothly in the near future with the help of our community! + +You can track all work in progress by following our GitHub repository. If you find any issue or missing functionality, don’t hesitate to create a new issue! + +[espressif/arduino-esp32If you want to test ESP32-S2 and/or ESP32-C3 through the board manager, please use the development release link…github.com](https://github.com/espressif/arduino-esp32?source=post_page-----f36d79967eb8--------------------------------) + +See “[how to contribute](https://github.com/espressif/arduino-esp32/blob/master/CONTRIBUTING.rst)” for more details on how to help us to improve. + +## New Supported SoC + +## ESP32-S2 + +> ESP32-S2 is a highly integrated, low-power, single-core Wi-Fi Microcontroller SoC, designed to be secure and cost-effective, with a high performance and a rich set of IO capabilities. + +{{< figure + default=true + src="img/arduino-2.webp" + >}} + +To learn more about the ESP32-S2, click [here](https://www.espressif.com/en/products/socs/esp32-s2)! + +## ESP32-C3 + +> ESP32-C3 is a single-core Wi-Fi and Bluetooth 5 (LE) microcontroller SoC, based on the open-source RISC-V architecture. It strikes the right balance of power, I/O capabilities and security, thus offering the optimal cost-effective solution for connected devices. The availability of Wi-Fi and Bluetooth 5 (LE) connectivity not only makes the device’s configuration easy, but it also facilitates a variety of use-cases based on dual connectivity. + +{{< figure + default=true + src="img/arduino-3.webp" + >}} + +To learn more about the ESP32-C3, click [here](https://www.espressif.com/en/products/socs/esp32-c3)! + +## How to Get Started? + +If you want to try this new version, you just need to update your ESP32-Arduino install by following these steps. + +First, go to our GitHub repository: [arduino-esp32](https://github.com/espressif/arduino-esp32) + +__For Arduino IDE < 2.0__ + +If you are using the Arduino IDE < 2.0, you can install or update using these steps: + +__File → Preferences__ + +{{< figure + default=true + src="img/arduino-4.webp" + >}} + +Add the “[__https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json__ ](https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json)”to Additional Boards Manager URLs and click OK. + +To install it, go to __Tools → Boards → Boards Manager__ and you will find the __“esp32” by Espressif Systems__ in the list. + +{{< figure + default=true + src="img/arduino-5.webp" + >}} + +Be sure to select the version 2.0.0-alpha1. + +If the version 2.0.0 isn’t in the list, update the JSON link in the “Additional Boards Manager URLs” and restart the Arduino IDE. + +__For the Arduino IDE 2.0:__ + +The process for the Arduino IDE 2.0 is very similar to the early version. + +__File → Preferences__ + +{{< figure + default=true + src="img/arduino-6.webp" + >}} + +Add the “[__https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json__ ](https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json)” to Additional Boards Manager URLs and click OK. + +To install it, go to __Tools → Boards → Boards Manager__ and you will find the __“esp32” by Espressif Systems__ in the list. + +{{< figure + default=true + src="img/arduino-7.webp" + >}} + +You can finally start using the ESP32-S2 and ESP32-C3 SoC with Arduino! + +__Conclusion__ + +We are all excited with this preview version release to give you the chance to try our new chips using Arduino. + +Additionally, your feedback is very important! We are looking forward to hearing from you. Let us know how we can improve the development experience. diff --git a/content/blog/aug-2022/img/aug-1.webp b/content/blog/aug-2022/img/aug-1.webp new file mode 100644 index 000000000..218168106 Binary files /dev/null and b/content/blog/aug-2022/img/aug-1.webp differ diff --git a/content/blog/aug-2022/img/aug-2.webp b/content/blog/aug-2022/img/aug-2.webp new file mode 100644 index 000000000..9ab25a3af Binary files /dev/null and b/content/blog/aug-2022/img/aug-2.webp differ diff --git a/content/blog/aug-2022/img/aug-3.webp b/content/blog/aug-2022/img/aug-3.webp new file mode 100644 index 000000000..80ba1a23b Binary files /dev/null and b/content/blog/aug-2022/img/aug-3.webp differ diff --git a/content/blog/aug-2022/img/aug-4.webp b/content/blog/aug-2022/img/aug-4.webp new file mode 100644 index 000000000..40dabf18e Binary files /dev/null and b/content/blog/aug-2022/img/aug-4.webp differ diff --git a/content/blog/aug-2022/img/aug-5.webp b/content/blog/aug-2022/img/aug-5.webp new file mode 100644 index 000000000..1bbc544fb Binary files /dev/null and b/content/blog/aug-2022/img/aug-5.webp differ diff --git a/content/blog/aug-2022/index.md b/content/blog/aug-2022/index.md new file mode 100644 index 000000000..221d94c29 --- /dev/null +++ b/content/blog/aug-2022/index.md @@ -0,0 +1,74 @@ +--- +title: "Aug 2022" +date: 2022-09-10 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +Espressif is taking part in the upcoming Maker Faire in [Prague on 17–18 September](https://makerfaire.cz/)____ 2022, and in [Brno on 22–23 October](https://makerfaire.cz/). Maker Faire is a family-friendly showcase of inventions and creativity that gathers technology enthusiasts, crafters, and educators from the Czech Republic and abroad. Makers come to show their creations and visitors get the opportunity to try new gadgets firsthand. This technology festival is the perfect combination of sciences, traditional crafts, the latest technological trends and design. + +{{< figure + default=true + src="img/aug-1.webp" + >}} + +The Maker Faire in Prague will be celebrating its fifth year in 2022, and will take place in the Prague Market Hall, a magnificent space where visitors will be able to find Espressif’s delegation among many others. The international programme of the Festival will take place both indoors and outdoors, where dozens of makers will showcase their projects. Visitors will have the opportunity to get involved in several workshops and installations. + +The Maker Faire in Brno will be organised for the third consecutive year in 2022. It will take place at the weekend on 22–23 October in the perfectly fitting venue of Pavilion A1 in the Brno Exhibition Centre. Visitors will have the chance to familiarise with hundreds of makers and their projects. As ever, attendees will be able to participate in numerous workshops and installations. The program will take place indoors and partly outdoors. + +Espressif Systems’ participation in both cities of the Czech Maker Faire aims to introduce the latest ESP-based solutions to the general public, while getting to know local makers better. + +So, those of you who happen to be in Prague and Brno, on 17–18 September and 22–23 October, respectively, do come and say “hi” to Espressif’s representatives! They will be more than happy to meet you and explain to you all about our innovative AIoT solutions. + +Keep reading this month’s newsletter, so you can also learn about: + +{{< figure + default=true + src="img/aug-2.webp" + >}} + +[__Light+Building Trade Fair Oct. ‘22__ ](https://www.espressif.com/en/news/ESP_Light_Building) + +From From October 2 to 6, Espressif will participate in the 2022 Autumn Edition of the [Light + Building Trade Fair](https://light-building.messefrankfurt.com/frankfurt/en.html) in Frankfurt am Main, showcasing a wide range of smart-home and lighting solutions. + +{{< figure + default=true + src="img/aug-3.webp" + >}} + +[__Package Delivery Detection with ESP-Based Computer Vision__ ](https://www.espressif.com/en/news/ESP_Package_Delivery_Detection) + +Identify when packages or boxes arrive on your doorstep with a computer-vision project that combines [ESP-EYE](https://www.espressif.com/en/products/devkits/esp-eye/overview), Espressif’s development board for image recognition and audio processing, as well as the [Edge Impulse Studio](https://docs.edgeimpulse.com/experts/parcel-detection). + +{{< figure + default=true + src="img/aug-4.webp" + >}} + +[__ESP-Hosted Reduces Cost and Complexity of IoT Devices__ ](https://www.espressif.com/en/news/ESP-Hosted_solution) + +This article focuses on the many advantages of ESP-Hosted, our open-source solution which uses Espressif SoCs and modules as communication co-processors. + +{{< figure + default=true + src="img/aug-5.webp" + >}} + +[__ESP Badge for the 2022 Fri3d Camp__ ](https://www.espressif.com/en/news/Fri3d_Camp_badge) + +The [2022 Fri3d Camp](https://fri3d.be/en/) took place last month. It was a family-friendly summer festival for hackers, where each participant received a cool-looking badge based on Espressif’s [ESP32-WROVER module](https://www.espressif.com/en/products/modules/esp32). + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/august-2018/img/august-1.webp b/content/blog/august-2018/img/august-1.webp new file mode 100644 index 000000000..728f07d33 Binary files /dev/null and b/content/blog/august-2018/img/august-1.webp differ diff --git a/content/blog/august-2018/img/august-2.webp b/content/blog/august-2018/img/august-2.webp new file mode 100644 index 000000000..ff41a7725 Binary files /dev/null and b/content/blog/august-2018/img/august-2.webp differ diff --git a/content/blog/august-2018/img/august-3.webp b/content/blog/august-2018/img/august-3.webp new file mode 100644 index 000000000..d556fcac0 Binary files /dev/null and b/content/blog/august-2018/img/august-3.webp differ diff --git a/content/blog/august-2018/img/august-4.webp b/content/blog/august-2018/img/august-4.webp new file mode 100644 index 000000000..77c84874b Binary files /dev/null and b/content/blog/august-2018/img/august-4.webp differ diff --git a/content/blog/august-2018/img/august-5.webp b/content/blog/august-2018/img/august-5.webp new file mode 100644 index 000000000..9dba1e3da Binary files /dev/null and b/content/blog/august-2018/img/august-5.webp differ diff --git a/content/blog/august-2018/img/august-6.webp b/content/blog/august-2018/img/august-6.webp new file mode 100644 index 000000000..192fd403d Binary files /dev/null and b/content/blog/august-2018/img/august-6.webp differ diff --git a/content/blog/august-2018/img/august-7.webp b/content/blog/august-2018/img/august-7.webp new file mode 100644 index 000000000..f928ae139 Binary files /dev/null and b/content/blog/august-2018/img/august-7.webp differ diff --git a/content/blog/august-2018/index.md b/content/blog/august-2018/index.md new file mode 100644 index 000000000..ad85d6d98 --- /dev/null +++ b/content/blog/august-2018/index.md @@ -0,0 +1,75 @@ +--- +title: "August 2018" +date: 2018-08-06 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - IoT + - Esp32 + - Newsletter + +--- +## Fake News About Espressif Systems…Again! + +{{< figure + default=true + src="img/august-1.webp" + >}} + +Espressif Systems’ PR and Media Department emphatically states that the rumor about our company’s acquisition by the Alibaba Group is entirely fake. Unfortunately, the same rumor surfaced on Chinese social media earlier this year, on April 20th. This piece of fake news was repeated by toutiao.com on August 6th. + +## New Espressif Module ESP32-WROVER-B + +{{< figure + default=true + src="img/august-2.webp" + >}} + +We are delighted to announce that a new module from Espressif Systems, [ESP32-WROVER-B](https://www.espressif.com/sites/default/files/documentation/esp32-wrover-b_datasheet_en.pdf), has just been released. With 8MB of PSRAM, the ESP32-WROVER-B module marks a big improvement over ESP32-WROVER and ESP32-WROVER-I. This is part of Espressif’s strategic plan to continue developing new capabilities for its IoT solutions. Our goal is to stay competitive and attractive within the growing IoT ecosystem, while keeping our prices as low as possible, so that the Internet of Things becomes accessible to everyone. + +## KidBright32: An ESP32-based Dev Board for Thai Schoolchildern + +{{< figure + default=true + src="img/august-3.webp" + >}} + +Thailand’s Ministry of Education has recently launched an initiative to boost the country’s electronics education, creating a development board which is based on Espressif Systems’ [ESP32-WROOM-32 WiFi-and-Bluetooth module](https://www.espressif.com/en/products/hardware/esp-wroom-32/overview). This follows the example of other similar initiatives, such as the ESP8266-based Kniwwelino in Luxembourg and the [BBC Micro:Bit](https://www.cnx-software.com/2015/07/07/bbc-micro-bit-educational-board-features-an-arm-cortex-m0-mcu/) in the UK. + +## Zerynth and XinaBox’s Innovative IoT Toolkit Built Around ESP32-WROOM-32 + +{{< figure + default=true + src="img/august-4.webp" + >}} + +A new IoT development kit that is programmable with Zerynth, the [XK12 IoT Starter Kit](https://www.zerynth.com/blog/zerynth-and-xinabox-partnership-brings-an-innovative-iot-toolkit/), is designed to simplify building electronic devices. By combining the XinaBox modular electronics with an ecosystem of software tools in Python, development time, speed to market and costs are expected to be significantly reduced. The XK12 IoT Starter Kit has been built around Espressif’s [ESP32-WROOM-32](https://www.espressif.com/en/products/hardware/esp-wroom-32/overview) module. Powered by Espressif’s flagship SoC, ESP32-WROOM-32 features high performance, a wide range of peripherals, as well as Wi-Fi and Bluetooth connectivity. It is a complete solution tailored to advanced IoT applications + +## ESP32-based Cereal Distribution Machine + +{{< figure + default=true + src="img/august-5.webp" + >}} + +Cereal lovers, rejoice! This article is for you. Kevin Obermann and Adrian Bernhart have put their engineering skills to good service, ultimately taking their love for cereals to a whole different level. They created a carousel of cereals, which mixes and matches customized breakfast blends. + +## Greenhouse Alarm System with ESP8266 & Ubidots + +{{< figure + default=true + src="img/august-6.webp" + >}} + +Is your lifestyle too busy to allow you to have the kitchen garden you always wanted? A young maker, [Valerie Odioh](https://www.hackster.io/valerie-odioh), has combined the technology offered by [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview) and Ubidots, ultimately creating a green IoT solution that you cannot but find useful! + +## “Nero”: An ESP8266-powered Smart Glove That Controls Remote Devices + +{{< figure + default=true + src="img/august-7.webp" + >}} + +[Varun Sharman](https://www.hackster.io/varunsharman), [Jival Jenson](https://www.hackster.io/jival-jenson) and [Shijith Mathew](https://www.hackster.io/shijith-mathew) are a team of young engineers who have created a smart glove that can control devices from a distance. This project is based on the power of [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview), which is a highly-integrated Wi-Fi solution that is capable of functioning consistently even in industrial environments with extreme temperatures. diff --git a/content/blog/august-2019/img/august-1.webp b/content/blog/august-2019/img/august-1.webp new file mode 100644 index 000000000..c1458bc31 Binary files /dev/null and b/content/blog/august-2019/img/august-1.webp differ diff --git a/content/blog/august-2019/img/august-2.webp b/content/blog/august-2019/img/august-2.webp new file mode 100644 index 000000000..6042a30e8 Binary files /dev/null and b/content/blog/august-2019/img/august-2.webp differ diff --git a/content/blog/august-2019/img/august-3.webp b/content/blog/august-2019/img/august-3.webp new file mode 100644 index 000000000..8e7277bb4 Binary files /dev/null and b/content/blog/august-2019/img/august-3.webp differ diff --git a/content/blog/august-2019/img/august-4.webp b/content/blog/august-2019/img/august-4.webp new file mode 100644 index 000000000..d241fbd66 Binary files /dev/null and b/content/blog/august-2019/img/august-4.webp differ diff --git a/content/blog/august-2019/img/august-5.webp b/content/blog/august-2019/img/august-5.webp new file mode 100644 index 000000000..041a52781 Binary files /dev/null and b/content/blog/august-2019/img/august-5.webp differ diff --git a/content/blog/august-2019/index.md b/content/blog/august-2019/index.md new file mode 100644 index 000000000..5e3092829 --- /dev/null +++ b/content/blog/august-2019/index.md @@ -0,0 +1,90 @@ +--- +title: "August 2019" +date: 2019-10-09 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - IoT + - Newsletter + +--- +{{< figure + default=true + src="img/august-1.webp" + >}} + +Hi everyone, + +Apologies for the typo in our latest newsletter, at the beginning of which ESP32-S3 was mentioned, instead of the correct __ESP32-S2__ . So, it is the __ESP32-S2 datasheet__ that has been released. You can now find it online in the [documentation section](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf) of our website. + +__ESP32-S2__ is a low-power 2.4 GHz Wi-Fi System-on-Chip (SoC) solution. With its state-of-the-art power and RF performance, this SoC is an ideal choice for a wide variety of application scenarios relating to the Internet of Things (IoT), wearable electronics and Smart Home. __ESP32-S2__ includes a Wi-Fi subsystem that integrates a Wi-Fi MAC, Wi-Fi radio and baseband, RF switch, RF balun, power amplifier, low noise amplifier (LNA), etc. Espressif’s new SoC is fully compliant with the IEEE 802.11b/g/n protocol and offers a complete Wi-Fi solution. At the core of this SoC is an Xtensa® 32-bit LX7 CPU that operates at a maximum of 240 MHz. The SoC supports application development, without the need for a host MCU. + +The on-chip memory includes 320 KB SRAM and 128 KB ROM. It also supports a number of external SPI/QSPI/OSPI flash and SRAM chips for more memory space. With its multiple low-power modes, ESP32-S2 is designed for ultra-low-power performance. Its fine-grained clock gating, dynamic voltage and frequency scaling, as well as the adjustable output of its power amplifier contribute to an optimal trade-off between communication range, data rate and power consumption. + +The device provides a rich set of peripheral interfaces, including SPI, I2S, UART, I2C, LED PWM, LCD, camera, ADC, DAC, touch sensor, temperature sensor, as well as 43 GPIOs. + +It also includes a full-speed USB On-The-Go (OTG) interface which enables USB communication at all times. + +__ESP32-S2__ has several dedicated hardware security features. Cryptographic accelerators are integrated, thus providing AES, SHA and RSA algorithms. Additional hardware security features are provided by the RNG, HMAC and Digital Signature modules, as well as flash encryption and secure boot signature verification. These characteristics allow the device to meet stringent security requirements. + +Other news you can read in this month’s newsletter include: + +- Espressif’s new Smart Voice Assistant, which supports voice wake-up and multiple offline speech-recognition commands; +- Cesanta’s support for ESP32 and ESP8266 on the mDash Cloud platform, which generally aims to accelerate the Web for the Internet of Things; +- Espressif’s new partnership with Temboo, which is meant to give IoT developers the opportunity to research, design and build the next generation of connected products with access to sensor data; +- Ryan Bates’s animated pixel art with ESP8266. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog). We respond to all of your messages as quickly as possible! + +Best wishes,John Lee. + +Senior Customer Support Officer + +## Espressif’s New Smart Voice Assistant, ESP-Skainet, Released + +{{< figure + default=true + src="img/august-2.webp" + >}} + +[ESP-Skainet](https://github.com/espressif/esp-skainet) is a new voice-interaction development framework based on Espressif’s flagship chip, [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview). The new development framework supports voice wake-up and multiple offline speech-recognition commands. With ESP-Skainet, users can easily build applications based on wake-word detection and speech-recognition commands. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP-Skainet_Released) + +## ESP32 and ESP8266 Supported by Cesanta’s mDash Cloud Platform + +{{< figure + default=true + src="img/august-3.webp" + >}} + +[Cesanta](https://cesanta.com/), an IoT company based in Dublin, Ireland, has recently launched [mDash](https://mdash.net/), which is an IoT Cloud platform for the administration of various IoT modules. This platform now supports Espressif’s SoCs, [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview) and [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview), among other chips, offering a number of features that significantly facilitate building IoT applications + +[*Keep Reading*](https://www.espressif.com/en/news/ESP32_ESP8266_supported_by_mDash) + +## Espressif and Temboo Partner to Empower Everyone to Benefit from the Internet of Things + +{{< figure + default=true + src="img/august-4.webp" + >}} + +The new partnership between [Espressif Systems](http://www.espressif.com/) and [Temboo](https://temboo.com/) is meant to give IoT developers the opportunity to research, design and build the next generation of connected products with access to sensor data. This will further bridge the gap between the physical and the digital world by using the Internet of Things more effectively. + +[*Keep Reading*](https://www.espressif.com/en/news/Espressif_Temboo_Partnership) + +## Animated Pixel Art with ESP8266 + +{{< figure + default=true + src="img/august-5.webp" + >}} + +If you are a maker and also into pixel-art renditions of iconic video-game characters, then this article is for you! It’s time to unleash your creativity by making your own animated pixel-frame depicting your favorite character. All you need is an [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview) and Ryan Bates’s tutorial. + +[*Keep Reading*](https://www.espressif.com/en/news/Animated_ESP8266) + +*Originally published at *[*https://mailchi.mp*](https://mailchi.mp/9ebec2ccf343/espressif-esp-news-august-2019)*.* diff --git a/content/blog/august-2021/img/august-1.webp b/content/blog/august-2021/img/august-1.webp new file mode 100644 index 000000000..c3109819e Binary files /dev/null and b/content/blog/august-2021/img/august-1.webp differ diff --git a/content/blog/august-2021/img/august-2.webp b/content/blog/august-2021/img/august-2.webp new file mode 100644 index 000000000..f2f6e03e9 Binary files /dev/null and b/content/blog/august-2021/img/august-2.webp differ diff --git a/content/blog/august-2021/img/august-3.webp b/content/blog/august-2021/img/august-3.webp new file mode 100644 index 000000000..990023bcb Binary files /dev/null and b/content/blog/august-2021/img/august-3.webp differ diff --git a/content/blog/august-2021/img/august-4.webp b/content/blog/august-2021/img/august-4.webp new file mode 100644 index 000000000..850146954 Binary files /dev/null and b/content/blog/august-2021/img/august-4.webp differ diff --git a/content/blog/august-2021/img/august-5.webp b/content/blog/august-2021/img/august-5.webp new file mode 100644 index 000000000..4c5a1571e Binary files /dev/null and b/content/blog/august-2021/img/august-5.webp differ diff --git a/content/blog/august-2021/img/august-6.webp b/content/blog/august-2021/img/august-6.webp new file mode 100644 index 000000000..ae720b0b2 Binary files /dev/null and b/content/blog/august-2021/img/august-6.webp differ diff --git a/content/blog/august-2021/index.md b/content/blog/august-2021/index.md new file mode 100644 index 000000000..4d5e4d067 --- /dev/null +++ b/content/blog/august-2021/index.md @@ -0,0 +1,80 @@ +--- +title: "August 2021" +date: 2021-08-27 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - ESP-IDF + - Instagram + - Newsletter + +--- +Hi everyone, + +Earlier this month, a workshop focusing on ESP32 applications took place in the [Milwaukee School of Engineering](http://www.msoe.edu/), a non-profit university in Winsconsin, USA. The workshop was run by Peter Haydock, founding director of [Gearbox Labs](http://gearboxlabs.org/), which produce project-based STEM and STEAM resources. The workshop was part of [Building2Learn](http://www.building2learn.org/), which is an innovative program connecting engineering, construction and manufacturing industries to Milwaukee’s next generation of talent. + +Through this workshop, students had the opportunity to develop academic proficiency, life skills, and career plans as they learned how to use new technologies in real work environments. Peter Haydock said after the workshop: “Seeing so many motivated future coders and engineers working on our IoT projects inspires us. We were honored to work with students on setting up their internet-connected smart-home prototypes. The [Espressif Systems](https://www.facebook.com/espressif/)[ESP32](https://www.espressif.com/en/products/socs/esp32) was perfect for their projects!” + +{{< figure + default=true + src="img/august-1.webp" + >}} + +*Gearbox Labs’ Workshop at MSOE, focused on ESP32! [Photo courtesy of *[*Gearbox Labs’ Facebook profile*](https://www.facebook.com/100132818016114/posts/568218071207584/?d=n)*.]* + +Other topics you can read about in this month’s newsletter include: + +[__Improvements to the ESP-IDF Installation Process and Tooling__ ](https://www.espressif.com/en/news/esp-idf-improvements) + +{{< figure + default=true + src="img/august-2.webp" + >}} + +Over the past few years, we have received requests from our customers to simplify the [ESP-IDF](https://github.com/espressif/esp-idf/releases/tag/v4.3) installation process and usage. This article describes some of the recent improvements in this area. + +[__Releasing LTS of AWS IoT Device SDK for Embedded C on ESP32__ ](https://www.espressif.com/en/news/LTSrelease) + +{{< figure + default=true + src="img/august-3.webp" + >}} + +Since 2017, [Espressif SoCs](https://www.espressif.com/en/products/socs) have been capable of connecting to the AWS IoT Core and related services. There are two ways to connect Espressif Wi-Fi SoCs to the AWS IoT Core. Click [here](https://www.espressif.com/en/news/LTSrelease) to see how. + +[__Check out ESP-DL!__ ](https://www.espressif.com/en/news/ESP-DL) + +{{< figure + default=true + src="img/august-4.webp" + >}} + +[ESP-DL](https://github.com/espressif/esp-dl/) is a library for high-performance deep learning resources dedicated to [Espressif SoCs](https://www.espressif.com/en/products/socs). ESP-DL provides APIs for Neural Network (NN) Inference, Image Processing, Math Operations and Deep Learning Models. + +[__Magicbit: An ESP32-Driven Dev Board on Kickstarter__ ](https://www.espressif.com/en/news/ESP32_magicbit) + +{{< figure + default=true + src="img/august-5.webp" + >}} + +[Magicbit](https://www.kickstarter.com/projects/magicbit0/magicbit-create-your-first-iot-project-in-10-minutes) adds a bit of …magic to the projects of IoT beginners and seasoned professionals alike! This new [ESP32](https://www.espressif.com/en/products/socs/esp32)-powered, Arduino-compatible dev board got fully funded on Kickstarter in just four hours! + +[__Meet the ESP-EYE-Powered Doc InSight__ ](https://www.espressif.com/en/news/ESP-EYE-DocInSight) + +{{< figure + default=true + src="img/august-6.webp" + >}} + +Created by American engineer Nick Bild, [Doc InSight](https://www.hackster.io/nickbild/doc-insight-862f29) provides an augmented reality heads-up display driven by [ESP-EYE](https://www.espressif.com/en/products/devkits/esp-eye/overview) and built into a pair of glasses. It is designed specifically for healthcare professionals, and aims to help them treat their patients more efficiently. + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-1.webp b/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-1.webp new file mode 100644 index 000000000..bd7bcdd9f Binary files /dev/null and b/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-1.webp differ diff --git a/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-2.webp b/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-2.webp new file mode 100644 index 000000000..117efba6c Binary files /dev/null and b/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-2.webp differ diff --git a/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-3.webp b/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-3.webp new file mode 100644 index 000000000..79d47734b Binary files /dev/null and b/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-3.webp differ diff --git a/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-4.webp b/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-4.webp new file mode 100644 index 000000000..b44ba4942 Binary files /dev/null and b/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-4.webp differ diff --git a/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-5.webp b/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-5.webp new file mode 100644 index 000000000..b507d0eca Binary files /dev/null and b/content/blog/blink-led-on-esp32-with-rtos-nuttx/img/blink-5.webp differ diff --git a/content/blog/blink-led-on-esp32-with-rtos-nuttx/index.md b/content/blog/blink-led-on-esp32-with-rtos-nuttx/index.md new file mode 100644 index 000000000..2e92d358d --- /dev/null +++ b/content/blog/blink-led-on-esp32-with-rtos-nuttx/index.md @@ -0,0 +1,134 @@ +--- +title: "Blink LED on ESP32 with RTOS NuttX" +date: 2020-11-30 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - sara-monteiro +tags: + - Nuttx + - Esp32 + +--- +{{< figure + default=true + src="img/blink-1.webp" + >}} + +## Introduction + +This article is part of the “First Steps with ESP32 and NuttX” series. A series whose objective is to present an overview of the NuttX Operating System and to provide instructions for using NuttX on ESP32. + +The [first part](/blog/getting-started-with-esp32-and-nuttx) of the series showed how to prepare the environment, compile and build the Operating System (NuttX) until uploading the firmware to the SoC (ESP32). + +This is the second part and will demonstrate how to run the famous “Hello World” from the Embedded Systems world, i.e., an application that blinks a LED. The evaluation board used here is a DevKit v1 and the built-in LED will be used for convenience. If your DevKit does not come with a built-in LED, just connect an LED to pin 2 in series with a resistor as it will be briefly discussed in the execution section. + +## Including LED + +From the nuttx directory, clean your current configuration and pre-existing binaries, load the configuration for ESP32 DevKit board with nsh (NuttX shell) and finally enter the configuration menu using the following commands: + +``` +cd ~/nuttxspace/nuttx +make distclean +./tools/configure.sh esp32-devkitc:nsh +make menuconfig +``` + +To add the driver for the LED, navigate to* Device Drivers-> LED Support *and select* LED Driver and Generic Lower Half LED Driver* (Click y). In this step you are adding the driver for the LED. + +{{< figure + default=true + src="img/blink-2.webp" + >}} + +Return to the home menu via ‘Exit’. Just use the side arrows and ‘Enter’. Finally, to add the example, navigate to *Application Configuration-> Examples* and select *Led Driver Example.* + +{{< figure + default=true + src="img/blink-3.webp" + >}} + +Exit the menu via “Exit” and save the configuration. + +✓As a shortcut, you may load the *leds* config instead of nsh. If you do so, you don’t need to enter the configuration menu. This config has everything included for you. It’s nice to try both to realize how configs may be used to try functionalities faster but it’s also nice to get familiar with the menuconfig options. + +## Building and Flashing + +If you did not add the paths for the cross compiler binaries and for the esptool to PATH permanently as suggested in the [Getting Started](/blog/getting-started-with-esp32-and-nuttx), run the following commands to load these paths. + +``` +export PATH=$PATH:/opt/xtensa/xtensa-esp32-elf/bin +export PATH=$PATH:/home//.local/bin +``` + +__NOTE:__ Replace with your user name. + +Finally, clean up any previously generated binaries, connect your DevKit to your computer and perform the build process and flash using the following commands: + +``` +make clean +make download ESPTOOL_PORT=/dev/ttyUSB0 +``` + +NOTE: adjust the USB port according to your configuration. In case this is the first time you are downloading the binaries to ESP32, pass the bootloader and the partition table directory as an argument in the second comand as instructed in the [previous article](/blog/getting-started-with-esp32-and-nuttx) from this series. + +## Example Execution + +Access the serial terminal and execute the command leds. This command will run the selected example! + +``` +sudo picocom /dev/ttyUSB0 -b 115200 +``` + +{{< figure + default=true + src="img/blink-4.webp" + >}} + +Congratulations! From now on you should be seeing the LED blinking! If you want to return to the terminal, reset the ESP32 by pressing the DevKit EN button. If you do not have a built-in led, connect an LED to pin 2 and associate a resistor in series (between 100 Ω to 1 k Ω). + +{{< figure + default=true + src="img/blink-5.webp" + >}} + +Tip: + +Run “*help”* or “?” to check the built-in apps like exposed in Figure 3. + +## Current Support Status + +At the moment this article is written the following peripherals/features are supported: + +- Symmetric Multi-Processing (SMP) + +It’s already possible to use the 2 ESP32 cores. The default configuration only uses 1 core. If you want to use both cores, access the following path in menuconfig: + +-> RTOS Features -> Tasks and Scheduling + +and enable the SMP option. + +- SPI +- I2C +- SPI Flash +- Ethernet +- WiFi +- PSRAM +- 4 Generic Timers +- Watchdog Timers +- Hardware Random Number Generator (RNG) +- Low Power support (PM) + +You can keep yourself updated through the following link: + +[https://github.com/apache/incubator-nuttx/tree/master/boards/xtensa/esp32/esp32-devkitc](https://github.com/apache/incubator-nuttx/tree/master/boards/xtensa/esp32/esp32-devkitc) + +Currently, the support for debugging with OpenOCD and eFUSE are in development! Sooner, they will also be available! + +So, stay tuned! + +## Where to find support? + +To participate in the Nuttx mail list, you can send an email to [dev-subscribe@nuttx.apache.org](mailto:dev-subscribe@nuttx.apache.org). + +For help, doubts, bugs reports, and discussion regarding NuttX, you can send an email to [dev@nuttx.apache.org](mailto:dev@nuttx.apache.org). diff --git a/content/blog/book-review-developing-iot-projects-with-esp32-2nd-edition/img/book-1.webp b/content/blog/book-review-developing-iot-projects-with-esp32-2nd-edition/img/book-1.webp new file mode 100644 index 000000000..29baf228a Binary files /dev/null and b/content/blog/book-review-developing-iot-projects-with-esp32-2nd-edition/img/book-1.webp differ diff --git a/content/blog/book-review-developing-iot-projects-with-esp32-2nd-edition/index.md b/content/blog/book-review-developing-iot-projects-with-esp32-2nd-edition/index.md new file mode 100644 index 000000000..602cc6af7 --- /dev/null +++ b/content/blog/book-review-developing-iot-projects-with-esp32-2nd-edition/index.md @@ -0,0 +1,44 @@ +--- +title: "Book review: Developing IoT Projects with ESP32 (2nd Edition)" +date: 2024-01-29 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - juraj-michalek +tags: + - Books + - Esp32 + - IoT + - AI + +--- +“Developing IoT Projects with ESP32” by Vedat Ozan Oner serves as a key guide, especially in its second edition, which has been thoughtfully updated to reflect the latest trends in IoT development. + +{{< figure + default=true + src="img/book-1.webp" + >}} + +Targeted at C++ developers who want to create powerful applications using the ESP-IDF. The book explains step by step the complexities of IoT development with the ESP32. Vedat Ozan Oner, the author, is recognized for his passion for IoT, ability of making tricky topics easy to understand. + +## Content and Structure + +The book is well-organized into twelve detailed chapters, each focusing on a specific area of ESP32 development. Starting with a basic introduction to IoT and the ESP32 platform in the first chapter and moving to advanced discussions on Machine Learning and Edge Impulse Development in later chapters, the book provides a step-by-step learning path. Oner introduces complex concepts like LittleFS or FlatBuffers at just the right time, allowing readers to build their knowledge gradually. + +## Who is it for? + +While the book is a valuable source of information for students and hobbyist makers, the readers are expected to have a basic knowledge of software development. The book content breaks down complex concepts and code into smaller, manageable parts, which are then put together into larger applications. This approach makes the learning process smoother and shows how to apply theory to real-life projects. + +## Key Highlights + +One of the book’s important points is coverage of security in IoT, a critical yet often neglected topic. Chapter 7 dives into essential security features needed for any large-scale IoT project, including secure boot processes and Over-the-Air (OTA) updates. + +The chapters on Smart Home solutions and Machine Learning bring the book up to date with the latest trends in AI and IoT. These sections are especially notable, offering a peek into the future of IoT devices that are not just connected but also smart. + +## Practicality and Relevance + +“Developing IoT Projects with ESP32” is packed with practical examples, source code, and advice that can be used right away in real projects. The use of diagrams and code snippets helps clarify complex topics, making this book a hands-on guide for developers looking to improve their IoT development skills. + +## Conclusion + +Overall, “Developing IoT Projects with ESP32” is a comprehensive and current guide. Whether you are a student, a hobbyist maker or an experienced developer, this book is a valuable resource, offering insights into security, OTA, AI, and ML, ensuring that your IoT projects are not only functional but also secure and forward-looking. diff --git a/content/blog/books-simplified-embedded-rust/index.md b/content/blog/books-simplified-embedded-rust/index.md index a06bbd832..10fe9ba01 100644 --- a/content/blog/books-simplified-embedded-rust/index.md +++ b/content/blog/books-simplified-embedded-rust/index.md @@ -2,6 +2,7 @@ title: "Simplified Embedded Rust: A Comprehensive Guide to Embedded Rust Development" date: 2024-06-07 showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" authors: - "juraj-michalek" tags: ["Rust", "Embedded Systems", "ESP32", "ESP32-C3", "Espressif", "Wokwi", "Book", "Review"] diff --git a/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/img/build-1.webp b/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/img/build-1.webp new file mode 100644 index 000000000..16a6d45c6 Binary files /dev/null and b/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/img/build-1.webp differ diff --git a/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/img/build-2.webp b/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/img/build-2.webp new file mode 100644 index 000000000..3c6accafc Binary files /dev/null and b/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/img/build-2.webp differ diff --git a/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/img/build-3.webp b/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/img/build-3.webp new file mode 100644 index 000000000..866cb82ca Binary files /dev/null and b/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/img/build-3.webp differ diff --git a/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/img/build-4.webp b/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/img/build-4.webp new file mode 100644 index 000000000..ac437a279 Binary files /dev/null and b/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/img/build-4.webp differ diff --git a/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/index.md b/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/index.md new file mode 100644 index 000000000..ff31833ff --- /dev/null +++ b/content/blog/build-affordable-secure-connected-devices-with-esp32-h2/index.md @@ -0,0 +1,124 @@ +--- +title: "Build affordable Secure connected devices with ESP32-H2" +date: 2023-05-11 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - anant-raj-gupta +tags: + - Security + - Mcu + - Embedded Systems + - Matter + - Connectivity + +--- +The awareness, as well as the associated concerns, about connected device security, is ever-increasing. With the European Union’s [Cyber Resilience Act](https://digital-strategy.ec.europa.eu/en/library/cyber-resilience-act) also coming into effect soon, it has become ever so important to have security features built-in to the devices in hardware. + +The Espressif ESP32-H2 has been built to provide an affordable security solution to all and thus integrates a variety of security features. The ESP32-H2 Platform security considerations can be broadly classified into the following categories. + +- Secure Boot +- Flash Encryption +- Protecting Debug Interfaces +- Secure Storage +- Memory Protection +- Device Identity protection + +These security features are implemented using a variety of different HW accelerators as well as SW flows to go along with them. Let’s go over each of the security features in a little bit more details. + +## Secure Boot + +Secure Boot protects a device from running any unauthorized (i.e., unsigned) code by checking that each piece of software being booted is signed. On an ESP32-H2, these pieces of software include the second stage bootloader and each application binary. Note that the first stage bootloader does not require signing as it is ROM code and thus cannot be changed. + +{{< figure + default=true + src="img/build-1.webp" + >}} + +The Secure Boot process on the ESP32-H2 involves the following steps: + +The ESP32-H2 has provisions to choose between an RSA-PSS or ECDSA-based secure boot verification scheme. ECDSA provides similar security strength compared to RSA with shorter key lengths. Current estimates suggest that ECDSA with curve P-256 has an approximate equivalent strength to RSA with 3072-bit keys. However, ECDSA signature verification takes considerably more time compared to RSA signature verification. + +{{< figure + default=true + src="img/build-2.webp" + >}} + +The RSA-PSS or ECDSA public key is stored in the eFuse on the device. The corresponding RSA-PSS or ECDSA private key is kept at a secret place and is never accessed by the device. Up to three public keys can be generated and stored in the chip during manufacturing. ESP32-H2 provides the facility to permanently revoke individual public keys. + +## Flash Encryption + +Flash encryption is intended to encrypt the contents of the ESP32-H2’s off-chip flash memory. Once this feature is enabled, firmware is flashed as plaintext, and then the data is encrypted in place on the first boot. As a result, physical readout of flash will not be sufficient to recover most flash contents. + +When flash encryption is enabled, all memory-mapped read accesses to flash are transparently, and at runtime, decrypted. The ESP32-H2 uses the XTS-AES block cipher mode with a 256-bit key size for flash encryption. The flash controller uses the key stored in the eFUSE to perform the decryption. Similarly, any memory-mapped write operation causes the corresponding data to be transparently encrypted before being written to flash. + +{{< figure + default=true + src="img/build-3.webp" + >}} + +During the development stage, there is a frequent need to program different plaintext flash images and test the flash encryption process. This requires that Firmware Download mode can load new plaintext images as many times as needed. However, during the manufacturing or production stages, Firmware Download mode should not be allowed to access flash contents for security reasons. Hence, two different flash encryption configurations were created. + +In “Development” mode, it is still possible to flash new plaintext firmware to the device, and the stub code downloaded via UART DL mode will transparently encrypt this firmware using the key stored in hardware. This allows, indirectly, to read out the plaintext of the firmware in flash. In “Release” mode, flashing plaintext firmware to the device without knowing the encryption key is no longer possible. For production use, flash encryption should be enabled in the “Release” mode only. + +## eFuse based OTP memory + +eFuse plays a very important role in the overall security aspects. It provides a secure storage space on the device itself as well as also a mechanism to disable potential back-doors for on-field deployed devices. + +The eFuse is a type of one-time programmable (OTP) memory region which, once programmed from 0 to 1, can never be changed back to 0. The eFuse plays an important role in the functioning of the security features of the SoC as it is used to store user data and hardware parameters, including control parameters for hardware modules, calibration parameters, the MAC address, and keys used for the encryption and decryption module. + +The ESP32-H2 contains a 4096-bit eFuse memory, out of which 1792 bits are reserved for custom use and can be utilized by the application. Once the keys are stored in the eFuse, it can be configured such that any software running cannot read these keys, and only the various permitted hardware peripherals can read and use these keys. The eFuse can also be used to control the disabling of USB debug as well as JTAG debug. + +## Memory Protection + +The permission management of ESP32-H2 can be divided into two parts: __PMP (Physical Memory Protection)__ and __APM (Access Permission Management)__ . + +{{< figure + default=true + src="img/build-4.webp" + >}} + +PMP manages the CPU’s access to all address spaces. APM does not manage the CPU’s access to ROM and SRAM. If the CPU needs to access ROM and HP SRAM, it needs permission only from PMP; if it needs to access to other address spaces, it needs to pass PMP’s permission management first and then the APM’s. If the PMP check fails, APM check will not be triggered. + +The APM module contains two parts: the TEE (Trusted Execution Environment) controller and the APM controller. + +- The TEE controller is responsible for configuring the security mode of a particular master in ESP32-H2 to access memory or peripheral registers. There are four security modes supported. When the RISC-V core is in Machine mode, the security mode is set to Trusted(TEE). When the core is in User mode, the security mode can se set to any of the 3 REE based on the register configurations. +- The APM controller is responsible for managing a master’s permission (read/write/execute) when accessing memory and peripheral registers. By comparing the pre-configured address ranges and corresponding access permissions with the information carried on the bus, such as Master ID, security mode, access address, access permissions, etc, the APM controller determines whether access should be allowed or blocked. The total memory space including internal memory, external memory and peripheral space can be configured into 16 address regions to define the different access permissions to each of these regions. + +When ever there is an illegal access, if enabled, an interrupt is be generated and the details of the illegal access are recorded. The APM controller will record relevant information including the master ID, security mode, access address, reasons for illegal access (address out of bounds or permission restrictions), and permission management result of each access path. + +## Device Identity protection + +The __Digital Signature (DS) peripheral__ is a security feature included in the ESP32-H2 and enhanced from the previous version in the Espressif’s SoC. It produces hardware accelerated digital signatures, without the private key being accessible by software. This allows the private key to be kept secured on the device without anyone other than the device hardware being able to access it. You can read more in details about in a previous [blog post](/esp32-s2-digital-signature-peripheral-7e70bf6dde88). + +Digital Signature Peripheral allows the manufacturer to generate the symmetric encryption key that can be unique to each device and then encrypt the device private key with the same encryption key. At runtime, the Digital Signature Peripheral allows application to perform signing operation with this encrypted device private key without software being able to access the plaintext private key. + +It uses pre-encrypted parameters to calculate a signature. The parameters are encrypted using HMAC as a key-derivation function. In turn, the HMAC uses eFuses as input key. The whole process happens in hardware so that neither the decryption key nor the input key for the HMAC key derivation function can be seen by the software while calculating the signature. + +__ECDSA Accelerator__ With ESP32-H2, supports ECDSA based private keys as well on top of the RSA based keys. This is particularly important with regards to [Matter](https://csa-iot.org/all-solutions/matter/). The [Matter security model](/matter-security-model-37f806d3b0b2) is based on [Public Key Infrastructure](https://en.wikipedia.org/wiki/Public_key_infrastructure)(PKI), a cryptographic mechanism widely adopted in the Internet and uses the ECC with the “P-256” curve for digital signatures and key exchanges. This makes ECDSA based signatures mandatory for certificate exchanges. + +Elliptic Curve Digital Signature Algorithm, or ECDSA, is one of the more complex public key cryptography encryption algorithms. Keys are generated via elliptic curve cryptography, which are smaller than the average keys generated by digital signing algorithms. ECDSA’s use of smaller keys to achieve the same level of security as other digital signature algorithms is a major advantage, reducing implementation overheads such as key storage and exchange. + +## Cryptographic Accelerators + +The ESP32-H2 includes a wide range of cryptographic accelerators to offload the CPU for all commonly required cryptographic functions for the above features as well as other common application scenarios. The ESP32-H2 continues to have the common accelerators found in the ESP32 series, including: + +__*AES-128/256*__ : ESP32-H2 integrates an Advanced Encryption Standard (AES) accelerator supporting AES-128/AES-256 encryption and decryption specified in FIPS PUB 197 for protection against DPA attack. The peripheral also supports block cipher modes ECB, CBC, OFB, CTR, CFB8, and CFB128 under NIST SP 800–38A. + +__*SHA Accelerator:*__ The ESP32-H2 integrates a HW to accelerate the Secure Hashing Algorithm (SHA) hash algorithms SHA-1, SHA-224 and SHA-256 introduced in FIPS PUB 180–4 Spec. Secure Hashing Algorithms are required in all digital signatures and certificates relating to SSL/TLS connection nd is also used by the Digital Signature Peripheral internally. + +__*RSA Accelerator:*__ The RSA algorithm is a public-key signature algorithm based on the [Public Key cryptography](https://en.wikipedia.org/wiki/Public-key_cryptography). The RSA accelerator provides hardware support for high-precision computation used in various RSA asymmetric cipher algorithms, significantly improving their run time and reducing their software complexity. The RSA accelerator also supports operands of different lengths, which provides more flexibility during the computation. + +__*HMAC:*__ The HMAC (Hash-based Message Authentication Code) module provides hardware acceleration for SHA256-HMAC, as described in RFC 2104,* *generation. The 256-bit HMAC key is stored in an eFuse key block and can be set as read-protected. HMACs work with pre-shared secret keys and provide authenticity and integrity to a message. + +__*ECC Accelerator : *__ Elliptic Curve Cryptography (ECC) is an approach to public-key cryptography based on the algebraic structure of elliptic curves. ECC uses smaller keys compared to RSA cryptography while providing equivalent security. ESP32-H2’s ECC Accelerator can complete various calculations based on 2 different elliptic curves, namely P-192 and P-256 defined in FIPS 186–3, thus accelerating the ECC algorithm and ECC-derived algorithms. The HW supports up to 11 working modes. + +This summarises the various security features present in the ESP32-H2 which can enable the development of affordable secure connected devices for varied applications. + +__*Further Readings:*__ + +- *IDF security guide: *[*https://docs.espressif.com/projects/esp-idf/en/latest/esp32h2/security/security.html*](https://docs.espressif.com/projects/esp-idf/en/latest/esp32h2/security/security.html) +- *Secure Boot v2 guide : *[*https://docs.espressif.com/projects/esp-idf/en/latest/esp32h2/security/secure-boot-v2.html*](https://docs.espressif.com/projects/esp-idf/en/latest/esp32h2/security/secure-boot-v2.html) +- *Flash Encryption guide : *[*https://docs.espressif.com/projects/esp-idf/en/latest/esp32h2/security/flash-encryption.html*](https://docs.espressif.com/projects/esp-idf/en/latest/esp32h2/security/flash-encryption.html) +- *Digital Signature guide : *[*https://docs.espressif.com/projects/esp-idf/en/latest/esp32h2/api-reference/peripherals/ds.html*](https://docs.espressif.com/projects/esp-idf/en/latest/esp32h2/api-reference/peripherals/ds.html) +- *eFuse Manager guide : *[*https://docs.espressif.com/projects/esp-idf/en/latest/esp32h2/api-reference/system/efuse.html*](https://docs.espressif.com/projects/esp-idf/en/latest/esp32h2/api-reference/system/efuse.html) diff --git a/content/blog/build-embedded-swift-application-for-esp32c6/index.md b/content/blog/build-embedded-swift-application-for-esp32c6/index.md index d15054aa3..19928346e 100644 --- a/content/blog/build-embedded-swift-application-for-esp32c6/index.md +++ b/content/blog/build-embedded-swift-application-for-esp32c6/index.md @@ -2,6 +2,7 @@ title: "Build Embedded Swift Application for ESP32-C6" date: 2024-07-22 showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" authors: - "juraj-michalek" tags: ["Embedded Systems", "ESP32-C6", "Espressif", "Swift", "experimental"] diff --git a/content/blog/ceo-letter-feb-2020/index.md b/content/blog/ceo-letter-feb-2020/index.md new file mode 100644 index 000000000..4e56d35b1 --- /dev/null +++ b/content/blog/ceo-letter-feb-2020/index.md @@ -0,0 +1,37 @@ +--- +title: "CEO Letter: Feb 2020" +date: 2020-02-08 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - CEO + - Ceo Blog + +--- +Dear all, + +2019 has been an eventful year for Espressif; we went [IPO](https://www.espressif.com/en/news/Espressif_IPO) and we launched the new [ESP32-S](https://www.espressif.com/en/products/hardware/socs) series of chips that enable making secure, connected devices with high performance at affordable cost. + +We also worked on improving the security of our existing systems. [ESP32v3](https://www.espressif.com/en/news/ESP32_FIA_Analysis) (aka ESP32 ECO3, the updated version of ESP32) patched the hardware vulnerabilities that were uncovered by the works of our security consultants and later independently by “LimitedResults” (aka “LR”). We thank them for the work on ESP32; Espressif has been and will always be transparent about any security issues. The security of our systems is also constantly reviewed by the best security professionals of our industry, and we spare no effort to fix any issues that comes up. To our customers, we reaffirm our commitment to provide the best support for both our old and new products alike. + +Espressif is about building the best user experience. For this, we have built the most comprehensive ecosystem for IoT developers, including our flagship [ESP-IDF](https://docs.espressif.com/projects/esp-idf/en/latest/index.html) SDK, application frameworks: [ESP-JUMPSTART](https://docs.espressif.com/projects/esp-jumpstart/en/latest/introduction.html) and ESP-RAINMAKER, [ESP-SKAINET](https://www.espressif.com/en/products/software/esp-skainet/overview) for AI enabled offline voice commands engines, [ESP-WHO](https://github.com/espressif/esp-who) for AI enabled face recognition solutions, development boards, and modules. + +As you can see, we are not just about creating the best Wi-Fi chips, but also about providing to our customers complete and fully customizable solutions that work right out of the box. We also understand that connected product development and maintenance needs to be simplified without compromising flexibility. Try our latest [ESP32-S2](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf) based ESP-RAINMAKER development boards that enable you to build the a complete cloud connected product within a couple of hours. + +In 2020, we will be launching 4 new chips, covering different segments of the market, price points and performance. Our latest chips feature our new radio architecture that has lower power consumption while maintaining the same -40°C~125°C performance. The peripherals have been upgraded with highly sensitive capacitive touch IO’s. Capacitive touch controls are now a staple of user interfaces because they are cost efficient; certain functions such as slider controls are better supported with capacitive touch than with analog implementations. + +Recently there has been an unfortunate coronavirus epidemic in China. We have taken measures to work around the restrictions caused by the situation and as a result, based on our current assessment of the situation, the disruption to our operations will be minimal. We and our suppliers are expected to resume operations on the 10th of February. Our teams in Europe, India and China continue in our work to best serve our customers. Should you have any questions or requests, please do write to our business team at [sales@espressif.com](mailto:sales@espressif.com). + +Lastly, we thank our supporters, commercial customers and makers. IoT is a powerful technology that can be used to create solutions that could solve the pressing issues of our time and we continue to believe in our open source approach, robust and low cost solutions that can help everyone develop applications seamlessly. + +Happy coding! + +Best regards, + +Teo Swee Ann + +CEO, Espressif Systems + +2nd February 2020 diff --git a/content/blog/command-response-framework-in-esp-rainmaker/img/command-1.webp b/content/blog/command-response-framework-in-esp-rainmaker/img/command-1.webp new file mode 100644 index 000000000..e2ed6cd7b Binary files /dev/null and b/content/blog/command-response-framework-in-esp-rainmaker/img/command-1.webp differ diff --git a/content/blog/command-response-framework-in-esp-rainmaker/index.md b/content/blog/command-response-framework-in-esp-rainmaker/index.md new file mode 100644 index 000000000..39bfd593f --- /dev/null +++ b/content/blog/command-response-framework-in-esp-rainmaker/index.md @@ -0,0 +1,50 @@ +--- +title: "Command — Response Framework in ESP RainMaker" +date: 2024-07-31 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - piyush-shah +tags: + - Esp32 + - Esp Rainmaker + - Espressif + - IoT + - Rainmaker + +--- +[*If you have been following the Espressif blogs and announcements, you must already be aware of ESP RainMaker and its various features. If not, please check out the info *[*here*](https://rainmaker.espressif.com/)* so that you get an idea about what ESP RainMaker is before you proceed further*.] + +Admin users in ESP RainMaker can look at some basic node data like type, model, firmware version, etc. and push OTA firmware upgrades. They can view additional diagnostics data if linked with ESP Insights. However, there was no way for them to send some data to the nodes. The [set params](https://swaggerapis.rainmaker.espressif.com/#/Node%20Parameter%20Operations/updatenodestate) operations were available to only end users. + +The command — response framework introduced in ESP RainMaker now provides a new way to communicate with the nodes. It is available to admin as well as end users (both, primary and secondary). It also provides better access control on node side and allows more reliable communication with explicit error reporting from the firmware. + +## Workflow + +A high level workflow is shown here: + +{{< figure + default=true + src="img/command-1.webp" + >}} + +To explain in short, + +- Client generates request payload and sends to cloud. +- Cloud assigns it a request id and returns it back to the client, which can then be used to track the status. +- The request is forwarded to the node right away if it is online or is sent later if the node is offline at that time. +- The response of the node is tracked against the request id so that the status can be queried by the client. + +You can read more about the specifications [here](https://rainmaker.espressif.com/docs/cmd-resp). + +## Advantages + +This new framework enables many new use cases and workflows + +One of the key advantages is that it allows admins to send some data or commands to the nodes, which was earlier not possible. Moreover, on the firmware side, you can specify which type of users (admin, primary, secondary user) should have access to the commands, giving better access control. Eg. You may allow admins and secondary users to reboot a device, but only primary users will be able to reset the Wi-Fi. You can let only primary users to create schedules, but not admins or secondary users. + +Another major advantage is that you can trigger a command even when a node is offline. This allows to push certain configurations and other information at any time and let the nodes get them whenever they come back online. + +The framework not only provides reliable information about delivery of commands to a node, but also lets users check the status (Eg. request timed out, value out of bounds, operation not permitted, etc.) + +We hope that this new framework will unlock new use cases and workflows. Do give this a try by looking into the [docs](https://rainmaker.espressif.com/docs/cmd-resp) and let us know if you find this useful. Command-response sample usage is also available in the [led_light example](https://github.com/espressif/esp-rainmaker/blob/master/examples/led_light/main/app_main.c) diff --git a/content/blog/conversational-interfaces/img/conversational-1.webp b/content/blog/conversational-interfaces/img/conversational-1.webp new file mode 100644 index 000000000..6c6e6714c Binary files /dev/null and b/content/blog/conversational-interfaces/img/conversational-1.webp differ diff --git a/content/blog/conversational-interfaces/index.md b/content/blog/conversational-interfaces/index.md new file mode 100644 index 000000000..7a28ef2c8 --- /dev/null +++ b/content/blog/conversational-interfaces/index.md @@ -0,0 +1,24 @@ +--- +title: "Conversational Interfaces" +date: 2018-10-24 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Voices + - IoT + - Technology + - Esp32 + +--- +{{< figure + default=true + src="img/conversational-1.webp" + >}} + +If you wish to define your own conversation with your product, this solution is for you. Integrations with Amazon Lex and Google DialogFlow helps you create intuitive conversations between your device and its user. + +- Building Audio Conversations with ESP32: [https://medium.com/the-esp-journal/embedding-voice-into-devices-with-esp32-107d9211633c](/blog/embedding-voice-into-devices-with-esp32) + +Please reach out to sales@espressif.com for more details. diff --git a/content/blog/core-dump-a-powerful-tool-for-debugging-programs-in-zephyr-with-esp32-boards/img/core-1.webp b/content/blog/core-dump-a-powerful-tool-for-debugging-programs-in-zephyr-with-esp32-boards/img/core-1.webp new file mode 100644 index 000000000..9b0064861 Binary files /dev/null and b/content/blog/core-dump-a-powerful-tool-for-debugging-programs-in-zephyr-with-esp32-boards/img/core-1.webp differ diff --git a/content/blog/core-dump-a-powerful-tool-for-debugging-programs-in-zephyr-with-esp32-boards/index.md b/content/blog/core-dump-a-powerful-tool-for-debugging-programs-in-zephyr-with-esp32-boards/index.md new file mode 100644 index 000000000..c8f404481 --- /dev/null +++ b/content/blog/core-dump-a-powerful-tool-for-debugging-programs-in-zephyr-with-esp32-boards/index.md @@ -0,0 +1,334 @@ +--- +title: "Core Dump: A Powerful Tool for Debugging Programs in Zephyr with ESP32 Boards" +date: 2023-07-27 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - lucas-tamborrino +tags: + - Zephyr + - Core Dump + - Debugging Tools + - Esp32 + - Debug + +--- +{{< figure + default=true + src="img/core-1.webp" + >}} + +[Zephyr OS](https://www.zephyrproject.org/) is an open-source, scalable, and adaptable real-time operating system (RTOS) for multiple hardware platforms, including [Espressif’s](https://www.espressif.com/) SoCs ESP32, ESP32S2, ESP32C3, and ESP32S3. Zephyr OS provides a wide range of features for embedded systems development, including support for generating and analyzing core dumps on unrecoverable software errors. + +A core dump is a snapshot of the state of a program’s memory when it crashes. It can be used to debug the program and find the cause of the crash. So, it is possible to find out what task, at what instruction (line of code), and what call stack of that program led to the crash. It is also possible to dump variables content on demand if previously attributed accordingly. + +Zephyr OS provides support for multiple core dump backends, including the logging backend. The logging backend dumps core dumps to the UART, which can then be saved to a file and analyzed using a custom GDB server and the GDB provided by the SDK. + +## How To Use + +To use the logging backend for core dumps, you need to enable the following Kconfig options: + +``` +CONFIG_DEBUG_COREDUMP=y +CONFIG_DEBUG_COREDUMP_BACKEND_LOGGING=y +``` + +Once you have enabled the logging backend, the application will generate the core dump during a fatal error. CPU registers and memory content will be printed to the console. + +Copy and paste the content into a file called __coredump.log__ . + +We need to convert this text file to a binary that can be parsed by the custom GDB server. To do that just run the coredump_serial_log_parser.py script + +``` +./scripts/coredump/coredump_serial_log_parser.py coredump.log coredump.bin +``` + +The script will output the binary file to __coredump.bin__ . + +Start the custom GDB server with the __.elf__ file from the zephyr application and the binary core dump file as parameters: + +``` +./scripts/coredump/coredump_gdbserver.py build/zephyr/zephyr.elf coredump.bin +``` + +In another terminal just run Xtensa’s GDB from the Zephyr SDK with the __.elf__ file as parameter: + +``` +~/zephyr-sdk-0.16.0/xtensa-espressif_esp32_zephyr-elf/bin/xtensa-espressif_esp32_zephyr-elf-gdb build/zephyr/zephyr.elf +``` + +Inside GDB, attach to the custom server with: + +``` +(gdb) target remote localhost:1234 +``` + +Now you can examine the state of the program at the time of the crash, read variables values, backtraces and register values. + +## Example + +Here is an example of how to use the logging backend for core dumps to debug a program. + +We will build and flash the coredump test located in __*tests/subsys/debug/coredump*__ + +The program defines three functions: *func_1*, *func_2*, and *func_3*. *func_1* calls *func_2*, which calls *func_3*. *func_3* attempts to dereference a null pointer. This will cause the program to crash. + +The crash will generate a core dump file, which we will use to debug the program. + +``` +west build -p -b esp32 tests/subsys/debug/coredump +``` + +2. Flash and monitor the ESP32 board: + +``` +west flash && west espressif monitor +``` + +Here is the expected output: + +``` +*** Booting Zephyr OS build zephyr-v3.3.0-3986-gebf86941118f *** +Coredump: esp32 +E: ** FATAL EXCEPTION +E: ** CPU 0 EXCCAUSE 29 (store prohibited) +E: ** PC 0x400d0435 VADDR (nil) +E: ** PS 0x60620 +E: ** (INTLEVEL:0 EXCM: 0 UM:1 RING:0 WOE:1 OWB:6 CALLINC:2) +E: ** A0 0x80081716 SP 0x3ffe65e0 A2 0x3f401cb8 A3 (nil) +E: ** A4 0x3f401cb8 A5 0xff A6 0x3ffb1ad8 A7 0x3ffe5dfc +E: ** A8 (nil) A9 0x3ffe6590 A10 0x3f400968 A11 0x3f4012d0 +E: ** A12 0x3ffb1ad8 A13 0x60420 A14 0x3ffe5dd8 A15 0x3ffe5e30 +E: ** LBEG (nil) LEND (nil) LCOUNT (nil) +E: ** SAR 0x1b +E: #CD:BEGIN# +E: #CD:5a4501000500050000000000 +E: #CD:4101006800 +E: #CD:0202000135040d401d000000000000001b000000200606000000000016170880 +E: #CD:e065fe3fb81c403f00000000b81c403fff000000d81afb3ffc5dfe3f00000000 +E: #CD:9065fe3f6809403fd012403f000000009065fe3f6809403fd012403f00000000 +E: #CD:0000000000000000 +E: #CD:4d0100d81afb3f581bfb3f +E: #CD:d81cfb3fd81cfb3f000000000180000000000000000000000000000000000000 +E: #CD:000000000000000000000000000000000000000000000000101bfb3f101bfb3f +E: #CD:6d61696e00000000000000000000000000000000000000000000000000000000 +E: #CD:00000000305efe3f0008000000000000f5ffffff0864fe3f080afb3fffffffff +E: #CD:4d0100305efe3f3066fe3f +E: #CD:f4b6dbfcd7903c37a5f85ffb73a1c5ad7da3432d420e03142b7673dc1f70a451 +E: #CD:e4165f6f2491c43b0aae041aa6bad45d0d019d7bd7061165478aa8e8e9dfb05d +E: #CD:5e9ca79574bd8eee1a446b5919d39bbdc7a78c067dd9348e7dd99f3bc0ae0e59 +E: #CD:05a5d5e1459c6325d537dd4db75d0210f30e67e7e292f5af90ea8bab11d9090c +E: #CD:14bacecb11dc47c19ae8d3922a290fcbe82ff95e23d63ad210459e8fc79dc78a +E: #CD:e443c9dbf22b94b0ed95e23bba0f6006022225d48e85ba76d148caff2b2fd519 +E: #CD:324d6de3d17410eeae3d5a6513bfc8eed68141495be8c069e69dcea9748fd38e +E: #CD:59fc1f6e57f36d52ba51d383d2df4ab9746d893b9bf276879d2182cfd03fe1fe +E: #CD:fce68691b4df96c5ac234d34a8eb21f199191138061a17245042ab8ac94e14ac +E: #CD:0e017619e4b42895aec67da7fdfb525168850547d0f2530247b1995dfaf9ddc5 +E: #CD:168588d974a379bcc3ddbead2edba5571dcbdd29c06ab11b41793d3ba2e15ab4 +E: #CD:da808c516438cd28215077c160bb5e0221b6c2d827db238850687d5cad9736f4 +E: #CD:60f9f777da01758a56b11a2fa9fc4bd9eaddb172f844223ea356ac0d5f77324f +E: #CD:14417a13726f99d28c42bdedf33cc9a198dbe361b4974d152256806c0db076f8 +E: #CD:12b3e2c95e5dc84dd6d028065abf26054ff992b205ca641e249417dd7368bd92 +E: #CD:d8faf9e19687346bf31e315db64a05c049b23cf3a10eb60d6472211fdd43e8cc +E: #CD:7b334dbb3b549c5b91bea3352ac68b3f6b199e2967344cc07da7d79c4bdc884c +E: #CD:6ebcd3093df87d7633ccb583b036864cc48166283095024d592b16600f4ed38f +E: #CD:bd1e1bdaf1538c6134c078d1f7b69f9467774e910b318854a0fcdd8841b12e0d +E: #CD:74ca51cad7c6b020789c6affacc31d39a034d13c0ebaa3a07b53f81091d7b704 +E: #CD:8641f161cbaacd75c8aa1bd1b557470083e87921b4ae92960764aa2ad6eff203 +E: #CD:c32fa391df51c8c38aa88c5a54bf130009f26b64a8b2a15418b4286ab0edc3ec +E: #CD:08d9c9c133fad8213c38e9ccb7505e2940c9612ceeb772440786012cddf5bbaf +E: #CD:435c265247afa7e2cdb315fa23e47a45b9050d8cb61b4a72646f58febc81773f +E: #CD:cbf027958c8a67478a2f9441bc94767ec90f446ba54ff82b893dddaddd42a004 +E: #CD:2a26cb016dfb2c1e0c691e319505c4167e83031ee83cd0843165c00b63fa4e96 +E: #CD:01f75bce679271064f56595a83ca5ae00ea79ba5c396f560a709dfa617e1dd14 +E: #CD:714ee1c87b95a422386d41a70f88df76019315875cc82b030dd005ba35af53bc +E: #CD:029df20768fe4612c91133a5f38602715c05ef9b330ea662402b4779b8de6e8b +E: #CD:6d8cad92e2fe7600ea3c4c83744186abc127d75f6f9334365e0c6b8c2ea6c82b +E: #CD:7ea6b0095adbdbc82ba150a670db718a67d5fe5d8b9f04a48eafff8d2200e075 +E: #CD:d18277cc7bcbd8419bb21b15cfddc8340bd7721707bd54ff04fb72c71ec12ce7 +E: #CD:8ce9635cf260717cbe2cf8392f7796c24a2384dd9db2142dc00e7dc83c9b8119 +E: #CD:3e8a971d612a603e88062e7679ada4082e8fddc80cdd34bfd9df64f4a887d9b0 +E: #CD:920fff4ae8ee63e1e48e611e887334929a89ccce5ecb250c03ca59178b3eb5dc +E: #CD:d88de936c368020f892357c7700d2b9ac237affbe9aad454736025fc37e7a4f0 +E: #CD:b60103116de8e418f17b1ffea7c3840ce9b5de74f2714451e7c774b0fc94d2d1 +E: #CD:8c3e9f17ac30161adf79c9cee52cfa79e62cc228781234124557f6463fe95228 +E: #CD:80d4d0b905bc05fb54e134ced7f84ac128ba82cda103f29f9a62e4c5f4105021 +E: #CD:80f085cb993e77c86f82ecf01dac257e25942f840eccd2e11385a946fd7b508c +E: #CD:71e13192d9b4ceba06ae199b77127b529791be9b878657590a3c5a263d9c8319 +E: #CD:b9f9487e4086539f1e4758b87ca24b70887d185c7e617ff288bde4944e2c6cf3 +E: #CD:fb23feb7aadf90c80c6d00f66d287f80f52c7d593a108e9ff178fc30defc40d4 +E: #CD:3b59f4efbd708b0f0192d457450ad657d3b45fc4d254406d7ac94f4eafdc5be4 +E: #CD:ba1719090cbed14af915ca7991db7b87027ced573a0e6aff7078a83139df611f +E: #CD:3fa23f95b5c39b7e15c92108a5322206fb74ee59e39327b66180c48dd9cbc1cb +E: #CD:00c04eeb3550aa7e24de68fa4aa720be1ee74e8dc10a57a93c64fe3f00000000 +E: #CD:00c050eb0000000000000000703d088000c04eeb010000006d00000000000000 +E: #CD:3266fe3f0000000000000000db32008c00c050eb010000000000000000000000 +E: #CD:0a0000000000000020020600703d0840093d0880001008406d000000a01c403f +E: #CD:7c330880a064fe3f6d00000000000000fedf99ececff33aec26b3658ed9c5be5 +E: #CD:283d0880c064fe3f6d00000006000000c01cfb3fd81afb3fd81afb3fd865fe3f +E: #CD:4c3d08804065fe3f6809403fc065fe3fd012403f000000008000037300000000 +E: #CD:00000000000000001a2488bc891e7d358fc4ecfa81e597aa9df65bb7a6a74806 +E: #CD:c065fe3fa065fe3f04000000c065fe3fa065fe3ffc3c0840000000007509403f +E: #CD:000000007209403fdb8a502716f5e7f50400000025000000a065fe3f04000000 +E: #CD:30040d809065fe3f6809403fd012403f000000003b4bed4f08035fadadc14494 +E: #CD:0a1751af3f39a63cf90f74b2820658d1cbb50403fb4800949c65fe3fd81afb3f +E: #CD:20040600d85dfe3f305efe3f000000009065fe3f6809403fd012403fb81c403f +E: #CD:ff000000d81afb3ffc5dfe3fdf2daf23000000001d0000000000000000000000 +E: #CD:000000001b0000002006060035040d401617088000100840b81c403f00000000 +E: #CD:56040d800066fe3f0000000000000000b81c403fff000000d81afb3ffc5dfe3f +E: #CD:000000002066fe3ff81608400000000000000000000000007f00000000000000 +E: #CD:000000004066fe3f000000000000000000000000000000000000000000000000 +E: #CD:END# +E: >>> ZEPHYR FATAL ERROR 0: CPU exception on CPU 0 +E: Current thread: 0x3ffb1ad8 (main) +E: Halting system +``` + +The core dump content begins with #CD:BEGIN# and ends with #CD:END#. We need to copy the content in between to a new file called __coredump.log__ + +3. Copy core dump to coredump.log + +``` +E: #CD:BEGIN# +E: #CD:5a4501000500050000000000 +E: #CD:4101006800 +E: #CD:0202000135040d401d000000000000001b000000200606000000000016170880 +E: #CD:e065fe3fb81c403f00000000b81c403fff000000d81afb3ffc5dfe3f00000000 +E: #CD:9065fe3f6809403fd012403f000000009065fe3f6809403fd012403f00000000 +E: #CD:0000000000000000 +E: #CD:4d0100d81afb3f581bfb3f +E: #CD:d81cfb3fd81cfb3f000000000180000000000000000000000000000000000000 +E: #CD:000000000000000000000000000000000000000000000000101bfb3f101bfb3f +E: #CD:6d61696e00000000000000000000000000000000000000000000000000000000 +E: #CD:00000000305efe3f0008000000000000f5ffffff0864fe3f080afb3fffffffff +E: #CD:4d0100305efe3f3066fe3f +E: #CD:f4b6dbfcd7903c37a5f85ffb73a1c5ad7da3432d420e03142b7673dc1f70a451 +E: #CD:e4165f6f2491c43b0aae041aa6bad45d0d019d7bd7061165478aa8e8e9dfb05d +E: #CD:5e9ca79574bd8eee1a446b5919d39bbdc7a78c067dd9348e7dd99f3bc0ae0e59 +E: #CD:05a5d5e1459c6325d537dd4db75d0210f30e67e7e292f5af90ea8bab11d9090c +E: #CD:14bacecb11dc47c19ae8d3922a290fcbe82ff95e23d63ad210459e8fc79dc78a +E: #CD:e443c9dbf22b94b0ed95e23bba0f6006022225d48e85ba76d148caff2b2fd519 +E: #CD:324d6de3d17410eeae3d5a6513bfc8eed68141495be8c069e69dcea9748fd38e +E: #CD:59fc1f6e57f36d52ba51d383d2df4ab9746d893b9bf276879d2182cfd03fe1fe +E: #CD:fce68691b4df96c5ac234d34a8eb21f199191138061a17245042ab8ac94e14ac +E: #CD:0e017619e4b42895aec67da7fdfb525168850547d0f2530247b1995dfaf9ddc5 +E: #CD:168588d974a379bcc3ddbead2edba5571dcbdd29c06ab11b41793d3ba2e15ab4 +E: #CD:da808c516438cd28215077c160bb5e0221b6c2d827db238850687d5cad9736f4 +E: #CD:60f9f777da01758a56b11a2fa9fc4bd9eaddb172f844223ea356ac0d5f77324f +E: #CD:14417a13726f99d28c42bdedf33cc9a198dbe361b4974d152256806c0db076f8 +E: #CD:12b3e2c95e5dc84dd6d028065abf26054ff992b205ca641e249417dd7368bd92 +E: #CD:d8faf9e19687346bf31e315db64a05c049b23cf3a10eb60d6472211fdd43e8cc +E: #CD:7b334dbb3b549c5b91bea3352ac68b3f6b199e2967344cc07da7d79c4bdc884c +E: #CD:6ebcd3093df87d7633ccb583b036864cc48166283095024d592b16600f4ed38f +E: #CD:bd1e1bdaf1538c6134c078d1f7b69f9467774e910b318854a0fcdd8841b12e0d +E: #CD:74ca51cad7c6b020789c6affacc31d39a034d13c0ebaa3a07b53f81091d7b704 +E: #CD:8641f161cbaacd75c8aa1bd1b557470083e87921b4ae92960764aa2ad6eff203 +E: #CD:c32fa391df51c8c38aa88c5a54bf130009f26b64a8b2a15418b4286ab0edc3ec +E: #CD:08d9c9c133fad8213c38e9ccb7505e2940c9612ceeb772440786012cddf5bbaf +E: #CD:435c265247afa7e2cdb315fa23e47a45b9050d8cb61b4a72646f58febc81773f +E: #CD:cbf027958c8a67478a2f9441bc94767ec90f446ba54ff82b893dddaddd42a004 +E: #CD:2a26cb016dfb2c1e0c691e319505c4167e83031ee83cd0843165c00b63fa4e96 +E: #CD:01f75bce679271064f56595a83ca5ae00ea79ba5c396f560a709dfa617e1dd14 +E: #CD:714ee1c87b95a422386d41a70f88df76019315875cc82b030dd005ba35af53bc +E: #CD:029df20768fe4612c91133a5f38602715c05ef9b330ea662402b4779b8de6e8b +E: #CD:6d8cad92e2fe7600ea3c4c83744186abc127d75f6f9334365e0c6b8c2ea6c82b +E: #CD:7ea6b0095adbdbc82ba150a670db718a67d5fe5d8b9f04a48eafff8d2200e075 +E: #CD:d18277cc7bcbd8419bb21b15cfddc8340bd7721707bd54ff04fb72c71ec12ce7 +E: #CD:8ce9635cf260717cbe2cf8392f7796c24a2384dd9db2142dc00e7dc83c9b8119 +E: #CD:3e8a971d612a603e88062e7679ada4082e8fddc80cdd34bfd9df64f4a887d9b0 +E: #CD:920fff4ae8ee63e1e48e611e887334929a89ccce5ecb250c03ca59178b3eb5dc +E: #CD:d88de936c368020f892357c7700d2b9ac237affbe9aad454736025fc37e7a4f0 +E: #CD:b60103116de8e418f17b1ffea7c3840ce9b5de74f2714451e7c774b0fc94d2d1 +E: #CD:8c3e9f17ac30161adf79c9cee52cfa79e62cc228781234124557f6463fe95228 +E: #CD:80d4d0b905bc05fb54e134ced7f84ac128ba82cda103f29f9a62e4c5f4105021 +E: #CD:80f085cb993e77c86f82ecf01dac257e25942f840eccd2e11385a946fd7b508c +E: #CD:71e13192d9b4ceba06ae199b77127b529791be9b878657590a3c5a263d9c8319 +E: #CD:b9f9487e4086539f1e4758b87ca24b70887d185c7e617ff288bde4944e2c6cf3 +E: #CD:fb23feb7aadf90c80c6d00f66d287f80f52c7d593a108e9ff178fc30defc40d4 +E: #CD:3b59f4efbd708b0f0192d457450ad657d3b45fc4d254406d7ac94f4eafdc5be4 +E: #CD:ba1719090cbed14af915ca7991db7b87027ced573a0e6aff7078a83139df611f +E: #CD:3fa23f95b5c39b7e15c92108a5322206fb74ee59e39327b66180c48dd9cbc1cb +E: #CD:00c04eeb3550aa7e24de68fa4aa720be1ee74e8dc10a57a93c64fe3f00000000 +E: #CD:00c050eb0000000000000000703d088000c04eeb010000006d00000000000000 +E: #CD:3266fe3f0000000000000000db32008c00c050eb010000000000000000000000 +E: #CD:0a0000000000000020020600703d0840093d0880001008406d000000a01c403f +E: #CD:7c330880a064fe3f6d00000000000000fedf99ececff33aec26b3658ed9c5be5 +E: #CD:283d0880c064fe3f6d00000006000000c01cfb3fd81afb3fd81afb3fd865fe3f +E: #CD:4c3d08804065fe3f6809403fc065fe3fd012403f000000008000037300000000 +E: #CD:00000000000000001a2488bc891e7d358fc4ecfa81e597aa9df65bb7a6a74806 +E: #CD:c065fe3fa065fe3f04000000c065fe3fa065fe3ffc3c0840000000007509403f +E: #CD:000000007209403fdb8a502716f5e7f50400000025000000a065fe3f04000000 +E: #CD:30040d809065fe3f6809403fd012403f000000003b4bed4f08035fadadc14494 +E: #CD:0a1751af3f39a63cf90f74b2820658d1cbb50403fb4800949c65fe3fd81afb3f +E: #CD:20040600d85dfe3f305efe3f000000009065fe3f6809403fd012403fb81c403f +E: #CD:ff000000d81afb3ffc5dfe3fdf2daf23000000001d0000000000000000000000 +E: #CD:000000001b0000002006060035040d401617088000100840b81c403f00000000 +E: #CD:56040d800066fe3f0000000000000000b81c403fff000000d81afb3ffc5dfe3f +E: #CD:000000002066fe3ff81608400000000000000000000000007f00000000000000 +E: #CD:000000004066fe3f000000000000000000000000000000000000000000000000 +E: #CD:END# +``` + +4. Convert to binary format: + +``` +./scripts/coredump/coredump_serial_log_parser.py coredump.log coredump.bin +``` + +5. Start the custom GDB server: + +``` +./scripts/coredump/coredump_gdbserver.py build/zephyr/zephyr.elf coredump.bin -v +``` + +Expected output: + +``` +[INFO][gdbstub] Log file: coredump.bin +[INFO][gdbstub] ELF file: build/zephyr/zephyr.elf +[INFO][parser] Reason: K_ERR_CPU_EXCEPTION +[INFO][parser] Pointer size 32 +[INFO][parser] Memory: 0x3ffb1ad8 to 0x3ffb1b58 of size 128 +[INFO][parser] Memory: 0x3ffe5e30 to 0x3ffe6630 of size 2048 +[INFO][parser] ELF Section: 0x0 to 0x1f of size 32 (read-only data) +[INFO][parser] ELF Section: 0x20 to 0x3b of size 28 (read-only data) +[INFO][parser] ELF Section: 0x40080000 to 0x400803ff of size 1024 (text) +[INFO][parser] ELF Section: 0x40080400 to 0x40083e7b of size 14972 (text) +[INFO][parser] ELF Section: 0x3f400040 to 0x3f401bff of size 7104 (read-only data) +[INFO][parser] ELF Section: 0x3f401c00 to 0x3f401c3f of size 64 (read-only data) +[INFO][parser] ELF Section: 0x3f401c40 to 0x3f401cb7 of size 120 (read-only data) +[INFO][parser] ELF Section: 0x3f401cb8 to 0x3f401cd9 of size 34 (read-only data) +[INFO][parser] ELF Section: 0x3ffb0a20 to 0x3ffb0a57 of size 56 (read-only data) +[INFO][parser] ELF Section: 0x400d0020 to 0x400d3d53 of size 15668 (text) +[INFO][gdbstub] Waiting GDB connection on port 1234... +``` + +6. In a new terminal, start the Xtensa ESP32 GDB that is located in Zephyr’s SDK: + +``` +~/zephyr-sdk-0.16.0/xtensa-espressif_esp32_zephyr-elf/bin/xtensa-espressif_esp32_zephyr-elf-gdb build/zephyr/zephyr.elf +``` + +7. Inside GDB, attach to the remote server: + +``` +(gdb) target remote localhost:1234 +Remote debugging using localhost:1234 +0x400d0435 in func_3 (addr=0x0) at zephyr/tests/subsys/debug/coredump/src/main.c:27 +27 *addr = 0; +``` + +8. Run __bt__ command to see the backtrace in the moment of the crash: + +``` +(gdb) bt +#0 0x400d0435 in func_3 (addr=0x0) + at zephyr/tests/subsys/debug/coredump/src/main.c:27 +#1 func_2 (addr=0x0) at zephyr/tests/subsys/debug/coredump/src/main.c:40 +#2 func_1 (addr=0x0) at zephyr/tests/subsys/debug/coredump/src/main.c:45 +#3 main () at zephyr/tests/subsys/debug/coredump/src/main.c:52 +``` + +## Conclusion + +Core dump is a powerful tool for debugging programs in Zephyr with ESP32 boards. By using the logging backend for core dumps, you can easily generate core dump files that can be analyzed using a debugger. This can help you to identify the cause of a program crash and fix the bug in your program quickly and easily. diff --git a/content/blog/creating-unique-factory-data-images/index.md b/content/blog/creating-unique-factory-data-images/index.md new file mode 100644 index 000000000..14b673465 --- /dev/null +++ b/content/blog/creating-unique-factory-data-images/index.md @@ -0,0 +1,114 @@ +--- +title: "Creating Unique Factory Data Images" +date: 2018-05-01 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Building Products +aliases: + - building-products-creating-unique-factory-data-images +--- +A common requirement while building a device is to have some unique information programmed into the device at the time of manufacturing. This information could be a unique serial number, or a unique MAC address ; or it could be a unique secret like the default password, or the HomeKit pairing pin. + +We have seen quite a number of ways that customers have achieved this. + +- Some use a few NVS keys to store this information at the factory. Since the NVS also stores user configuration, this method makes it harder to implement reset-to-factory, where the user’s settings must be erased. +- Some write a script that modifies known locations of a firmware image to add unique values in the firmware. This makes firmware upgrades harder because the unique information is now part of the application firmware itself. + +In the recent ESP [IDF](https://github.com/espressif/esp-idf/) master, we have introduced a few changes that should make implementing this behaviour easier. + +## Multiple NVS Partitions + +IDF now supports simultaneously having multiple NVS partitions. + +- One of the NVS partitions can be used to store user configuration. This partition only stores user’s configuration, and thus can be freely erased at a reset-to-factory event. +- The other NVS partition can be used to store per-device unique information. Thousands of unique NVS partition images/binaries could be created and then be programmed per-device into this partition at the factory. + +## Creating the partitions file + +The IDF uses a default partition layout that works for most cases. A number of such layouts are available in the *components/partition_table/* directory within the IDF. We now need to create a partition file that has 2 NVS partitions instead of the typical one. + +A sample updated partition file is shown below: + +``` +# Name, Type, SubType, Offset, Size, Flags +# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, 0xf000, 0x1000, +__fctry, data, nvs, 0x10000, 0x6000,__ factory, app, factory, 0x20000, 1M, +``` + +Notice the line *fctry* that indicates the additional NVS partition. This partitions stores the per-device unique keys programmed into the factory. The first NVS partition continues to be used as the partition for storing user configuration like Wi-Fi network name, passphrase etc. + +## Using the partitions file + +Save the above partition file at some location. Now update your SDK configuration to pick up this partitions file as: + +- menuconfig → Partition Table → Custom partition table CSV +- menuconfig → Partition Table → Custom partition CSV file +- menuconfig → Partition Table → Factory app partition offset + +The custom partition CSV file should match the name of your partitions file. + +The factory app partition offset should match the offset at which the ‘factory’ firmware is stored in your partitions file. + +## Accessing the factory data + +The factory partition can then be accessed as shown below: + +``` +/* Error checks removed for brevity */ +nvs_handle fctry_handle;nvs_flash_init___partition__ (MFG_PARTITION_NAME); +nvs_open___from_partition__ (MFG_PARTITION_NAME, “fctryNamespace”, + NVS_READWRITE, &fctry_handle);nvs_get_str(fctry_handle, “serial_number”, buf, &buflen); +``` + +- The above code initializes and opens the factory NVS partition. Note how we use nvs_flash_init_partition() over nvs_flash_init() and nvs_open_from_partition() over nvs_open() +- The rest of the code for reading the variables uses the standard nvs_get_() function. + +## Generating the factory data + +A utility *nvs_flash/nvs_partition_generator/nvs_partition_gen.py* is now available to make it easy to generate these unique factory partitions. This utility can generate an NVS partition from a CSV file. The following is an example of the CSV file: + +``` +$ __cat device-164589345735.csv__ key,type,encoding,value +fctryNamespace,namespace,, +serial_number,data,string,164589345735 +mac_addr,data,string,0A:0B:0C:0D:0E:0F +``` + +So the CSV file has 4 lines. Each line should have 4 entries separated by commas. + +- The first entry is the key. +- The second entry is the type. This indicates how should the ‘value’ be interpreted. The supported types are (a) file: the ‘value’ is a filename that actually contains the value for this key, (b) data: the ‘value’ contains the final data, (c) namespace: this key is really a namespace not a key-value pair +- The third entry is the encoding, which specifies how the value should be encoded into the generated partition. Supported values include standard data types like *u8, i8, u16, u32, i32, string*. And also *hex2bin*: which will apply a hex2bin conversion to the data before putting it into the NVS partition. +- The fourth entry is the value that we talked about above. + +Now that we have this information, let’s see what the CSV shown above would do: + +- The first line is just a heading of the columns, this line should be exactly as shown above +- The second line defines the NVS namespace in which the variables will be defined. In this case, the ‘device_data’ is the namespace that these variables will be defined in +- The third line defines an NVS key serial_no, with the value 164589345735 +- The fourth line defines an NVS key mac_addr, with the value 0A:0B:0C:0D:0E:0F + +The NVS partition can then be generated as: + +``` +$ python nvs_partition_gen.py device-164589345735.csv device-164589345735.bin +``` + +The *device-164589345735.bin* file is the NVS partition data that can now be programmed into the device. Assuming you have the partition table as shown above, the following command should do the job for you: + +``` +$ /path/to/idf/components/esptool_py/esptool/esptool.py — port /dev/cu.SLAB_USBtoUART write_flash 0x10000 device-164589345735.bin +``` + +This allows you to create as many unique images as you want, using a script, and then flash them on the respective hardware boards. + +Please refer to the NVS partition generator [documentation](https://github.com/espressif/esp-idf/tree/master/components/nvs_flash/nvs_partition_generator/) for more details. + +## Current Limitations + +- Currently the NVS object value can only be 1968 bytes in size. diff --git a/content/blog/debugging-targets-of-idf.py/img/debugging-1.webp b/content/blog/debugging-targets-of-idf.py/img/debugging-1.webp new file mode 100644 index 000000000..fe75b7030 Binary files /dev/null and b/content/blog/debugging-targets-of-idf.py/img/debugging-1.webp differ diff --git a/content/blog/debugging-targets-of-idf.py/img/debugging-2.webp b/content/blog/debugging-targets-of-idf.py/img/debugging-2.webp new file mode 100644 index 000000000..079601f26 Binary files /dev/null and b/content/blog/debugging-targets-of-idf.py/img/debugging-2.webp differ diff --git a/content/blog/debugging-targets-of-idf.py/img/debugging-3.webp b/content/blog/debugging-targets-of-idf.py/img/debugging-3.webp new file mode 100644 index 000000000..f2c5daf95 Binary files /dev/null and b/content/blog/debugging-targets-of-idf.py/img/debugging-3.webp differ diff --git a/content/blog/debugging-targets-of-idf.py/img/debugging-4.webp b/content/blog/debugging-targets-of-idf.py/img/debugging-4.webp new file mode 100644 index 000000000..095df0b34 Binary files /dev/null and b/content/blog/debugging-targets-of-idf.py/img/debugging-4.webp differ diff --git a/content/blog/debugging-targets-of-idf.py/img/debugging-5.webp b/content/blog/debugging-targets-of-idf.py/img/debugging-5.webp new file mode 100644 index 000000000..ea6e7e2f8 Binary files /dev/null and b/content/blog/debugging-targets-of-idf.py/img/debugging-5.webp differ diff --git a/content/blog/debugging-targets-of-idf.py/index.md b/content/blog/debugging-targets-of-idf.py/index.md new file mode 100644 index 000000000..7a0c4f9c4 --- /dev/null +++ b/content/blog/debugging-targets-of-idf.py/index.md @@ -0,0 +1,107 @@ +--- +title: "Debugging Targets of idf.py" +date: 2020-06-24 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - david-cermak +tags: + - JTAG + - idf.py + - Esp32 + - Debugger + - IoT +aliases: + - debugging-targets-of-idf-py +--- +This article outlines a quick and easy way to start a debugger from the command line. More specifically, it discusses the debugging targets of idf.py, which have been added to ESP-IDF from v4.2. At the time of writing, IDF v4.2 is not released yet, but you can try out this feature on the master branch. + +## Why Do We (Not) Debug + +Debugging is an essential development technique, no less so for embedded platform engineers. However, getting the debugging tools to work on embedded platforms is often more complex. Also, asking an ESP32 developer how they debug suggests that the ESP platform may be just as complex, because the more common answers seem to favor printf()s or GPIO toggling as a debugging technique. + +## Check It Out + +Many developers who work with ESP-IDF rely on the command line tools for configuring, building, and debugging their applications. Although IDE plugins are also available ([Espressif IDF Eclipse Plugins](https://github.com/espressif/idf-eclipse-plugin/blob/master/README.md), [ESP-IDF Visual Studio Code Extension](https://marketplace.visualstudio.com/items?itemName=espressif.esp-idf-extension)), they are not the subject of this article. idf.py is the main command tool in ESP-IDF CMake based build system. It is most often known for the idf.py menuconfig and idf.py flash monitor commands. + +Debugging commands are available, as well, to make the JTAG configuration easier to use. To explore this option, let’s just connect an ESP32 WROVER-KIT, and start building a project by typing: + +```shell +idf.py flash monitor openocd gdbgui +``` + +{{< figure + default=true + src="img/debugging-1.webp" + >}} + +This command does several things:- flashes the application to the development board- opens [IDF Monitor](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-monitor.html) to observe serial output- starts OpenOCD debugger and a [gdbgui](https://www.gdbgui.com/) debug server- opens a web browser, where [gdbgui](https://www.gdbgui.com/) interface is displayed. + +## Overview of the New Debugging Targets + +idf.py now implements the actions described below. For instructions on setting up JTAG debugger with an ESP32, see the [JTAG debugging section in IDF programming guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/jtag-debugging/index.html). Please note that a board with JTAG interface must be connected to use any of these debugging targets. + +## idf.py openocd + +Runs OpenOCD in a console with configuration defined in the environment or via command line. + +{{< figure + default=true + src="img/debugging-2.webp" + >}} + +By default, it is assumed that ESP32 WROVER-KIT board with 3.3V flash is used. This configuration also works with an ESP32 Ethernet Kit and many other boards. To override the default, set OPENOCD_COMMANDS environment variable or pass an --openocd-commands argument. + +## idf.py gdb + +Starts the __*gdb*__ in the current active console with the project’s elf file. + +{{< figure + default=true + src="img/debugging-3.webp" + >}} + +## idf.py gdbtui + +Starts the __*gdb*__ the same way as above, but with the --tui argument allowing very simple source code view in a textual user interface mode. + +{{< figure + default=true + src="img/debugging-4.webp" + >}} + +## idf.py gdbgui + +Starts [gdbgui](https://www.gdbgui.com/) debugger frontend enabling out-of-the-box debugging in a browser window. + +## Putting More Actions Together + +It is possible to combine multiple debugging actions on a single command line, thus allowing a convenient setup of blocking and non-blocking actions in one step.__* *__ idf.pyimplements a simple logic to move the background actions (such as OpenOCD) to the beginning, and the interactive ones (such as __*gdb*__ or __*monitor*__ ) to the end of the action list. + +An example of a very useful combination is shown below with the corresponding screenshot. + +```shell +idf.py gdbgui monitor openocd +``` + +{{< figure + default=true + src="img/debugging-5.webp" + >}} + +This command starts OpenOCD in the background, while it opens [gdbgui](https://www.gdbgui.com/) in a browser and the IDF-monitor in the active console window, allowing the user to observe serial output and debug it at the same time. When the monitor exits with Ctrl + ], all debugging actions are terminated and cleaned up. + +## Explore JTAG + +If you are a “command-line person” or a dedicated IDE user, please __*step*__ __*into*__ these new debugging functions and give them a try to explore the ESP chips from the JTAG perspective! + +## For More Information + +- Official documentation of [JTAG Debugging with idf.py](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/jtag-debugging/using-debugger.html#jtag-debugging-with-idf-py) +- idf.py help or a contextual help related to the specific targets below: +```shell +idf.py openocd --help +idf.py gdb --help +idf.py gdbtui --help +idf.py gdbgui --help +``` diff --git a/content/blog/december-2018/img/december-1.webp b/content/blog/december-2018/img/december-1.webp new file mode 100644 index 000000000..ba38bd759 Binary files /dev/null and b/content/blog/december-2018/img/december-1.webp differ diff --git a/content/blog/december-2018/img/december-2.webp b/content/blog/december-2018/img/december-2.webp new file mode 100644 index 000000000..1b37f5516 Binary files /dev/null and b/content/blog/december-2018/img/december-2.webp differ diff --git a/content/blog/december-2018/img/december-3.webp b/content/blog/december-2018/img/december-3.webp new file mode 100644 index 000000000..a05eb7033 Binary files /dev/null and b/content/blog/december-2018/img/december-3.webp differ diff --git a/content/blog/december-2018/img/december-4.webp b/content/blog/december-2018/img/december-4.webp new file mode 100644 index 000000000..cf1f8fc96 Binary files /dev/null and b/content/blog/december-2018/img/december-4.webp differ diff --git a/content/blog/december-2018/img/december-5.webp b/content/blog/december-2018/img/december-5.webp new file mode 100644 index 000000000..5f4bf7242 Binary files /dev/null and b/content/blog/december-2018/img/december-5.webp differ diff --git a/content/blog/december-2018/index.md b/content/blog/december-2018/index.md new file mode 100644 index 000000000..4f55f4999 --- /dev/null +++ b/content/blog/december-2018/index.md @@ -0,0 +1,82 @@ +--- +title: "December 2018" +date: 2018-12-04 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Internet Of Things + - Esp32 + - AWS + - Newsletter + +--- +Welcome to our December Newsletter + +{{< figure + default=true + src="img/december-1.webp" + >}} + +Hi everyone, + +As original equipment manufacturers work to squeeze more functionality onto cheaper and smaller IoT devices, they face a series of challenges in development and operations. This whole process results in security vulnerabilities, inefficient code, compatibility issues and unclear licensing. One of the sessions at the recent AWS re:Invent 2018 revolved around the ways in which Amazon FreeRTOS makes building, deploying and updating connected microcontroller-based devices easier, quicker and more economical, while retaining confidence that these devices are secure. + +Espressif’s Director of Technical Marketing, [Amey Inamdar](https://www.linkedin.com/in/amey-inamdar-2b00561/), was at AWS re:Invent 2018 and [spoke about an IoT solution](https://www.youtube.com/watch?v=7fNFKYAuHls) developed with the help of Amazon FreeRTOS and Pentair, a leading water treatment company. Moreover, the session introduced the OTA and BLE support that has been recently added to Amazon:FreeRTOS. Amey talked about three particular aspects (Security, OTA and Openness) for building connectable products, and how the ESP32 port of Amazon FreeRTOS helps in this regard. + +In fact, this month’s newsletter explores a bit further, in a separate article, how Espressif’s ESP32-based development boards support BLE in [a:FreeRTOS](https://aws.amazon.com/freertos/), thus making Espressif one the first platform providers to do so. + +Other news you can read in our December newsletter include: an article about the Paris-based software vendor, MicroEJ, which utilizes ESP32 dev boards to provide a secure platform for designing compact-sized and low-power IoT products with a rich set of features and an improved user experience; Espressif’s presence in Macnica’s booth at the 2018 “electronica”, the biggest international trade fair and conference for electronics, which took place in Munich a couple of weeks ago; and, last but not least, the ultimate Christmas gift, the ESPaper Calendar, based on ESP8266 and developed by ThingPulse! + +November was a productive month for Espressif, leading to exciting IoT solutions, collaborations and events. We hope that you can feel our inexhaustible enthusiasm about IoT and AI technology, as it is manifested through our work and the news we are delivering about it in our December newsletter. The calendar year is drawing to a close and we cannot help but reflect on our accomplishments in 2018, thinking that this year has marked one of the most fulfilling, challenging and successful chapters in Espressif’s ten-year history. So, we’ll leave you with an optimistic mood about the future, sending season’s greetings and wishes for a merry Christmas to those of you who celebrate it. + +Best wishes, John Lee. + +Senior Customer Support Officer + +## ESP32 Supports BLE in Amazon FreeRTOS + +{{< figure + default=true + src="img/december-2.webp" + >}} + +At the end of last month, [Amazon Web Services](https://aws.amazon.com/) (AWS) announced the beta version of Amazon FreeRTOS BLE, a feature that makes it possible for embedded developers to securely connect [ESP32 dev boards](https://www.espressif.com/en/products/hardware/development-boards), or other a:FreeRTOS devices that use Bluetooth Low Energy, to AWS IoT through Android or iOS devices. ESP32 provides one of the first few platforms supporting the BLE feature in a:FreeRTOS. + +[Keep Reading](https://www.espressif.com/en/news/ESP32_Supports_BLE_in_Amazon_FreeRTOS) + +## MicroEJ Now Supports ESP32 Chipsets + +{{< figure + default=true + src="img/december-3.webp" + >}} + +[MicroEJ](http://www.microej.com/) is a Paris-based software vendor of cost-effective solutions for embedded IoT devices. It seems that [Espressif](https://www.espressif.com/)’s collaboration with MicroEJ was only a matter of time, since both companies are committed to providing secure products in markets where software applications require high performance, compact size, energy efficiency and cost-effective development. + +[Keep reading](https://www.espressif.com/en/news/MicroEJ_Now_Supports_ESP32_Chipsets) + +## Espressif Products at electronica 2018 + +{{< figure + default=true + src="img/december-4.webp" + >}} + +The 2018 “[electronica](https://electronica.de/)”, an international trade fair and conference for electronics, took place in Munich last month and [Espressif’s latest series of products](https://www.espressif.com/en/products/hardware) were presented by [Macnica](https://www.macnica.eu/node/261), Espressif’s distributor in Europe. This was one of the most important events in the electronics industry, as more than 3,100 exhibitors from over 50 countries provided an insight into the electronics of the future with their solutions and products. It was the biggest gathering in the history of this event which is held in Munich every two years since 1964. + +[Keep Reading](https://www.espressif.com/en/news/Espressif_Products_at_electronica_2018) + +## The ESPaper Calendar App + +{{< figure + default=true + src="img/december-5.webp" + >}} + +Christmas is fast approaching and we couldn’t think of a better gift than the ESPaper Calendar App from [ThingPulse](https://thingpulse.com/). Recently, Marcel and Dani have been hard at work to deliver a new application for their 2.9" ESPaper Plus Kit, the [ESPaper Calendar](https://calendar.espaper.com/). It lets you manage shared resources such as meeting rooms and shared desks by connecting it to a cloud calendar. + +[Keep Reading](https://www.espressif.com/en/news/The_ESPaper_Calendar) + +*Originally published at *[*mailchi.mp*](https://mailchi.mp/29dccf06a477/espressif-esp-news-december-2018?e=f9593a0e62)*.* diff --git a/content/blog/december-2020/img/december-1.webp b/content/blog/december-2020/img/december-1.webp new file mode 100644 index 000000000..394bb5fd4 Binary files /dev/null and b/content/blog/december-2020/img/december-1.webp differ diff --git a/content/blog/december-2020/img/december-2.webp b/content/blog/december-2020/img/december-2.webp new file mode 100644 index 000000000..288dd979b Binary files /dev/null and b/content/blog/december-2020/img/december-2.webp differ diff --git a/content/blog/december-2020/img/december-3.webp b/content/blog/december-2020/img/december-3.webp new file mode 100644 index 000000000..912299251 Binary files /dev/null and b/content/blog/december-2020/img/december-3.webp differ diff --git a/content/blog/december-2020/img/december-4.webp b/content/blog/december-2020/img/december-4.webp new file mode 100644 index 000000000..bebaf7201 Binary files /dev/null and b/content/blog/december-2020/img/december-4.webp differ diff --git a/content/blog/december-2020/img/december-5.webp b/content/blog/december-2020/img/december-5.webp new file mode 100644 index 000000000..5d8acb384 Binary files /dev/null and b/content/blog/december-2020/img/december-5.webp differ diff --git a/content/blog/december-2020/img/december-6.webp b/content/blog/december-2020/img/december-6.webp new file mode 100644 index 000000000..9e295a617 Binary files /dev/null and b/content/blog/december-2020/img/december-6.webp differ diff --git a/content/blog/december-2020/index.md b/content/blog/december-2020/index.md new file mode 100644 index 000000000..32e297780 --- /dev/null +++ b/content/blog/december-2020/index.md @@ -0,0 +1,74 @@ +--- +title: "December 2020" +date: 2021-01-11 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Newsletter + +--- +Hi everyone, + +We hope you are enjoying this year’s holiday season. All of us at Espressif would like to send you our positive energy, along with our warmest wishes for health and happiness in 2021! As ever, we shall continue working hard, trying to give you the best in the field of AIoT. + +We are bidding farewell to 2020 with some really exciting news. Espressif’s Founder and CEO, [Teo Swee Ann, was recently appointed](https://www.espressif.com/en/news/Espressif-CEO-Becomes-Member-of-SMU-IAC) as a member of the International Advisory Council at the Singapore Management University (SMU). The [SMU International Advisory Council](https://www.smu.edu.sg/about/international-advisory-council) comprises experts from China, Indonesia, Malaysia, Myanmar, the Philippines, Thailand, and Vietnam. The Council’s mission is to develop the SMU’s international collaboration with governments, business leaders and academics both in Asia and globally. Teo Swee Ann’s contribution to the SMU International Advisory Council will stem from his expertise in the wireless chip industry, which spans more than two decades. + +{{< figure + default=true + src="img/december-1.webp" + >}} + +Other topics you can read about in this month’s newsletter include: + +[__AWS Launched an ESP32-Powered IoT Educational Kit__ ](https://www.espressif.com/en/news/AWS_IoT_EduKit) + +{{< figure + default=true + src="img/december-2.webp" + >}} + +Amazon Web Services introduced the ESP32-powered AWS IoT EduKit — an easy way to learn how to build IoT applications, with [ESP RainMaker](https://rainmaker.espressif.com/) and [ESP Alexa SDKs](https://www.espressif.com/en/solutions/audio-solutions/esp-avs-for-aws-iot). + +[__ESP32 at the Heart of Nuvia’s Energy Management Platform__ ](https://www.espressif.com/en/news/ESP32_Nuvia) + +{{< figure + default=true + src="img/december-3.webp" + >}} + +Nuvia’s [ESP32-powered](https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32e_esp32-wroom-32ue_datasheet_en.pdf), smart thermostats have taken the Turkish market by storm. + +[__Flowcode v9.0 Supports ESP32__ ](https://www.espressif.com/en/news/ESP_Flowcode) + +{{< figure + default=true + src="img/december-4.webp" + >}} + +In the latest version of Flowcode v9.0, there is full support for Espressif’s [ESP32 MCUs](https://www.espressif.com/en/products/socs/esp32). At the same time, ESP32 is completely free within the Flowcode ecosystem. + +[__Maypole: ESP32-Based Open-Source Hardware for Wireless Collaboration__ ](https://www.espressif.com/en/news/Maypole_ESP32) + +{{< figure + default=true + src="img/december-5.webp" + >}} + +The [ESP32-based](https://www.espressif.com/sites/default/files/documentation/esp32-pico-d4_datasheet_en.pdf) Maypole looks like a USB stick. However, when it is configured appropriately, it turns any USB port into a hub for wireless collaboration. + +[__ESP-WIFI-MESH-Powered, Self-Service, Smart-Laundry Facility__ ](https://www.espressif.com/en/news/ESP_WIFI_MESH_Ujing) + +{{< figure + default=true + src="img/december-6.webp" + >}} + +The fruit of Espressif and Ujing’s recent collaboration is an [ESP-WIFI-MESH-powered](https://www.espressif.com/en/products/sdks/esp-wifi-mesh/overview), self-service, smart-laundry facility. It was recently launched on campus at Jiangnan University. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=c4a255994f&e=309e9b0452), [Twitter](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=65227f5ce9&e=309e9b0452), [GitHub](https://github.com/espressif), [Instagram](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=7a5d88fa55&e=309e9b0452), [LinkedIn](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=4a49c35eb3&e=309e9b0452), and [YouTube](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=60d3d0280a&e=309e9b0452). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto://newsletter@espressif.com)! We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer diff --git a/content/blog/december-2022/img/december-1.webp b/content/blog/december-2022/img/december-1.webp new file mode 100644 index 000000000..a2e007c8c Binary files /dev/null and b/content/blog/december-2022/img/december-1.webp differ diff --git a/content/blog/december-2022/img/december-2.webp b/content/blog/december-2022/img/december-2.webp new file mode 100644 index 000000000..ddbbd0fb7 Binary files /dev/null and b/content/blog/december-2022/img/december-2.webp differ diff --git a/content/blog/december-2022/img/december-3.webp b/content/blog/december-2022/img/december-3.webp new file mode 100644 index 000000000..e6f82c1af Binary files /dev/null and b/content/blog/december-2022/img/december-3.webp differ diff --git a/content/blog/december-2022/img/december-4.webp b/content/blog/december-2022/img/december-4.webp new file mode 100644 index 000000000..e70688ffc Binary files /dev/null and b/content/blog/december-2022/img/december-4.webp differ diff --git a/content/blog/december-2022/index.md b/content/blog/december-2022/index.md new file mode 100644 index 000000000..5488105f8 --- /dev/null +++ b/content/blog/december-2022/index.md @@ -0,0 +1,70 @@ +--- +title: "December 2022" +date: 2023-01-01 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Happy holidays everyone! + +On behalf of all employees and the Board of Directors, I am sending you my warmest wishes for a restful, peaceful and meaningful holiday season. We truly hope that 2023 will be a better year for everyone! Despite its difficulties, 2022 was an especially productive year for us at Espressif, during which we reached new milestones that we can be proud of. We will present these at the Consumer Electronics Show (CES 2023) in Las Vegas, USA, from [5 to 8 January, 2023](https://www.ces.tech/). + +It is widely known that CES® is the most influential tech event in the world. It is, in fact, the proving ground for breakthrough technologies and global innovators. This is where the world’s sharpest innovators hit the stage, and where the biggest brands do business and meet new partners. + +A central theme of CES 2023 will be diversity and inclusion. For innovation to reach its full potential, diverse voices and perspectives must be heard and amplified. This is how businesses in the tech industry can really flourish. Women, people of color, as well as people with disabilities and age-related challenges are making a difference, despite a traditional lack of representation and funding in the technology field. Therefore, their contribution to today’s tech world will be duly highlighted at CES 2023, in Las Vegas. + +Among these remarkable contributors, Espressif will present its own unique achievements. Here are a few of them: + +- Espressif’s[ solutions for the Matter protocol](https://www.espressif.com/en/solutions/device-connectivity/esp-matter-solution), which ensure the secure and seamless connectivity of smart-home devices. +- The ESP-ZeroCode modules, which provide out-of-the-box Matter connectivity, based on our innovative SoCs: [ESP32-C3](https://www.espressif.com/en/products/socs/esp32-c3) (ESP8685), [ESP32-C2](https://www.espressif.com/en/products/socs/esp32-c2) (ESP8684), and [ESP32-H2](https://www.espressif.com/en/news/ESP32_H2). +- [ESP32-C6](https://www.espressif.com/en/products/socs/esp32-c6), Espressif’s first Wi-Fi 6 SoC integrating 2.4 GHz Wi-Fi 6, Bluetooth 5 (LE) and the 802.15.4 protocol. +- [ESP RainMaker®](https://rainmaker.espressif.com/), based on the AWS serverless architecture, for private Cloud deployment. +- [ESP Insights](https://insights.espressif.com/), which is Espressif’s remote observability and diagnostics platform for field-deployed devices. +- [ESP32-S3](https://www.espressif.com/en/products/socs/esp32-s3), Espressif’s dual-core XTensa LX7 MCU, designed for AIoT applications. + +You still have time to book an appointment with Espressif’s team at CES 2023, so you can get all the information you need about our products and services. Just click on the photograph below and provide the required information. + +{{< figure + default=true + src="img/december-1.webp" + >}} + +Keep reading this month’s newsletter, so you can learn more exciting news from Espressif: + +{{< figure + default=true + src="img/december-2.webp" + >}} + +[__Espressif Launches Matter-Related Services__ ](https://www.espressif.com/en/news/Pre-provisioning_Matter)Espressif’s new Matter-compatible Device Certificate Generation and Pre-provisioning Services aim to reduce manufacturing complexities while also safeguarding CSA standards. + +{{< figure + default=true + src="img/december-3.webp" + >}} + +[__ESP-IDF Release v5.0 Is a Major Update__ ](https://www.espressif.com/en/news/ESP-IDFv5) + +ESP-IDF v5.0 is a major update for ESP-IDF v4.x., and is the latest stable release. It is mostly compatible with apps written for ESP-IDF v4.x, but there are some breaking changes and removal of deprecated functionality, as well. + +{{< figure + default=true + src="img/december-4.webp" + >}} + +[__Get Hands-On Experience with RISC-V, Using ESP32-C3__ ](https://www.espressif.com/en/media_overview/news/risc-v-with-esp32-c3) + +Warren Gay, in his new book, explains how the availability of Espressif’s [ESP32-C3](https://www.espressif.com/en/products/socs/esp32-c3) provides a way to get hands-on experience with RISC-V. Furthermore, the open-sourced QEMU emulator adds a 64-bit experience in RISC-V under Linux. + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/developing-user-interfaces-for-custom-boards-with-esp-microcontrollers/img/developing-1.webp b/content/blog/developing-user-interfaces-for-custom-boards-with-esp-microcontrollers/img/developing-1.webp new file mode 100644 index 000000000..80552c0f2 Binary files /dev/null and b/content/blog/developing-user-interfaces-for-custom-boards-with-esp-microcontrollers/img/developing-1.webp differ diff --git a/content/blog/developing-user-interfaces-for-custom-boards-with-esp-microcontrollers/img/developing-2.webp b/content/blog/developing-user-interfaces-for-custom-boards-with-esp-microcontrollers/img/developing-2.webp new file mode 100644 index 000000000..ee7e86bfb Binary files /dev/null and b/content/blog/developing-user-interfaces-for-custom-boards-with-esp-microcontrollers/img/developing-2.webp differ diff --git a/content/blog/developing-user-interfaces-for-custom-boards-with-esp-microcontrollers/img/developing-3.webp b/content/blog/developing-user-interfaces-for-custom-boards-with-esp-microcontrollers/img/developing-3.webp new file mode 100644 index 000000000..bea7f3c3e Binary files /dev/null and b/content/blog/developing-user-interfaces-for-custom-boards-with-esp-microcontrollers/img/developing-3.webp differ diff --git a/content/blog/developing-user-interfaces-for-custom-boards-with-esp-microcontrollers/index.md b/content/blog/developing-user-interfaces-for-custom-boards-with-esp-microcontrollers/index.md new file mode 100644 index 000000000..5d521447d --- /dev/null +++ b/content/blog/developing-user-interfaces-for-custom-boards-with-esp-microcontrollers/index.md @@ -0,0 +1,118 @@ +--- +title: "Developing User Interfaces for Custom Boards with ESP microcontrollers" +date: 2022-10-10 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - vilem-zavodny +tags: + - Lvgl + - Squareline + - Esp + - Bsp + +--- +A few weeks ago in [this article](/making-the-fancy-user-interface-on-esp-has-never-been-easier-e44e79c0ae3) we have introduced SquareLine Studio and how it can be used to develop user interfaces. This feature was available only for Espressif’s boards. But what if we wanted to use this tool for our custom designed board based on an ESP chip with a custom LCD? Here is the solution! + +What is the best way to add a custom board into SquareLine Studio? Start with the [*custom_waveshare_7inch* example on from esp-bsp repository on GitHub](https://github.com/espressif/esp-bsp/tree/master/SquareLine/boards/custom_waveshare_7inch). This example is based on the same code as other Espressif’s examples for SquareLine Studio. However there is one big difference. There must be a custom component similar to Espressif’s BSP with main functions for handling the LCD screen and initialization of the LVGL graphic library. + +For this example we have selected the following LCD display: [WaveShare 7inch 800x480 with RA8875 graphical controller and GT911 touch screen controller](https://www.waveshare.com/7inch-capacitive-touch-lcd-c.htm). + +## 1. Making the custom BSP for your board + +First step in preparing the package for the SquareLine Studio is to make a component similar to BSP. You can see implementation for the [7inch WaveShare LCD](https://www.waveshare.com/7inch-capacitive-touch-lcd-c.htm) in our example on [GitHub](https://github.com/espressif/esp-bsp/tree/master/SquareLine/boards/custom_waveshare_7inch), where only important functions are implemented in [__ws_7inch.c__ ](https://github.com/espressif/esp-bsp/blob/master/SquareLine/boards/custom_waveshare_7inch/components/ws_7inch/ws_7inch.c) file. For other screens, the following functions should be changed: + +``` +/* LCD display initialization */ +static lv_disp_t *lvgl_port_display_init(void) +{ + ... +}/* Touch initialization */ +static esp_err_t lvgl_port_indev_init(void) +{ + ... +} +``` + +If the communication with thetouch screen isn’t over I2C, there must be initialization of the SPI or some other communication interface instead of this: + +``` +esp_err_t bsp_i2c_init(void) +{ + ... +} +``` + +Second part of making a custom BSP is to edit the header file [__ws_7inch.h__ ](https://github.com/espressif/esp-bsp/blob/master/SquareLine/boards/custom_waveshare_7inch/components/ws_7inch/include/bsp/ws_7inch.h). This is where are all pin configurations, communication speed configuration and screen size for the board are defined. + +The last thing you should do is to modify [__CMakeLists.txt__ ](https://github.com/espressif/esp-bsp/blob/master/SquareLine/boards/custom_waveshare_7inch/components/ws_7inch/CMakeLists.txt) and [__idf_component.yml__ ](https://github.com/espressif/esp-bsp/blob/master/SquareLine/boards/custom_waveshare_7inch/components/ws_7inch/idf_component.yml), when any filename changes or when you need to use another component for the LCD screen or touch screen. You should modify [__idf_component.yml__ ](https://github.com/espressif/esp-bsp/blob/master/SquareLine/boards/custom_waveshare_7inch/main/idf_component.yml) in the main project too when the component name is changed. + +## 2. The board description file and board image + +After the custom BSP is done, we can move to update the board description file____ [__manifest.json__ ](https://github.com/espressif/esp-bsp/blob/master/SquareLine/boards/custom_waveshare_7inch/manifest.json): + +``` +{ + "name":"Custom WaveShare 7inch", + "version":"1.0.0", + "mcu":"ESP32", "screen_width":"800", + "screen_height":"480", + "screen_color_swap":true, "short_description":"WaveShare 7inch Display", + "long_description":"Example of the custom BSP and custom LCD", "placeholders": + { + "__ESP_BOARD_INCLUDE__": "bsp/ws_7inch.h", + "__ESP_BOARD_I2C_INIT__": "/* Initialize I2C (for touch) */\n bsp_i2c_init();" + } +} +``` + +Values __name__ , __version, mcu, short_description__ and __long_description__ are only for displaying your board right in the SquareLine Studio. There can be anything. More important are values __screen_width__ , __screen_height__ and __screen_color_swap__ , which define physical values for your LCD display. The __placeholders__ should be updated with the right values from your custom BSP. The header file path into ____ESP_BOARD_INCLUDE____ and touch screen initialization function into ____ESP_BOARD_I2C_INIT____ . + +Second file for update is board image____ [__image.png__ ](https://github.com/espressif/esp-bsp/blob/master/SquareLine/boards/custom_waveshare_7inch/image.png). There must be a board image in size __380px__ x __300px__ . + +## 3. ESP-IDF and LVGL default configuration + +If you have any specific changes in IDF configuration or LVGL configuration, you can put it into [__sdkconfig.defaults__ ](https://github.com/espressif/esp-bsp/blob/master/SquareLine/boards/custom_waveshare_7inch/sdkconfig.defaults) file. The configuration option __CONFIG_LV_COLOR_16_SWAP__ must be same like value in __screen_color_swap__ in [__manifest.json__ ](https://github.com/espressif/esp-bsp/blob/master/SquareLine/boards/custom_waveshare_7inch/manifest.json) file. + +## 4. Generate and copy package for SquareLine Studio + +After all changes are done in files, create the package by run generator in [root SquareLine generator folder](https://github.com/espressif/esp-bsp/tree/master/SquareLine): + +``` +python gen.py -b custom_waveshare_7inch -o output_folder +``` + +The package will be generated into __espressif__ folder in __output_folder__ . The last step is to copy this generated package __espressif/custom_waveshare_7inch__ into the __boards__ folder in the SquareLine Studio installation folder. + +## 5. Launch the SquareLine Studio + +After launching the SquareLine Studio, you should see your board in the Create tab and Espressif tab. There should be your board name, description and image. + +{{< figure + default=true + src="img/developing-1.webp" + >}} + +## Conclusion + +Now, you can create your own project with the custom board. You can use a lot of widgets from LVGL. I can give the recommendation to you, don’t use zoom in image, if it is not necessary, resize image in another image editor and use in full size. The zoom function can be slower and the bigger image can take a lot of the size of the microcontroller flash memory. + +{{< figure + default=true + src="img/developing-2.webp" + >}} + +When your project is done, then export the template by selecting __Export->Create Template Project__ in the main menu and export UI files by __Export->Export UI Files__ in the main menu. + +The last step is build and flash by command like this: + +``` +idf.py -p COM34 flash monitor +``` + +{{< figure + default=true + src="img/developing-3.webp" + >}} + +The second recommendation is, don’t forget to change the size of the factory partition in the partitions.csv file and change the flash size of your selected module in menuconfig, when you are using bigger images. Or you will see that the built application is too big and there is no space for downloading it. diff --git a/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-1.webp b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-1.webp new file mode 100644 index 000000000..03dee7b8b Binary files /dev/null and b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-1.webp differ diff --git a/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-10.webp b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-10.webp new file mode 100644 index 000000000..48b6d4ade Binary files /dev/null and b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-10.webp differ diff --git a/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-2.webp b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-2.webp new file mode 100644 index 000000000..d9e58da7f Binary files /dev/null and b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-2.webp differ diff --git a/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-3.webp b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-3.webp new file mode 100644 index 000000000..facaae7a2 Binary files /dev/null and b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-3.webp differ diff --git a/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-4.webp b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-4.webp new file mode 100644 index 000000000..b594ea1d1 Binary files /dev/null and b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-4.webp differ diff --git a/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-5.webp b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-5.webp new file mode 100644 index 000000000..eaab40057 Binary files /dev/null and b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-5.webp differ diff --git a/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-6.webp b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-6.webp new file mode 100644 index 000000000..4acd90289 Binary files /dev/null and b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-6.webp differ diff --git a/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-7.webp b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-7.webp new file mode 100644 index 000000000..0b3c71c69 Binary files /dev/null and b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-7.webp differ diff --git a/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-8.webp b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-8.webp new file mode 100644 index 000000000..bf3517bc8 Binary files /dev/null and b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-8.webp differ diff --git a/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-9.webp b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-9.webp new file mode 100644 index 000000000..21bddbedf Binary files /dev/null and b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/img/dfu-9.webp differ diff --git a/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/index.md b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/index.md new file mode 100644 index 000000000..f5ccbcece --- /dev/null +++ b/content/blog/dfu-using-the-native-usb-on-esp32-s2-for-flashing-the-firmware/index.md @@ -0,0 +1,149 @@ +--- +title: "DFU — Using the native USB on ESP32-S2 for flashing the firmware" +date: 2021-03-23 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - pedro-minatel +tags: + - Espressif + - Esp32 S2 + - USB + - Esp Idf + - Dfu + +--- +{{< figure + default=true + src="img/dfu-1.webp" + >}} + +Since the [ESP32-S2](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf) was released, a notable new functionality got everyone’s attention: the USB host and device capabilities. This new functionality adds a new world in terms of possibilities and cool stuff that could be made using USB and it’s a game changer in many projects. + +{{< figure + default=true + src="img/dfu-2.webp" + >}} + +But one of the uses for this peripheral is to upload the firmware without any external IC or programmer. This can be done directly by using the USB DFU mechanism. + +The DFU (Device Firmware Upgrade) makes it possible and easy to update the device firmware as well as monitor the device. + +Usually, to flash a new firmware to the ESP32 flash memory, you have two possibilities: + +Now, the DFU works very similarly to the UART method, but it has some differences when building the firmware that will be uploaded using DFU. + +To work with DFU, you don’t need to install any new software, just the ESP-IDF toolchain. + +If you want to go deeply in the DFU mechanism, see this official specification from USB.org. + +## Using DFU for the first time + +To start using the DFU, we first need to check if your IDF version supports the functionality. + +The ESP32-S2 support starts from the [IDF v4.2](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32s2/api-guides/dfu.html). To check your IDF version, you can use the following command on the terminal/shell/command prompt: + +``` +*idf.py --version* +``` + +To install the ESP-IDF, you can follow the [Getting Started guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/) from our official documentation. + +If you’re not using this version or above, please consider updating your environment in order to get this feature working on the ESP32-S2. + +## Electrical connection + +For this example, we will use the [ESP32-Saola-1 v1.2](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-saola-1-v1.2.html) development board. + +{{< figure + default=true + src="img/dfu-3.webp" + >}} + +As you can see, the Saola board doesn’t have the connector for the native USB, only for the external USB-to-UART. To use the native interface, you need to connect a breakout USB cable as follows: + +- __USB D- to GPIO19__ +- __USB D+ to GPIO20__ + +{{< figure + default=true + src="img/dfu-4.webp" + >}} + +You can use an old USB to do this by striping the wires and soldering to the pin header or using a breadboard to make it easier. In most of the cables, the D+ is the green and the D- is the white wire. + +{{< figure + default=true + src="img/dfu-5.webp" + >}} + +> Be careful if you are going to use the USB 5V to power the board. Make sure that you’re connecting the 5V on the pin marked as 5V in the ESP32-Saola dev kit. + +After connecting and powering the board, we are able to enter in DFU mode by holding BOOT and pressing and releasing the RST (reset) button. + +## Building the DFU firmware + +To build the firmware and upload it over the DFU, the process is a little bit different from a regular firmware, but it is very easy to do it. + +To build and flash a regular firmware, we use the following command: + +``` +idf.py build flash +``` + +Note: We can use only “flash” instead of “build flash”, since the toolchain will build the firmware before flashing anyway. + +To build the firmware for DFU, we need to change to: + +``` +idf.py dfu dfu-flash +``` + +Before executing the command, be sure to be in DFU mode. + +If you need to monitor the log output in the terminal, you must change the log output configuration before building. This configuration changes the log output from UART to USB CDC, in order to see all the console prints over the USB. + +You can do this by following these steps: + +Go to __*Component config*__ menu. + +{{< figure + default=true + src="img/dfu-6.webp" + >}} + +Select __*ESP System Settings*__ or __*Common ESP-related*__ (if ESP-IDF is the v4.2). + +{{< figure + default=true + src="img/dfu-7.webp" + >}} + +__*Change the Channel*__ __*for console output*__ to USB CDC. + +{{< figure + default=true + src="img/dfu-8.webp" + >}} + +{{< figure + default=true + src="img/dfu-9.webp" + >}} + +Save and exit the configuration menu build and flash the firmware. + +{{< figure + default=true + src="img/dfu-10.webp" + >}} + +## Example Video + +This is the example video on how to configure and use the DFU on the ESP32-S2 to flash and monitor the ESP32-Saola development kit. + +## Conclusion + +Taking advantage from the embedded USB peripheral on the ESP32-S2 could save time and money by reducing build of material and space in your project. Embedding the program interface into your project could save time and it’s much more convenient than using an external one with some wires. + +Also, you can use USB peripheral for many other solutions, not only for programming your board! diff --git a/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-1.webp b/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-1.webp new file mode 100644 index 000000000..c3793c494 Binary files /dev/null and b/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-1.webp differ diff --git a/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-2.webp b/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-2.webp new file mode 100644 index 000000000..612fabc37 Binary files /dev/null and b/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-2.webp differ diff --git a/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-3.webp b/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-3.webp new file mode 100644 index 000000000..b8defbac0 Binary files /dev/null and b/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-3.webp differ diff --git a/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-4.webp b/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-4.webp new file mode 100644 index 000000000..127b42fbb Binary files /dev/null and b/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-4.webp differ diff --git a/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-5.webp b/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-5.webp new file mode 100644 index 000000000..076c980d5 Binary files /dev/null and b/content/blog/eclipse-plugin-for-esp-idf/img/eclipse-5.webp differ diff --git a/content/blog/eclipse-plugin-for-esp-idf/index.md b/content/blog/eclipse-plugin-for-esp-idf/index.md new file mode 100644 index 000000000..29fa45d55 --- /dev/null +++ b/content/blog/eclipse-plugin-for-esp-idf/index.md @@ -0,0 +1,95 @@ +--- +title: "Eclipse Plugin for ESP-IDF" +date: 2020-04-17 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kondal-kolipaka +tags: + - Esp32 + - IoT + - Eclipse + - Plugins + - Esp Idf + +--- +{{< figure + default=true + src="img/eclipse-1.webp" + >}} + +ESP-IDF Eclipse Plugin brings developers an easy-to-use Eclipse-based development environment for developing ESP32 based IoT applications. + +It provides better tooling capabilities, which simplifies and enhances standard Eclipse CDT for developing and debugging ESP32 IoT applications. It offers advanced editing, compiling, flashing and debugging features with the addition of Installing the tools, SDK configuration and CMake editors. The plug-in runs on Windows, macOS and GNU/Linux. + +It supports [ESP-IDF](https://github.com/espressif/esp-idf) CMake based projects (4.x and above) + +## Current Status + +We have recently released 1.0.1 to the public. Check [here](https://github.com/espressif/idf-eclipse-plugin/releases) + +## Getting Started + +The IDF Eclipse Plugin is available from the Eclipse Marketplace. To get started, users need to download the [Eclipse CDT](https://www.eclipse.org/downloads/packages/release/2020-03/r/eclipse-ide-cc-developers-includes-incubating-components) from the Eclipse downloads page. The Eclipse CDT can be installed with the new Eclipse installer, or the CDT package can be downloaded directly. Once that’s set up, the [Marketplace](https://marketplace.eclipse.org/content/esp-idf-eclipse-plugin) client can be used to search for and install the ESP-IDF Eclipse Plugin. + +{{< figure + default=true + src="img/eclipse-2.webp" + >}} + +You can also install the IDF Eclipse Plugin into the existing Eclipse CDT using the plugin update site URL [https://dl.espressif.com/dl/idf-eclipse-plugin/updates/latest/](https://dl.espressif.com/dl/idf-eclipse-plugin/updates/latest/) + +You can find the detailed instructions [here](https://github.com/espressif/idf-eclipse-plugin#espressif-idf-eclipse-plugins) + +{{< figure + default=true + src="img/eclipse-3.webp" + >}} + +Espressif believes in the open-source approach and we have made code open for the plugin as well [https://github.com/espressif/idf-eclipse-plugin](https://github.com/espressif/idf-eclipse-plugin). We really welcome any kind of contribution that one can provide. + +## Key Features + +Eclipse CDT with IDF Eclipse Plugin supports end-to-end workflow to develop ESP32 IoT applications. Here are some of the features. + +- IDF Tools installation: It installs xtensa-esp32-elf, xtensa-esp32s2-elf, esp32ulp-elf, esp32s2ulp-elf, openocd-esp32, CMake and Ninja build tools +- Auto-configuration of Eclipse CDT build environment variables such as PATH, IDF_PATH, OPENOCD_SCRIPTS and IDF_PYTHON_ENV_PATH +- Auto-configuration of Core build toolchains and CMake toolchain which is used in resolved headers and indexing +- New ESP-IDF project wizard and templates to get started +- Compiling and Flashing an application to the board +- Viewing Serial monitor output +- JTAG GDB Hardware debugging +- OpenOCD debugging using [Eclipse GNU MCU Plugin](https://gnu-mcu-eclipse.github.io/debug/openocd/) +- Predefined debug launch configuration files to quickly get started with debugging +- Importing an existing IDF project and converting to the Eclipse-based CMake project +- [CMake Editor Plug-in](https://github.com/15knots/cmakeed) is integrated with IDF plugins for editing CMake files such as CMakeLists.txt +- Easy to use Eclipse-based GUI for SDK Configuration Editor which will simulate the behaviour of idf.py menuconfig +- Customized flash target — supports esp32 and esp32s2 chips + +## Eclipse CDT Workbench with IDF Eclipse Plugin + +{{< figure + default=true + src="img/eclipse-4.webp" + >}} + +## Components Based Design + +{{< figure + default=true + src="img/eclipse-5.webp" + >}} + +## Demo + +Please check our demo presented in EclipseCon 2019. This will also give an overview of ESP-IDF, build system and a quick demo on the plugin. + +## Resources + +ESP-IDF Eclipse Plugin [https://github.com/espressif/idf-eclipse-plugin](https://github.com/espressif/idf-eclipse-plugin) + +ESP-IDF [https://github.com/espressif/esp-idf/](https://github.com/espressif/esp-idf/) + +ESP-IDF documentation [https://docs.espressif.com/projects/esp-idf/en/latest/](https://docs.espressif.com/projects/esp-idf/en/latest/) + +ESP32 Forum for IDE’s [https://www.esp32.com/viewforum.php?f=40](https://www.esp32.com/viewforum.php?f=40) diff --git a/content/blog/embedding-voice-into-devices-with-esp32/index.md b/content/blog/embedding-voice-into-devices-with-esp32/index.md new file mode 100644 index 000000000..b402a0487 --- /dev/null +++ b/content/blog/embedding-voice-into-devices-with-esp32/index.md @@ -0,0 +1,37 @@ +--- +title: "Embedding Voice into Devices with ESP32" +date: 2019-03-10 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - hrishikesh-dhayagude +tags: + - Esp32 + - Dialogflow + - IoT + +--- +ESP32 already supported being a fully functional [Alexa client](https://github.com/espressif/esp-va-sdk/blob/master/README-Alexa.md), a voice assistant. + +ESP32 now also supports Dialogflow, a voice-enabled conversational interface from Google. It enables IoT users to include a natural language user interface in their devices. + +The differences of Dialogflow w.r.t. voice assistants are + +- a reduced complexity, +- pay as you go pricing, +- custom wake words, instead of having to use ‘Okay Google’ or ‘Alexa’ +- and no certification hassles, because hey, you aren’t integrating with Alexa or Google Assistant; you are building one of your own + +Unlike voice-assistants, Dialogflow let’s you configure every step of the conversation, and it won’t answer other trivia/questions like voice-assistants typically do. For example, a Dialogflow agent for a Laundry project will provide information only about the configurable parameters of the laundry (like state, temperature, wash cycle etc.) + +This is now a part of Espressif’s Voice Assistant SDK and is available on github here: [https://github.com/espressif/esp-va-sdk](https://github.com/espressif/esp-va-sdk/blob/master/README-Dialogflow.md). To get started, see [this](https://github.com/espressif/esp-va-sdk/blob/master/README-Dialogflow.md). + +The underlying technologies used by the Dialogflow implementation for VA SDK includes: + +- gRPC +- Google Protobufs +- HTTP 2.0 + +You can see a demo video of Dialogflow on ESP32 LyraT below: + +Note that the current Dialogflow SDK does not yet include support for creating custom wake words. Conversations initiated with a tap-to-talk button are supported. diff --git a/content/blog/esp-idf-custom-ethernet-phy-driver-quick-guide/img/espidf-1.webp b/content/blog/esp-idf-custom-ethernet-phy-driver-quick-guide/img/espidf-1.webp new file mode 100644 index 000000000..cf550539e Binary files /dev/null and b/content/blog/esp-idf-custom-ethernet-phy-driver-quick-guide/img/espidf-1.webp differ diff --git a/content/blog/esp-idf-custom-ethernet-phy-driver-quick-guide/index.md b/content/blog/esp-idf-custom-ethernet-phy-driver-quick-guide/index.md new file mode 100644 index 000000000..f4489c32f --- /dev/null +++ b/content/blog/esp-idf-custom-ethernet-phy-driver-quick-guide/index.md @@ -0,0 +1,191 @@ +--- +title: "ESP-IDF Custom Ethernet PHY Driver Quick Guide" +date: 2022-11-27 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - ondrej-kosta +tags: + - Ethernet + - Espressif + - Esp32 + - Programming + +--- +*“I would like to start a new product design with my favorite chip but it’s out of stock! Oh, no! I’ll have to design a new layout and develop new drivers for it!”* Every designer knows that feeling very well these days… + +The good news is you don’t have to worry about a such thing anymore, at least in terms of ESP-IDF Ethernet PHY driver support. In this article, I’ll demonstrate to you how simple it is to create a new Ethernet PHY driver. + +First of all, you need to find a replacement for your current PHY chip. I have a friend working for a semiconductors distribution company so I just picked up my phone and asked him for some advice. He recommended ADIN1200. It’s a robust industrial-grade chip with a [wide set of features](https://www.analog.com/en/products/adin1200.html#product-overview). It’s an ideal candidate for our demonstration purposes, since an evaluation board exists, the chip is from a vendor which is currently not supported by ESP-IDF (i.e. we limit the possibility of vendor locking for our customers) and the chip is IEEE 802.3 compliant. The last fact will help us the most to reduce the effort needed for a new driver creation since a management interface between EMAC and PHY is standardized and the ESP-IDFv5.0 takes advantage of it. [The ESP-IDF Ethernet driver](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_eth.html#configure-mac-and-phy) basically consists of three layers: + +- The Ethernet objects itself which is the public API and which wraps MAC and PHY layers into one functional unit. +- The MAC layer controls the behavior of the Media Access Controller and provides a data interface to the driver application. +- The PHY layer controls physical layer properties and gathers the status of the link. + +The “22.2.4 Management Functions” section of the IEEE 802.3 standard defines provisions of the so-called “MII Management Interface” for the purposes of controlling the PHY and gathering status from the PHY by MAC. A set of management registers is defined and this basic management functionality is addressed by the ESP-IDF Ethernet driver as a [set of common functions](https://docs.espressif.com/projects/esp-idf/en/release-v5.0/esp32/api-reference/network/esp_eth.html#custom-phy-driver). Therefore, you as an author of the new PHY driver can focus only on chip-specific features like: + +- Link status indication which is almost always chip-specific. +- Chip initialization. This part is not strictly required, since it’s most common. It’s good to be added to ensure that the expected chip is used. +- Chip-specific features configuration (such as Wake on LAN, Energy Efficient Ethernet, various diagnostics capabilities, etc). + +## Let’s demonstrate the creation of the driver step by step + +In terms of hardware, it is easiest to start with the EVAL-ADIN1200 evaluation board. This evaluation board only requires a few modifications to be connected to ESP32 via RMII. (You can, of course, start with a new PCB design if you find it more appropriate.) + +__Steps to prepare the hardware:__ + +1) Study materials at the [ADIN1200 product page](https://www.analog.com/en/products/adin1200.html#product-overview) and get familiar with the chip and the evaluation board. + +2) Once you are familiar with the evaluation board, the following modifications are required: + +- ADIN1200 requires an external 50 MHz RMII REF_CLK, therefore de-solder the Y1 oscillator and its associated coupling capacitors. +- Solder R120 with 0R resistor +- Solder 10K pull-ups at RX_CTL(High) and RX_CLK (High) to configure ADIN1200 into RMII mode. +- For additional configuration options, consult “*Table 5. EVAL-ADIN1200FMCZ Configuration Setting” *in the EVAL-ADIN1200FMCZ User Guide. + +3) Connect ADIN1200 RMII interface to ESP32. I soldered wires to the exposed 0R resistors as shown in the below Table. Try to keep wires as short as possible and all with the same length. + +Note that RMII REF_CLK needs to be generated externally to ADIN1200 either by an external 50 MHz oscillator or by ESP32. It is simpler to use ESP32 for our demonstration purposes so I used that solution, but keep in mind that the ESP32 WROOM module is required. + +``` +╔════════════════════╦═════════════════╦═════════════╗ +║ RMII Interface Pin ║ EVAL-ADIN1200 ║ ESP32 WROOM ║ +╠════════════════════╬═════════════════╬═════════════╣ +║ TX_EN ║ R80 ║ GPIO21 ║ +║ TXD[0] ║ R90 ║ GPIO19 ║ +║ TXD[1] ║ R88 ║ GPIO22 ║ +║ RXD[0] ║ R99 ║ GPIO25 ║ +║ RXD[1] ║ R86 ║ GPIO26 ║ +║ CRS_DV ║ R81 ║ GPIO27 ║ +║ RESET ║ R213 ║ GPIO5 ║ +║ REF_CLK ║ C92 ║ GPIO17 ║ +║ MDIO ║ MDIO Test Point ║ GPIO18 ║ +║ MDC ║ MDC Test Point ║ GPIO23 ║ +╚════════════════════╩═════════════════╩═════════════╝ +``` + +The result of EVAL-ADIN1200 modification is shown in the figure below. + +{{< figure + default=true + src="img/espidf-1.webp" + >}} + +From software point of view, it’s even simpler. + +__Steps to create the new Ethernet PHY driver:__ + +1) Create a copy of *esp_eth_phy_ip101.c* or any other IEEE 802.3 compatible PHY chip source file from the ESP-IDF */components/esp_eth/src/* folder to a new folder. + +2) Rename all occurrences of “ip101” to “adin1200”. + +3) Update the “Vendor Specific Registers” code section with ADIN1200 registers you are planning to use. I’ve only updated the “PHY Status 1 Register” since I’m not planning to use any of the advanced features yet. + +```c +/***************Vendor Specific Register***************/ +/** + * @brief PHY Status 1 Register + * + */ +typedef union { + struct { + uint32_t lp_apause_adv : 1; /* The link partner has advertised asymmetric pause */ + uint32_t lp_pause_adv : 1; /* The link partner has advertised pause */ + uint32_t autoneg_sup : 1; /* Local and remote PHYs support autonegotiation */ + uint32_t col_stat : 1; /* Indicates that collision is asserted */ + uint32_t rx_dv_stat : 1; /* Indication that receive data valid (RX_DV) is asserted. */ + uint32_t tx_en_stat : 1; /* Indication that transmit enable (TX_EN) is asserted */ + uint32_t link_stat : 1; /* Link status */ + uint32_t hcd_tech : 3; /* Indication of the resolved technology after the link is established */ + uint32_t b_10_pol_inv : 1; /* polarity of the 10BASE-T signal inversion */ + uint32_t pair_01_swap : 1; /* Pair 0 and Pair 1 swap */ + uint32_t autoneg_stat : 1; /* Autonegotiation Status Bit */ + uint32_t par_det_flt_stat: 1; /* Parallel Detection Fault Status Bit */ + uint32_t reserverd : 1; /* Reserved */ + uint32_t phy_in_stndby : 1; /* PHY is in standby state and does not attempt to bring up links */ + }; + uint32_t val; +} ps1r_reg_t; +#define ETH_PHY_PS1R_REG_ADDR (0x1A) +``` + +4) Update expected *oui* and *model* in *adin1200_init()* function based on the content of “PHY Identifier 1/2 Register”* *defined in datasheet. + +```c +/* Check PHY ID */ +uint32_t oui; +uint8_t model; +ESP_GOTO_ON_ERROR(esp_eth_phy_802_3_read_oui(phy_802_3, &oui), err, TAG, "read OUI failed"); +ESP_GOTO_ON_ERROR(esp_eth_phy_802_3_read_manufac_info(phy_802_3, &model, NULL), err, TAG, "read manufacturer's info failed"); +ESP_GOTO_ON_FALSE(oui == 0xa0ef && model == 0x02, ESP_FAIL, err, TAG, "wrong chip ID (read oui=0x%" PRIx32 ", model=0x%" PRIx8 ")", oui, model); +``` + +5) Modify the *update_link_duplex_speed()* function to read the actual negotiation result. This information is not standardized under IEEE 802.3 hence all PHY chips differ at this point. ADIN1200 indicates this data in the “PHY Status 1 Register”. + +```c +... + ESP_GOTO_ON_ERROR(eth->phy_reg_read(eth, addr, ETH_PHY_ANLPAR_REG_ADDR, &(anlpar.val)), err, TAG, "read ANLPAR failed"); + ESP_GOTO_ON_ERROR(eth->phy_reg_read(eth, addr, ETH_PHY_BMSR_REG_ADDR, &(bmsr.val)), err, TAG, "read BMSR failed"); + eth_link_t link = bmsr.link_status ? ETH_LINK_UP : ETH_LINK_DOWN; + /* check if link status changed */ + if (adin1200->phy_802_3.link_status != link) { + /* when link up, read negotiation result */ + if (link == ETH_LINK_UP) { + ps1r_reg_t ps1r; + ESP_GOTO_ON_ERROR(eth->phy_reg_read(eth, addr, ETH_PHY_PS1R_REG_ADDR, &(ps1r.val)), err, TAG, "read PS1R failed"); + switch (ps1r.hcd_tech) { + case 0: //10Base-T half-duplex + speed = ETH_SPEED_10M; + duplex = ETH_DUPLEX_HALF; + break; + case 1: //10Base-T full-duplex + speed = ETH_SPEED_10M; + duplex = ETH_DUPLEX_FULL; + break; + case 2: //100Base-TX half-duplex + speed = ETH_SPEED_100M; + duplex = ETH_DUPLEX_HALF; + break; + case 3: //100Base-TX full-duplex + speed = ETH_SPEED_100M; + duplex = ETH_DUPLEX_FULL; + break; + default: + break; + } +... +``` + +6) Create a new header file with *esp_eth_phy_new_adin1200()* function. + +… and the new PHY driver is done and ready to be used! + +Now, we just create MAC and PHY objects as we are used to and initialize the ESP-IDF Ethernet driver in our application. + +```c +#include "esp_eth_phy_adin1200.h" + +// Init common MAC and PHY configs to default +eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG(); +eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG(); + +// Update PHY config based on board specific configuration +phy_config.phy_addr = CONFIG_EXAMPLE_ETH_PHY_ADDR; +phy_config.reset_gpio_num = CONFIG_EXAMPLE_ETH_PHY_RST_GPIO; +// Init vendor specific MAC config to default +eth_esp32_emac_config_t esp32_emac_config = ETH_ESP32_EMAC_DEFAULT_CONFIG(); +// Update vendor specific MAC config based on board configuration +esp32_emac_config.smi_mdc_gpio_num = CONFIG_EXAMPLE_ETH_MDC_GPIO; +esp32_emac_config.smi_mdio_gpio_num = CONFIG_EXAMPLE_ETH_MDIO_GPIO; +// Create new ESP32 Ethernet MAC instance +esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&esp32_emac_config, &mac_config); +// Create new PHY instance +esp_eth_phy_t *phy = esp_eth_phy_new_adin1200(&phy_config); +// Init Ethernet driver to default and install it +esp_eth_handle_t eth_handle = NULL; +esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy); +ESP_GOTO_ON_FALSE(esp_eth_driver_install(&config, ð_handle) == ESP_OK, NULL, + err, TAG, "Ethernet driver install failed"); +``` + +The full version of the ADIN1200 Ethernet PHY driver is available at [ESP-IDF additional Ethernet drivers repository](https://github.com/espressif/esp-eth-drivers/tree/master/adin1200) or via [IDF Component Manager](https://components.espressif.com/components/espressif/adin1200). diff --git a/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-1.webp b/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-1.webp new file mode 100644 index 000000000..7dfc36f7b Binary files /dev/null and b/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-1.webp differ diff --git a/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-2.webp b/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-2.webp new file mode 100644 index 000000000..4bb5683eb Binary files /dev/null and b/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-2.webp differ diff --git a/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-3.webp b/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-3.webp new file mode 100644 index 000000000..2c757d5ab Binary files /dev/null and b/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-3.webp differ diff --git a/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-4.webp b/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-4.webp new file mode 100644 index 000000000..dbf25d90b Binary files /dev/null and b/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-4.webp differ diff --git a/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-5.webp b/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-5.webp new file mode 100644 index 000000000..48f121176 Binary files /dev/null and b/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-5.webp differ diff --git a/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-6.webp b/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-6.webp new file mode 100644 index 000000000..c86a42211 Binary files /dev/null and b/content/blog/esp-idf-development-tools-guide-part-i/img/espidf-6.webp differ diff --git a/content/blog/esp-idf-development-tools-guide-part-i/index.md b/content/blog/esp-idf-development-tools-guide-part-i/index.md new file mode 100644 index 000000000..557f1814a --- /dev/null +++ b/content/blog/esp-idf-development-tools-guide-part-i/index.md @@ -0,0 +1,418 @@ +--- +title: "ESP-IDF Development Tools Guide — Part I" +date: 2021-06-08 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - pedro-minatel +tags: + - ESP32 +--- +{{< figure + default=true + src="img/espidf-1.webp" + >}} + +If you are starting on ESP32 development, you will see that the ESP-IDF is the official development framework and [Espressif](https://www.espressif.com) actively maintains it with constant updates. + +The ESP-IDF is a collection of different things. We have the development framework which provides a comprehensive Software Development Kit, and it also includes the toolchain (the compilers are installed separate from the ESP-IDF folder), documentation, example codes, and a set of tools. + +These tools are particularly important and commonly used in many different scenarios in the development process. + +This guide will introduce some tools that are not commonly used and could help you on specific tasks or to be used for automation process for example. + +To access the documentation reference about the complete Build System, including the idf.py, see: [Build System](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/build-system.html) on our official documentation. + +{{< figure + default=true + src="img/espidf-2.webp" + >}} + +## ESP-IDF Introduction + +Before starting on the tools themselves, it is important to explain the basic structure of the ESP-IDF. This part will be very introductory and more informative. We will explore it more in detail in future articles. + +The ESP-IDF means __Espressif IoT Development Framework__ and was created to provide the full development environment for IoT applications, including the SDK, installation scripts, components, documentation, examples, build system, compilers, and tools. It is required to develop the application on the ESP32 (not compatible with ESP8266). + +The ESP-IDF is compatible with all ESP32 SoC series, including the Xtensa and RISC-V cores. + +Currently, the ESP-IDF is available on our [GitHub](https://github.com/espressif/esp-idf). + +[espressif/esp-idfESP-IDF is the official development framework for the and ESP32-S Series SoCs provided for Windows, Linux and macOS…github.com](https://github.com/espressif/esp-idf?source=post_page-----89af441585b--------------------------------) + +> Contributions from the community are very welcome! To know how to contribute, please see: [How to Contribute](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/contribute/index.html). + +The ESP-IDF is composed of various parts, detailed below: + +## Components + +The components are where the SDK is located. It contains several components used for the bootloader, FreeRTOS, drivers, stacks and libraries. + +## Documentation + +The ESP-IDF includes the documentation needed for developers to create and use all the features available. This documentation is also available online. + +For [ESP32](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started), [ESP32-S2](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started) or [ESP32-C3](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/get-started). + +Or: [Getting Started with ESP-IDF](https://idf.espressif.com). + +## Examples + +We provide a set of examples on each peripheral and functionality, so you can start your project using one of those examples. Most of the examples were written in C and a few in C++. + +You can find examples from blinking a LED, to connect to Wi-Fi, Bluetooth, protocols, storage, systems functions, and many others. This section is continuously updated to provide new examples for each new release. + +To see more: [ESP-IDF Examples](https://github.com/espressif/esp-idf/tree/master/examples). + +## Tools + +The tools referred in this article are the specific ESP-IDF tools. They are not the tools installed in the Operating System, like CMake, git, dfu-utils, and many others required tools. + +The ESP-IDF tools are a set of scripts, most created in Python, to help with various tasks, from configuring the SDK to programming the ESP32. All the tools are available directly from the virtual environment terminal. + +The following is the list of the tools available on the ESP-IDF v4.3: + +- idf.py – It is a command-line tool and provides a front-end for managing your project builds. +- esptool.py – This tool is a ROM bootloader utility used to perform memory-related, like read, write, erase, dump, etc. +- otatool.py – It is a set of commands to deal with the OTA partitions and configuration. +- parttool.py – This tool is similar to the otatool.py but more generic. You can use this to read, write, erase and get partitions information. +- espefuse.py – The espefuse manages the efuses and gets states from them. This tool must be used very carefully since some operations are irreversible. +- espsecure.py - It is the Secure Boot & Flash Encryption tool, used for secure operations. + +> __Installing ESP-IDF for Windows, Linux and macOS:__ To install the ESP-IDF in your system, you can follow the Getting Started guide in the documentation.See the [Getting Started](https://idf.espressif.com) page to start using ESP-IDF.We also have some tutorials on the Espressif [Official YouTube channel](https://www.youtube.com/c/EspressifSystems). + +{{< figure + default=true + src="img/espidf-3.webp" + >}} + +## ESP-IDF Tools + +To start using the tools, we need to open a terminal window and set the virtual environment variables. This can be done by running the export script, included on the ESP-IDF. + +__Windows Command Prompt:__ + +``` +%userprofile%\esp\esp-idf\export.bat +``` + +__or for PowerShell:__ + +``` +.$HOME/esp/esp-idf/export.ps1 +``` + +__Linux/macOS:__ + +``` +. $HOME/esp/esp-idf/export.sh +``` + +In this guide, the idf.py and esptool.py will be addressed first. The other tools will be covered in the other guides. + +## IDF Tool + +The idf.py is the main command tool and it is widely used. + +The main feature of this tool is to serve as a front-end. It invokes the build system, currently supporting CMake, creates new project, components, prepares the DFU binary, configures the SDK, program the firmware to the device, etc. Other features are included on the idf.py and the commands will be described below: + +To see the full list of commands supported, type in the terminal: + +> idf.py --help + +> Note: Some commands are target-dependent and may not be available on other targets. To see all the commands supported by the target, run the set-target command before. + +idf.py set-target [TARGET] + +To see all the targets supported: + +idf.py set-target --help + +The command syntax may vary from command to command, but the basic structure is: + +Usage: idf.py [OPTIONS] COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]... + +Here is the list of the most used commands as well as some that are helpful. Not all commands will be covered in this guide, so specific guides will be created to cover them. + +For the commands that requires serial connection to the device, the COM port, we can use the the option --port or -p and the port. + +*For example:* + +__Linux:__ -p /dev/ttyUSB0 + +*or* + +__Windows:__ -p COM1 + +The COM port name and number may vary from system to system and from different Serial-to-USB converters. + +## Commands: + +- __all__ — Build the project. This command is used to build the full project, including the bootloader and all other required partitions. You can use __build__ instead of __all__ as a alias. + +Syntax: idf.py all or idf.py build + +- __app__ — Build the app only. This command is used if you want to build only the application and keep the other binaries (bootloader, partitions, etc) out from the build. + +Syntax: idf.py app + +- __app-flash__ — Flash the application only. Using this command to flash the application, all the other partitions will be kept unchanged. + +Syntax: idf.py p [PORT] app-flash + +- __bootloader__ — Build the bootloader only. This is similar to the app command. + +Syntax: idf.py bootloader + +- __bootloader-flash__ — Flash the bootloader only. This is like the app-flash but for the bootloader. + +Syntax: idf.py p [PORT] bootloader-flash + +- __clean__ — Cleans all the build output files from the build directory. This command is used to delete the last build file in order to re-build if needed.See also: *fullclean.* + +Syntax: idf.py clean + +- __create-component__ — Create a new component. This command creates a new component and all necessary files into your project. + +To use this command, first, you need to create a folder in your project called “components” and under the folder, you can run the following command and the new component name as an argument. + +Syntax: idf.py create-component [COMPONENT-NAME] + +Alternatively, you can use the -C option and point the path to the components folder. If the components folder does not exist, the folder will be created. + +Syntax: idf.py -C [PATH]/components create-component [COMPONENT-NAME] + +After that, you can simply add the new component header file to your project. + +- __create-project__ — Create a new project. This command is extremely helpful for creating new projects, including all necessary files to build. + +To create a new project using this tool, you need to go to the destination folder and use the following command. + +Syntax: idf.py create-project [PROJECT-NAME] + +If you want to define the path to the project destination folder, you can use the -C option. + +Syntax: idf.py -C [PATH] create-project [PROJECT-NAME] + +- __dfu__ — Build the DFU binary. To create the DFU binary, use the dfu option before downloading it to the device. + +This option is only available if the SoC supports DFU and may not be visible before setting the target to the supported SoC. + +Syntax: idf.py dfu + +- __dfu-flash__ — Flash the DFU binary. This option is used to download the DFU binary to the device. + +Syntax: idf.py dfu-flash + +To see the DFU in detail, please check the [ESP32-S2 DFU API guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-guides/dfu.html) documentation. + +- __erase-flash__ — Erase the entire flash chip. This option is used to wipe the flash memory. + +Syntax: idf.py -p [PORT] erase-flash + +- __flash__ — Flash the project. This option will download the firmware binaries to the device. If the project has not been built yet, this command will trigger the build before flashing it to the device. + +Syntax: idf.py -p [PORT] flash + +- __fullclean__ — Delete the entire build directory contents. This option removes all files from the build folder. This command does not remove the build folder. + +Syntax: idf.py fullclean + +- __menuconfig__ — Run “menuconfig” project configuration tool. This command opens the configuration menu to adjust the SDK options to your needs. + +Syntax: idf.py menuconfig + +{{< figure + default=true + src="img/espidf-4.webp" + >}} + +- __monitor__ — Display serial output. One of the most used option is the monitor. This option allows you to start the monitoring tool and to display all the output from the device. + +Syntax: idf.py -p [PORT] monitor + +> To see more details about the monitor tool, see: [Monitor](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-monitor.html) on our docs. + +- __reconfigure__ — Re-run CMake. This option can reconfigure your project CMake. + +Syntax: idf.py reconfigure + +If you are adding a new component to your project, this function should be used to update the CMake for your new project structure. + +- __set-target__ — Set the chip target to build. This option is often used to change the target device in the current project. + +It’s important to mention that every time you change the target, the project creates a new SDK configuration, and all changes will be settled as the default target configuration. You will need to rebuild the project after setting the new target. + +Syntax: idf.py set-target [TARGET] + +To see all the available targets on the current ESP-IDF version, you can use: + +Syntax: idf.py set-target + +- __size__ — Print basic size information about the app. This allows you to check the RAM usage and the total image size. + +Syntax: idf.py size + +{{< figure + default=true + src="img/espidf-5.webp" + >}} + +{{< figure + default=true + src="img/espidf-6.webp" + >}} + +## ESPTOOL + +The ROM Bootloader Utility, also known as [esptool](https://github.com/espressif/esptool), is the tool used to write the firmware to the device and also for other memory and binary operations. + +Below you will see the full list of functionalities on the esptool.py: + +> esptool.py --help + +The idf.py uses the esptool.py in several commands, including flash and erase. You might need to use the esptool for some other specific reasons. + +The esptool.py command syntax is defined below: + +Usage: esptool.py [OPTIONS] COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]... + +## Here are some commands: + +- __write_flash__ — Write a binary blob to the device flash. + +Syntax: + +``` +esptool.py -p [PORT] write_flash [ADDRESS1] [PATH_TO_BINARY1]… [ADDRESS2] [PATH_TO_BINARY2] +``` + +The write_flash command supports multiple binaries in the same command. + +This command also allows some before-and-after commands: + +__*--before*__ : What to do before connecting to the chip. + +``` +default_reset +no_reset +no_reset_no_sync +``` + +This option usually is used with default_reset by the idf.py when flashing the device. For some special demands, you can change this behavior. + +__*-- after*__ : What to do after esptool.py is finished. + +``` +hard_reset +soft_reset +no_reset +``` + +For this option, the idf.py default option is the hard_reset. It means that the device will be hard reset after flashing is done. + +If you need to keep the device into download state, you can use the “no_reset” argument for this option. + +Syntax: + +``` +esptool.py -p [PORT] --before [ARG_BEFORE] --after [ARG_AFTER] write_flash [ADDRESS] [PATH_TO_BINARY] +``` + +- __verify_flash__ — Verify a binary blob against flash. + +This option is used to verify the integrity of the compiled version to the flashed into the device. This kind of verification is often used to check or verify possible errors after flashing the device. + +Syntax: esptool.py -p [PORT] verify_flash [ADDRESS] [PATH_TO_BINARY] + +- __image_info__ — Dump headers from an application image. + +Syntax: esptool.py --chip [CHIP] image_info [PATH_TO_BINARY] + +- __read_mac__ — Read MAC address from OTP ROM. + +Syntax: esptool.py -p [PORT] read_mac + +- __erase_flash__ — Perform Chip Erase on SPI flash. Same as idf.py erase_flash. + +It wipes the whole flash memory and could take some time depending on the flash size. + +Syntax: esptool.py -p [PORT] erase_flash + +- __erase_region__ — Erase a region of the flash. + +This partially wipes the flash memory. This can be used to erase a specific partition or some other area specified by the addresses. + +Syntax: esptool.py -p [PORT] erase_region [START_ADDRESS] [END_ADDRESS] + +Note: The parttool.py use this option on esptool.py to erase the selected partition. + +- __chip_id__ — Read Chip ID from OTP ROM, if available. + +Syntax: esptool.py -p [PORT] chip_id + +- __flash_id__ — Read SPI flash manufacturer and device ID. + +You can use this option to detect the flash information, like size and manufacturer. You can also use this to get the chip details such as: + +- Chip type and revision +- Crystal frequency +- MAC Address + +Syntax: esptool.py -p [PORT] flash_id + +- __merge_bin__ — Merge multiple raw binary files into a single file for later flashing. + +This option is useful when distributing the full image. You can merge all binaries files generated by the build, including bootloader, app, partitions, ota, etc. + +Merge Command Syntax: + +``` +esptool.py merge_bin [OUT] [OPTIONS] [ADDRESS1] [PATH_TO_BINARY1]...[ADDRESS2] [PATH_TO_BINARY2] +``` + +Merge Advanced Options: + +``` +• __--flash_freq__ : Defines the flash SPI speed (in MHz) + ◦ keep + ◦ 40m + ◦ 26m + ◦ 20m + ◦ 80m• __--flash_mode__ : Defines the SPI flash memory connection mode. + ◦ keep + ◦ qio + ◦ qout + ◦ dio + ◦ dout• __--flash_size [FLASH_SIZE]__ : Defines the flash memory size.• __--spi-connection [SPI_CONNECTION]:__ Defines the flash pinout configuration. If not defined, the default will be used from efuse.• __--target-offset [TARGET_OFFSET]:__ This option define the memory ofsset that the binary will be flashed. The default option is 0x0.• __--fill-flash-size [FILL_FLASH_SIZE]:__ Use this option to fill the binary with 0xff padding. This option will increase the binary size up to the defined flash size. +``` + +Here is an example to merge three binaries into one for an ESP32 with 4MB of flash in DIO mode: + +``` +esptool.py --chip esp32 merge_bin -o my_app_merged.bin --flash_mode dio --flash_size 4MB 0x1000 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin 0x10000 build/my_app.bin +``` + +Note that the addresses may vary from one application to another. A good way to check this is through the partitions CSV file or the output from the command idf.py build. + +Then, the output file can be flashed at the offset 0x0. + +``` +esptool.py write_flash 0x0 my_app_merged.bin +``` + +## Optional arguments + +The esptool.py has some optional arguments that help the commands to be more specific or to change some default options. Here are the arguments: + +If not set, the default will be used. + +``` +• __--help__ : Shows the help information.• __--chip__ : Set the target chip type. Can be used to avoid mistakes such as sending a command to the wrong chip type.• __--port__ : Set the serial port device.• __--baud__ : Set the serial port device speed.• __--before__ : What to do before connecting to the chip.• __--after__ : What to do after running esptool.py.• -__-no-stub__ : Disable launching the flasher stub, only talk to ROM bootloader.• __--trace__ : Enable trace-level output of esptool.py interactions.• __--override-vddsdio__ : Override ESP32 VDDSDIO internal voltage regulator (use with care).• __--connect-attempts__ : Number of attempts to connect, negative or 0 for infinite. Default: 7. +``` + +## Conclusion + +The get the full potential of the ESP-IDF, you must also know how to use the set of tools available. Using these tools’ functionalities, you can build automation for your project or manufacturing process, creating scripts that perform specific functions. + +Mastering the ESP-IDF tools could save time and get your development process even easier on the daily tasks! diff --git a/content/blog/esp-idf/img/espidf-1.webp b/content/blog/esp-idf/img/espidf-1.webp new file mode 100644 index 000000000..4ae89ba93 Binary files /dev/null and b/content/blog/esp-idf/img/espidf-1.webp differ diff --git a/content/blog/esp-idf/index.md b/content/blog/esp-idf/index.md new file mode 100644 index 000000000..934ee0119 --- /dev/null +++ b/content/blog/esp-idf/index.md @@ -0,0 +1,44 @@ +--- +title: "ESP-IDF" +date: 2018-10-24 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Wifi + - Esp32 + - IoT + - Technology + +--- +{{< figure + default=true + src="img/espidf-1.webp" + >}} + +Use Espressif’s IoT Development Framework to build a complete product. Right from network configuration, to local or remote access, OTA firmware upgrades, certification and manufacturing, we have got you covered. You may refer to [ESP-Jumpstart](/blog/jumpstart-iot-product-development-on-esp32) for more details. + +Some other relevant articles: + +__Development:__ + +- [Eclipse Plugin for ESP-IDF](/blog/eclipse-plugin-for-esp-idf) + +__Features:__ + +- [Local Network Access](/blog/local-network-access-via-http-server) +- [Footprint Analysis](/blog/analysing-static-footprint) + +__Security:__ + +- [ESP32 and Security](/blog/understanding-esp32s-security-features) +- [TLS (Transport Layer Security)](/blog/esp32-tls-transport-layer-security-and-iot-devices) + +__Certification:__ + +- [Understanding Wi-Fi Certification](/blog/wi-fi-certification-with-esp32) + +__Manufacturing:__ + +- [Creating Unique Factory Data Images](/blog/building-products-creating-unique-factory-data-images) diff --git a/content/blog/esp-insights-custom-dashboards/img/esp-1.webp b/content/blog/esp-insights-custom-dashboards/img/esp-1.webp new file mode 100644 index 000000000..e0b5f4e34 Binary files /dev/null and b/content/blog/esp-insights-custom-dashboards/img/esp-1.webp differ diff --git a/content/blog/esp-insights-custom-dashboards/img/esp-2.webp b/content/blog/esp-insights-custom-dashboards/img/esp-2.webp new file mode 100644 index 000000000..153e21272 Binary files /dev/null and b/content/blog/esp-insights-custom-dashboards/img/esp-2.webp differ diff --git a/content/blog/esp-insights-custom-dashboards/img/esp-3.webp b/content/blog/esp-insights-custom-dashboards/img/esp-3.webp new file mode 100644 index 000000000..ead870f8c Binary files /dev/null and b/content/blog/esp-insights-custom-dashboards/img/esp-3.webp differ diff --git a/content/blog/esp-insights-custom-dashboards/img/esp-4.webp b/content/blog/esp-insights-custom-dashboards/img/esp-4.webp new file mode 100644 index 000000000..b19159007 Binary files /dev/null and b/content/blog/esp-insights-custom-dashboards/img/esp-4.webp differ diff --git a/content/blog/esp-insights-custom-dashboards/img/esp-5.webp b/content/blog/esp-insights-custom-dashboards/img/esp-5.webp new file mode 100644 index 000000000..c99d3f256 Binary files /dev/null and b/content/blog/esp-insights-custom-dashboards/img/esp-5.webp differ diff --git a/content/blog/esp-insights-custom-dashboards/img/esp-6.webp b/content/blog/esp-insights-custom-dashboards/img/esp-6.webp new file mode 100644 index 000000000..a5d4f9a5c Binary files /dev/null and b/content/blog/esp-insights-custom-dashboards/img/esp-6.webp differ diff --git a/content/blog/esp-insights-custom-dashboards/img/esp-7.webp b/content/blog/esp-insights-custom-dashboards/img/esp-7.webp new file mode 100644 index 000000000..70634cd3e Binary files /dev/null and b/content/blog/esp-insights-custom-dashboards/img/esp-7.webp differ diff --git a/content/blog/esp-insights-custom-dashboards/img/esp-8.webp b/content/blog/esp-insights-custom-dashboards/img/esp-8.webp new file mode 100644 index 000000000..749ff804c Binary files /dev/null and b/content/blog/esp-insights-custom-dashboards/img/esp-8.webp differ diff --git a/content/blog/esp-insights-custom-dashboards/index.md b/content/blog/esp-insights-custom-dashboards/index.md new file mode 100644 index 000000000..bfb86284b --- /dev/null +++ b/content/blog/esp-insights-custom-dashboards/index.md @@ -0,0 +1,102 @@ +--- +title: "ESP Insights : Custom Dashboards" +date: 2022-08-16 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - adwait-patankar +tags: + - Custom Dashboard + - Espinsights + - Esp32 + - IoT + - Observability + +--- +The core purpose of ESP Insights Dashboard has always been to help quickly identify a group of nodes which are showing similar behaviour patterns with the help of powerful search filters. Further it helps the user to reach to a particular node and help diagnose the reason behind the node showing a certain behaviour. The user can then check the event logs or point in time metrics and system variable values and correlate any diagnostic information at hand. More in detail about group analytics and search filters can be found [here](/esp-insights-group-analytics-with-dynamic-search-filters-4fd48c17c5b9). + +## The need for custom dashboards + +Each ESP Insights user may have a different perspective of looking at their device data. A user in __developer role__ , may be using the dashboard more from diagnostics purposes and interested in understanding the crashing devices or the reboot pattern of devices. Whereas another user in __product manager role__ might be using it from analytics insights purposes and interested in just looking at the spread of online devices of particular type(s) and at particular times in a day or a week or a month. In order to cater to individual perspectives, sticking to just one default view and asking the user to set the filters every single time was not scoring on the user experience. Thus came the improvement to make it easier for the end users to save their custom dashboard with their search filters applied and preserved. A user can save multiple dashboards as per their need and intention of use viz. Crashing Devices Dashboard or Led Light v5.0 Devices (light devices with firmware version 5.0) and so on so forth. + +{{< figure + default=true + src="img/esp-1.webp" + >}} + +## Managing your dashboards + +As can be seen in the above image, there are multiple dashboards created, each for a different purpose, and filtering devices accordingly. While the “Crashing Device Dashboard” lists devices reporting crashes in last 7 days, there is another dashboard named “LED Lights” which just lists devices with firmware project as “led_lights”. + +{{< figure + default=true + src="img/esp-2.webp" + >}} + +Users can add specific search filters, apply specific date range; either absolute or relative like last 30 days or last 7 days etc. The device list is updated based on the search criteria. + +Let’s take a look at how the user can create and manage their dashboards. + +Initially there is only a default view, clean slate without any filters. The user can apply search filters, choose a date range and create a new dashboard. The users are prompted with a message if they want to save these filters as a separate dashboard. Click on the *Save Dashboard* should create a new Dashboard and should also get listed in the left side menu. + +{{< figure + default=true + src="img/esp-3.webp" + >}} + +Based on the selected time range the data is loaded in the dashboard. If the selected date range is absolute (for e.g 10 June 2022– 10 July 2022), then same data as received during that time range will be loaded every time that dashboard is selected. If the time range is relative (for e.g. last 30 days), then the data for relative time (say last 30 days) from the current day is fetched and displayed in the selected dashboard. + +__2. Rename Dashboard__ + +Once the dashboard is saved, the user has the ability to change the name of the dashboard to their liking. Click on the *settings* options in the top right corner of the dashboard and choose the option for *Rename Dashboard* + +{{< figure + default=true + src="img/esp-4.webp" + >}} + +The name can be edited and the changes are saved. The same is reflected in the right side menu options as well as in the dashboard title. + +__3. Save Dashboard__ + +Make any changes to the Dashboard filters or search criteria and the user has a provision to save the preferences. Once saved, these search criterion are persisted across the logins. Click on the *settings* options in the top right corner of the dashboard and choose the option for *Save Dashboard* + +{{< figure + default=true + src="img/esp-5.webp" + >}} + +A confirmation message should appear once the changes to the Dashboard are saved successfully. + +__4. Save As New Dashboard__ + +The user can create an altogether new dashboard from an existing dashboard as a template. Make changes to your existing dashboard, and user can save it as a new dashboard. The existing dashboard search filters are retained. Click on the *settings* options in the top right corner of the dashboard and choose the option for *Save As New Dashboard.* + +{{< figure + default=true + src="img/esp-6.webp" + >}} + +A new dashboard should get created and should be listed under the dashboards list on the left side menu. + +__5. Set As Default Dashboard__ + +The user can choose which dashboard should be the default landing page on login, sort of a favourite or the most frequently used one. Only one dashboard can be set as a default one. Click on the *settings* options in the top right corner of the dashboard and choose the option for *Set As Default Dashboard.* + +{{< figure + default=true + src="img/esp-7.webp" + >}} + +__6. Delete Dashboard__ + +The user can delete the dashboard which is no longer needed. Apart from the system default dashboard which sort of serves as the template, rest of the user created dashboards can be deleted one by one. Click on the *settings* options in the top right corner of the dashboard and choose the option for *Delete Dashboard.* + +{{< figure + default=true + src="img/esp-8.webp" + >}} + +Try out this new feature on the [https://dashboard.insights.espressif.com](https://dashboard.insights.espressif.com) + +We are working on some more exciting features in the ESP Insights, stay tuned to hear more! diff --git a/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/img/esp-1.webp b/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/img/esp-1.webp new file mode 100644 index 000000000..87a4a4f02 Binary files /dev/null and b/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/img/esp-1.webp differ diff --git a/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/img/esp-2.webp b/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/img/esp-2.webp new file mode 100644 index 000000000..d757e003f Binary files /dev/null and b/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/img/esp-2.webp differ diff --git a/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/img/esp-3.webp b/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/img/esp-3.webp new file mode 100644 index 000000000..11196de7d Binary files /dev/null and b/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/img/esp-3.webp differ diff --git a/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/img/esp-4.webp b/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/img/esp-4.webp new file mode 100644 index 000000000..158837c04 Binary files /dev/null and b/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/img/esp-4.webp differ diff --git a/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/index.md b/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/index.md new file mode 100644 index 000000000..a160582c2 --- /dev/null +++ b/content/blog/esp-insights-group-analytics-with-dynamic-search-filters/index.md @@ -0,0 +1,66 @@ +--- +title: "ESP Insights: Group Analytics with Dynamic Search Filters" +date: 2022-08-08 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - adwait-patankar +tags: + - Espinsights + - Esp32 + - IoT + +--- +It’s been a few months, since we first introduced our Group Analytics feature in the ESP Insights. Group Analytics allows a wholistic view of your devices in the field, categorised or grouped either by their behavioural pattern viz. reporting certain type of crashes or reboots because of certain errors or even non-erroneous conditions. Devices could be even grouped at a very high level by their characteristics like the firmware application and the version they carry. + +The first version of Group Analytics however provided a limited set of pre-defined grouping options. Refer to the [blog](https://www.espressif.com/en/news/ESP_Insights_New_Features) for more details. + +## Dynamic Search Filters + +With lot of device data intelligence available for perusal, having pre-defined search filters and grouping options gave limited capabilities to the end users. + +The new release for [ESP Insights Dashboard](https://dashboard.insights.espressif.com), Group Analytics provides ability to search and group the devices on varied parameters. User is given an option to apply grouping filters on pretty much anything that is indexed and searchable in the database. Based on the selected filter type, suggestions for the search filter values are also made available. User can even filter for crash by particular register addresses or even crash backtrace address or log tags etc. + +{{< figure + default=true + src="img/esp-1.webp" + >}} + +Multiple search filters can be applied in tandem as well to get more fine grained results. The most frequently used filters are listed at the beginning. + +The filters types are available in a hierarchical fashion and are suggested as the user types in the input in the search filter text field. + +The event timeline has options to change the frequency of plotting to daily, weekly, monthly or even hourly. + +## Compact Event Stats + +The event stats are displayed at one glance and are updated for the selected group search filter. + +Vice versa, clicking on one of the items in the stats filter results in applying that particular event as search filter. + +{{< figure + default=true + src="img/esp-2.webp" + >}} + +Each individual widget section can be collapsed or opened to focus on particular sections. + +## Rich Date and Time Range Selector + +New release of ESP Insights comes with a rich widget for Date and Time selector allowing user with a more fine grained control over time window to be used on this analytics page. The user is also provided with some default quick date filters like “Today”, “Yesterday”, “Last 24 hours”, “Last 7 days”, “Last 30 days” and “Last 3 months”. Custom date picker allows user to select time as well. + +{{< figure + default=true + src="img/esp-3.webp" + >}} + +## Node listing and Node Report Correlation + +Based on the search filters and grouping, the actual devices (nodes) are listed at the bottom. The listed nodes provide navigational links to move to individual node report for event logs, metrics and variable values for the selected node. The search filters like the event type and time window parameters are carried forward to the node report page automatically. + +{{< figure + default=true + src="img/esp-4.webp" + >}} + +Try out the new Group Analytics and advanced searching capabilities by accessing on [ESP Insights Dashboard](https://dashboard.insights.espressif.com). diff --git a/content/blog/esp-insights-in-depth-device-metrics/img/esp-1.webp b/content/blog/esp-insights-in-depth-device-metrics/img/esp-1.webp new file mode 100644 index 000000000..977db6a6f Binary files /dev/null and b/content/blog/esp-insights-in-depth-device-metrics/img/esp-1.webp differ diff --git a/content/blog/esp-insights-in-depth-device-metrics/img/esp-2.webp b/content/blog/esp-insights-in-depth-device-metrics/img/esp-2.webp new file mode 100644 index 000000000..c81b7382d Binary files /dev/null and b/content/blog/esp-insights-in-depth-device-metrics/img/esp-2.webp differ diff --git a/content/blog/esp-insights-in-depth-device-metrics/img/esp-3.webp b/content/blog/esp-insights-in-depth-device-metrics/img/esp-3.webp new file mode 100644 index 000000000..8188db25f Binary files /dev/null and b/content/blog/esp-insights-in-depth-device-metrics/img/esp-3.webp differ diff --git a/content/blog/esp-insights-in-depth-device-metrics/img/esp-4.webp b/content/blog/esp-insights-in-depth-device-metrics/img/esp-4.webp new file mode 100644 index 000000000..621693a01 Binary files /dev/null and b/content/blog/esp-insights-in-depth-device-metrics/img/esp-4.webp differ diff --git a/content/blog/esp-insights-in-depth-device-metrics/index.md b/content/blog/esp-insights-in-depth-device-metrics/index.md new file mode 100644 index 000000000..d201275ef --- /dev/null +++ b/content/blog/esp-insights-in-depth-device-metrics/index.md @@ -0,0 +1,56 @@ +--- +title: "ESP Insights: In-depth device metrics" +date: 2022-04-28 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - adwait-patankar +tags: + - Esp32 + - IoT + - Espinsights + +--- +{{< figure + default=true + src="img/esp-1.webp" + >}} + +In the earlier version of the ESP Insights Dashboard users could check and analyse device reported metrics, for only up to the past 3 hours. + +We received developer feedback that they would like to look at the metrics within a particular time frame and most importantly in the time frame around an all important event being investigated viz. a crash or a reboot. + +In the latest version of ESP Insights Dashboard, a user can play around the metrics data and analyse the issue in more depth using more granular date and time. Using the zoom in feature, zero-in to a very narrow window. Any impacting events that may have an effect on the metrics data are also highlighted viz. a reboot event or a crash. + +## Date & Time Selector Widget + +Users can now select a particular day with a date picker widget and using the slider select the time span for which metrics are to be investigated. Data correlation with the event logs and the associated device metrics at that given point of time can be achieved in a much better way now. + +{{< figure + default=true + src="img/esp-2.webp" + >}} + +## Event Metric Correlation + +It is always better to check how a certain event occurrence impacts the metrics values reported by the device or vice-versa. For e.g. after an out of memory situation causing a crash or on reboot, the free heap size memory gets back to the expected baseline state + +{{< figure + default=true + src="img/esp-3.webp" + >}} + +Also on clicking on the vertical event bar, the details of the event (viz. timestamp and the reason and where the crash occurred) are now displayed. + +## Zoom In + +The plotted time series graph now also has the zoom-in capabilities to zero-in on the particular data points in the given time window. + +You may also use the time range selector at the top to fine-tune the timeframe. + +{{< figure + default=true + src="img/esp-4.webp" + >}} + +Try out the new detailed metrics insights by accessing and analysing the device metrics data on the [ESP Insights Dashboard](https://dashboard.insights.espressif.com). diff --git a/content/blog/esp-insights-playing-with-device-tags/img/esp-1.webp b/content/blog/esp-insights-playing-with-device-tags/img/esp-1.webp new file mode 100644 index 000000000..2bd68ec0b Binary files /dev/null and b/content/blog/esp-insights-playing-with-device-tags/img/esp-1.webp differ diff --git a/content/blog/esp-insights-playing-with-device-tags/img/esp-2.webp b/content/blog/esp-insights-playing-with-device-tags/img/esp-2.webp new file mode 100644 index 000000000..b5c6dbeb2 Binary files /dev/null and b/content/blog/esp-insights-playing-with-device-tags/img/esp-2.webp differ diff --git a/content/blog/esp-insights-playing-with-device-tags/img/esp-3.webp b/content/blog/esp-insights-playing-with-device-tags/img/esp-3.webp new file mode 100644 index 000000000..ab6392d71 Binary files /dev/null and b/content/blog/esp-insights-playing-with-device-tags/img/esp-3.webp differ diff --git a/content/blog/esp-insights-playing-with-device-tags/img/esp-4.webp b/content/blog/esp-insights-playing-with-device-tags/img/esp-4.webp new file mode 100644 index 000000000..fb578814c Binary files /dev/null and b/content/blog/esp-insights-playing-with-device-tags/img/esp-4.webp differ diff --git a/content/blog/esp-insights-playing-with-device-tags/img/esp-5.webp b/content/blog/esp-insights-playing-with-device-tags/img/esp-5.webp new file mode 100644 index 000000000..c8e3e7984 Binary files /dev/null and b/content/blog/esp-insights-playing-with-device-tags/img/esp-5.webp differ diff --git a/content/blog/esp-insights-playing-with-device-tags/index.md b/content/blog/esp-insights-playing-with-device-tags/index.md new file mode 100644 index 000000000..fe59ec7d2 --- /dev/null +++ b/content/blog/esp-insights-playing-with-device-tags/index.md @@ -0,0 +1,90 @@ +--- +title: "ESP Insights: Playing with Device Tags" +date: 2022-09-07 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - adwait-patankar +tags: + - Sign up + - Sign in + - Sign up + - Sign in + - Follow + - '' + - '' + - Espinsights + - Esp32 + - IoT + - Observability + - '' + - '' + - '' + - Follow + - '' + - Follow + - '' + +--- +In today’s world which is completely engulfed in social media, the notion of tags is not new. Most of the media publicly shared on the social network is tagged (or to be more accurate, hash-tagged) with something or the other. With that familiarity in mind, we thought of introducing the concept of tagging to the ESP devices, that should help users categorise or search their devices faster on the ESP Insights Dashboard. + +## What is tagging? + +A tag is essentially a label, that makes the object or thing being tagged easier to find or categorise. In the social media world it is called as hashtag that is applied to a post, image, video or rather any media content based on the information it carries or sometimes based on specific theme. For e.g. #summervibes #sunnyday + +## Device Tagging + +In IOT world too, how cool it would be to label your devices with such tags. The tag can be associated as a meta-data with the device and would certainly help in searching, categorising your devices in the field. We maintain tags as a combination of Name-Value pair to add a multi-dimensional categorization. + +For e.g. If user wants to tag the devices based on their location viz. City:Boston or within a home automation project say Location:Kitchen for a smart bulb in the kitchen and so on so forth. + +If the devices are to be categorised based on the firmware version viz. Version:v5.1 or based on their behaviour like infrequent crashing viz. Category:Crashing. + +The image below showcases how the device level tags (if applied) are enlisted on the node reports page below the stats section. + +{{< figure + default=true + src="img/esp-1.webp" + >}} + +Click on any of the listed tags, user is taken to the Group Analytics page with an automatic search filter applied for the the clicked tag name. All the devices carrying the selected tag are displayed in the nodes listing. + +{{< figure + default=true + src="img/esp-2.webp" + >}} + +As mentioned earlier, the users can also explicitly apply search filters based on node tags from the Group Analytics Dynamic Search Filters and list out device matching the search criteria. For e.g. Search all devices of type bulb. + +The *Property* input box also supports auto-suggest based on the available tags as applied to the devices of the logged-in user. The *Value* input box also supports auto-suggest based on the values already present for the selected tag property. + +{{< figure + default=true + src="img/esp-3.webp" + >}} + +## Tag Management + +Now that we know we know that the users can tag their own devices, let’s take a look at how to actually add tags to the devices from the ESP Insights Dashboard. At this moment, tags can only be applied one device (a.k.a node) at a time, by accessing the individual node details. User can reach to an individual node by selecting one of their nodes from the node list accessed either via “Nodes” option or a filtered node list from “Group Analytics” option. + +On the selected node, now the users should see a new tab called “__*Tags*__ ” along side the Node Report, Metrics and Variables tabs. + +{{< figure + default=true + src="img/esp-4.webp" + >}} + +The __*Tags*__ tab enlists all the existing tags. User is able to add or remove tags from this page. The tag is added or removed only for the selected node. + +User has to enter a combination of Tag Name and Tag Value. Both of these are case-sensitive and each input field has a restriction of 15 characters. + +{{< figure + default=true + src="img/esp-5.webp" + >}} + +There is a ‘Delete’ option available in front of the each listed tag. User can delete or disassociate one tag at a time. + +Stay tuned to get more on what we can achieve with the tagging feature especially with the search and grouping of devices based on the tags. + +Visit [https://dashboard.insights.espressif.com](https://dashboard.insights.espressif.com) to play around with tags on your devices. diff --git a/content/blog/esp-insights-whats-new/img/esp-1.webp b/content/blog/esp-insights-whats-new/img/esp-1.webp new file mode 100644 index 000000000..5a9b3f818 Binary files /dev/null and b/content/blog/esp-insights-whats-new/img/esp-1.webp differ diff --git a/content/blog/esp-insights-whats-new/img/esp-2.webp b/content/blog/esp-insights-whats-new/img/esp-2.webp new file mode 100644 index 000000000..0fc83cfca Binary files /dev/null and b/content/blog/esp-insights-whats-new/img/esp-2.webp differ diff --git a/content/blog/esp-insights-whats-new/img/esp-3.webp b/content/blog/esp-insights-whats-new/img/esp-3.webp new file mode 100644 index 000000000..d3351125e Binary files /dev/null and b/content/blog/esp-insights-whats-new/img/esp-3.webp differ diff --git a/content/blog/esp-insights-whats-new/img/esp-4.webp b/content/blog/esp-insights-whats-new/img/esp-4.webp new file mode 100644 index 000000000..7d368663f Binary files /dev/null and b/content/blog/esp-insights-whats-new/img/esp-4.webp differ diff --git a/content/blog/esp-insights-whats-new/img/esp-5.webp b/content/blog/esp-insights-whats-new/img/esp-5.webp new file mode 100644 index 000000000..b8ac0e992 Binary files /dev/null and b/content/blog/esp-insights-whats-new/img/esp-5.webp differ diff --git a/content/blog/esp-insights-whats-new/img/esp-6.webp b/content/blog/esp-insights-whats-new/img/esp-6.webp new file mode 100644 index 000000000..e7360f023 Binary files /dev/null and b/content/blog/esp-insights-whats-new/img/esp-6.webp differ diff --git a/content/blog/esp-insights-whats-new/index.md b/content/blog/esp-insights-whats-new/index.md new file mode 100644 index 000000000..c772c083b --- /dev/null +++ b/content/blog/esp-insights-whats-new/index.md @@ -0,0 +1,101 @@ +--- +title: "ESP Insights — What’s new" +date: 2022-01-26 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - adwait-patankar +tags: + - Espinsights + - Esp32 + - IoT + - Observability + +--- +{{< figure + default=true + src="img/esp-1.webp" + >}} + +ESP Insights was released in its Beta in July 2021 and is being actively used by the ESP developer community. You can read more about it in the blog post [Introducing ESP Insights](/introducing-esp-insights-7d85a1383d21). With this new version of the ESP Insights service, we introduce following new features, plus a few UI enhancements and stability fixes. + +- Support for HTTPs/REST API based device communication +- Group Analytics + +Let’s look at these new features in more detail. + +## HTTPS Transport + +When we launched ESP Insights, we borrowed some concepts from ESP RainMaker, especially the concept of “Claiming” and used MQTT as the transport so that we could leverage a single connection for RainMaker and Insights. However, for applications that only want to use ESP Insights without ESP RainMaker, the claiming concept is an unnecessary step. + +We now support HTTPs/REST API based Insights communication as well. Instead of using unique X.509 key-certificate pairs, a single HTTP API key can now be used by multiple nodes , thereby simplifying the setup and management of devices. + +(Note that given the always-on connectivity of MQTT, some of the features that we introduce in the future may be more optimised for MQTT based transport) + +## Enabling Insights with HTTPS + +Enabling ESP Insights in your firmware is now as easy as adding the following lines of code in your application: + +This code should get your started, and your application can start reporting ESP Insights data to the Insights cloud. As you may have noticed, all you will need is the unique ESP_INSIGHTS_AUTH_KEY to be embedded in your firmware. Here is how you can obtain the ESP Insights Auth Key: + +- Sign up or Sign in on [ESP Insights Dashboard](https://dashboard.insights.espressif.com/) +- Visit [Manage Auth Keys](https://dashboard.insights.espressif.com/home/manage-auth-keys) and generate an Auth Key +- Copy the Auth Key to your firmware + +Once device boots up look for following logs that contains the Node ID. You may use this node id for monitoring node logs, crashes, reboots, metrics, and variables through the ESP Insights Dashboard. + +``` +I (4161) esp_insights: ========================================= +I (4171) esp_insights: Insights enabled for Node ID 246F2880371C +I (4181) esp_insights: ========================================= +``` + +For more details please check our [getting started guide](https://github.com/espressif/esp-insights/tree/main/examples). + +## Group Analytics + +So far ESP Insights supported diagnostics at a node level, reporting any abnormal events as well as metrics and point in time variable values for individual nodes. + +The latest version of ESP Insights introduces group analytics, that provides insights into how groups of your devices are performing. You may group devices based on the Project, Project Versions or Event categories. + +- Compare the firmware insights across different versions of a project +- A very high-level insights starting at a project level and can be drilled down to an event category + +{{< figure + default=true + src="img/esp-2.webp" + >}} + +A few examples of group based data that you can observe: + +- Counts grouped by events (for e.g., Errors) for a particular project and version, in a selected time interval. You can change the interval to hour or aggregate to week or a month interval + +{{< figure + default=true + src="img/esp-3.webp" + >}} + +- Distribution of event counts (for e.g., crash counts) for a group in a selected time interval. + +{{< figure + default=true + src="img/esp-4.webp" + >}} + +- Distribution of event (for e.g. Reboot reason) counts for a group in a selected time interval. You can drill down further on the reboot reason and get to the nodes which are reporting the particular event. + +{{< figure + default=true + src="img/esp-5.webp" + >}} + +- Count of unique nodes which are reporting certain events (reboots / errors / warnings) in a selected time interval + +{{< figure + default=true + src="img/esp-6.webp" + >}} + +- List of top nodes having the most number of events and can be drilled down to category level + +We are working on some more exciting features on top of ESP Insights, stay tuned to hear more! diff --git a/content/blog/esp-privilege-separation-a-case-study/img/esp-1.webp b/content/blog/esp-privilege-separation-a-case-study/img/esp-1.webp new file mode 100644 index 000000000..c44a20509 Binary files /dev/null and b/content/blog/esp-privilege-separation-a-case-study/img/esp-1.webp differ diff --git a/content/blog/esp-privilege-separation-a-case-study/img/esp-2.webp b/content/blog/esp-privilege-separation-a-case-study/img/esp-2.webp new file mode 100644 index 000000000..43b8947d7 Binary files /dev/null and b/content/blog/esp-privilege-separation-a-case-study/img/esp-2.webp differ diff --git a/content/blog/esp-privilege-separation-a-case-study/img/esp-3.webp b/content/blog/esp-privilege-separation-a-case-study/img/esp-3.webp new file mode 100644 index 000000000..e907c5a0d Binary files /dev/null and b/content/blog/esp-privilege-separation-a-case-study/img/esp-3.webp differ diff --git a/content/blog/esp-privilege-separation-a-case-study/index.md b/content/blog/esp-privilege-separation-a-case-study/index.md new file mode 100644 index 000000000..7a3e1f5a0 --- /dev/null +++ b/content/blog/esp-privilege-separation-a-case-study/index.md @@ -0,0 +1,122 @@ +--- +title: "ESP Privilege Separation — A Case Study" +date: 2022-07-05 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - shubham-kulkarni +tags: + - IoT + - Security + - Embedded Systems + +--- +In the [previous post](/introducing-esp-privilege-separation-aa57a02c36e4), we introduced ESP Privilege Separation, a framework to achieve “user-kernel” separation and isolation on ESP32-C3 SoC. There are multiple ways of applying this framework to your project. This post presents a case study of integrating ESP-RainMaker, a real-world IoT application, with the ESP Privilege Separation framework. + +ESP-RainMaker offers a complete ecosystem to build connected AIoT products. Please refer to [this link](https://rainmaker.espressif.com) for more details. + +## Integrating ESP-RainMaker with ESP Privilege Separation + +``` +rmaker_switch +| — CMakeLists.txt +| — partitions.csv +| — protected_app/ +| | — main/ +| | — CMakeLists.txt +| | — protected_main.c +| — user_app/ + | — main/ + | | — CMakeLists.txt + | | — user_code.c + | — user_config.h + | — CMakeLists.txt +``` + +Please refer to the “[Getting Started](https://docs.espressif.com/projects/esp-privilege-separation/en/latest/esp32c3/getting-started.html#directory-structure)” documentation for a detailed explanation regarding the directory structure. + +__2. Placement of the ESP-RainMaker agent__ Based on the system call implementation, we have the following options to place the ESP-RainMaker agent: + +- __Option1: ESP-RainMaker agent in the user application__ +- __Option2: ESP-RainMaker agent in the protected application__ + +*In this post, we will choose the second approach and we will also discuss certain implications in subsequent sections.* + +__3. Component split between protected and user apps__ + +{{< figure + default=true + src="img/esp-1.webp" + >}} + +The above diagram shows the overview of component split between protected and user apps. All the libraries like ESP-RainMaker, TLS stack, etc. are placed in the protected app and hence it does the bulk of the heavy lifting. User app is a lightweight application consisting of business logic. + +The build system generates *app_libs_and_objs.json* file in the build directory, which represents all the libraries, its memory footprint, and corresponding object files included in respective applications. + +__4. System call implementation__ As we have decided to place the ESP-RainMaker agent in the protected app, we will have to implement system calls for all the public APIs provided by ESP-RainMaker. The ESP Privilege Separation’s easy extensibility features allow you to add application-specific custom system calls, which is documented [here](https://docs.espressif.com/projects/esp-privilege-separation/en/latest/esp32c3/technical-details/system-call.html#adding-custom-system-call), and we shall use the same feature here. + +For example, esp_rmaker_start()* *is one of the APIs exposed by ESP-RainMaker. After we move ESP-RainMaker in the protected app, all the calls to esp_rmaker_start() in the user app’s code will go through the system call interface. The following diagram shows the call trace when esp_rmaker_start() is called from the user app: + +{{< figure + default=true + src="img/esp-2.webp" + >}} + +We can enable this by adding a custom system call as shown below: + +- Firstly, we need to implement a system call wrapper in the user app. The name of this wrapper should have usr_ prefix prepended to the system call name. In this wrapper, we use EXECUTE_SYSCALL macro to generate a synchronous exception and land into protected space. __NR_esp_rmaker_start is the macro for a system call number that will be generated by the build system. + +```c +esp_err_t usr_esp_rmaker_start(void) +{ + return EXECUTE_SYSCALL(__NR_esp_rmaker_start); +} +``` + +__NOTE:__ The build system maps *esp_rmaker_start* to *usr_esp_rmaker_start* . This mechanism enables user app to perform a system call by calling *esp_rmaker_start*. + +- Now we need to implement the protected app system call handler. This handler is called after a synchronous exception is generated. Protected handler calls the actual API and returns error code to the user space. + +```c +esp_err_t sys_esp_rmaker_start(void) +{ + return esp_rmaker_start(); +} +``` + +- To bind the user and protected system call implementation, we create a custom system call table in the example directory ([examples/ rmaker_switch/components/rmaker_syscall/rmaker_syscall.tbl](https://github.com/espressif/esp-privilege-separation/blob/master/examples/rmaker_switch/components/rmaker_syscall/rmaker_syscall.tbl)) . We need to define four attributes in the system call table:__1.__ A unique system call number.__2.__ A common/custom attribute indicator for a system call. Please refer to the [documentation](https://docs.espressif.com/projects/esp-privilege-separation/en/latest/esp32c3/technical-details/system-call.html#assign-new-system-call-number) for more details.__3.__ System call name.__4.__ Protected system call handler name. + +```c +1289 common esp_rmaker_start sys_esp_rmaker_start +``` + +This system call table file is processed by the build system to create the __NR_esp_rmaker_start macro that thus binds the user-app’s EXECUTE_SYSCALL call to the protected app’s sys_esp_rmaker_start. + +*The above example is just for demonstration purpose. Please refer to *[*rmaker_syscall*](https://github.com/espressif/esp-privilege-separation/tree/master/examples/rmaker_switch/components/rmaker_syscall)* component for actual implementation.* + +__5. User app implementation__ After implementing these system calls, we can use almost all the public APIs provided by ESP-RainMaker in the user app. We have implemented an IoT switch application using the services added in the protected app. The code for user app is available on the GitHub [repository](https://github.com/espressif/esp-privilege-separation/blob/master/examples/rmaker_switch/user_app/main/user_code.c). + +## Comparing ESP Privilege Separation application with a traditional application + +{{< figure + default=true + src="img/esp-3.webp" + >}} + +From the above numbers, we can observe that the total binary size of the privilege separation application is the same as that of a traditional application. + +At the expense of little static memory usage, this framework allows us to decouple the monolithic firmware into two separate and isolated applications. + +## Running the application on ESP32-C3 SoC + +After the user app startup code registers heap and console, it hands over the control to user_main. user_main function initializes the ESP-RainMaker agent, creates a RainMaker device, and starts the ESP-RainMaker agent in the protected app through the system call interface. The protected app manages Wi-Fi connection and provides all the RainMaker services. + +__2. ESP-RainMaker cloud connection:__ Once Wi-Fi is successfully provisioned and connected, the protected app establishes a TLS connection with the RainMaker cloud. Now our ESP32-C3 device is ready to receive events from the cloud. The protected app receives all the cloud events and triggers user space callbacks based on the configuration. + +## Future Scope + +## Summary + +The ESP-RainMaker switch example is available in the [__ESP Privilege Separation Repository__ ](https://github.com/espressif/esp-privilege-separation/tree/master/examples/rmaker_switch). Please give it a try and feel free to report any issues or feedback by raising an issue tracker on the GitHub repository. + +{{< youtube nBPE36b5zCo >}} diff --git a/content/blog/esp-rainmaker-and-serverless/img/esp-1.webp b/content/blog/esp-rainmaker-and-serverless/img/esp-1.webp new file mode 100644 index 000000000..043f04261 Binary files /dev/null and b/content/blog/esp-rainmaker-and-serverless/img/esp-1.webp differ diff --git a/content/blog/esp-rainmaker-and-serverless/img/esp-2.webp b/content/blog/esp-rainmaker-and-serverless/img/esp-2.webp new file mode 100644 index 000000000..22396eabe Binary files /dev/null and b/content/blog/esp-rainmaker-and-serverless/img/esp-2.webp differ diff --git a/content/blog/esp-rainmaker-and-serverless/index.md b/content/blog/esp-rainmaker-and-serverless/index.md new file mode 100644 index 000000000..864b72bc9 --- /dev/null +++ b/content/blog/esp-rainmaker-and-serverless/index.md @@ -0,0 +1,78 @@ +--- +title: "ESP RainMaker and Serverless" +date: 2020-05-26 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - amey-inamdar +tags: + - Esp32 + - Esp32 S2 + - Rainmaker + - Cloud Architecture + - Serverless + +--- +{{< figure + default=true + src="img/esp-1.webp" + >}} + +Recently, we launched ESP RainMaker, that provides a way for developers to build devices with readymade cloud, phone apps and voice assistant support. In this context, designing and implementing an IoT cloud service was a significant part of the efforts and we wanted to ensure that it met some of the key criteria that we had laid out. + +__Security__ — We gave utmost importance to security to ensure that device and the user data is secure, and unintentional access to the data is prevented. The authentication, authorization and access control were to be supported using standard security protocols. + +__Time-to-market__ — It was important for us to spend time wisely on innovating on the features that we like to be part of our solution. So we were ready to use a suitable platform instead of reinventing the wheel. + +__Scalability__ — Scalability was an important consideration for us to ensure that the platform was well suited for large number of devices and varied workloads from different device classes that developers will build. + +__Cost__ — Given that the number of devices and their workload is varied, the choice of our architecture and our implementation will provide the service at an optimised cost structure. + +In addition to these measurable key criteria, we wanted to follow an important design principle for ESP RainMaker — to be independent of the application protocol between the devices and other services by supporting __Runtime Reconfiguration Pattern__ . We wanted to ensure that the cloud architecture that we select can provide good framework for this type of design. + +__Runtime Reconfiguration Pattern__ — A static device configuration in the cloud has up till now been the norm for most applications. With ESP RainMaker, devices could be dynamically updated with the latest firmware and their cloud bindings could be reconfigured. This opens the possibility to continue to evolve (a) the devices, to provide new services after they are deployed and, (b) other services, to consume the device data and interact with the devices. + +Defining these criteria helped us to evaluate available architectures or paradigms and select the one that is a closest-fit for our criteria. + +{{< figure + default=true + src="img/esp-2.webp" + >}} + +The first three architectures required not only building the application, but also to maintain the infrastructure at various level. While elastic containers provide some level of scalability, it too required building and maintaining a distributed system with its own nuances. That’s where the Serverless deployment stood out and it was certainly worth a consideration. + +## What is Serverless? + +Serverless does not mean that there is no server. It hides the management of the hardware and software infrastructure and provides usable services for the application. The application is also designed to not run on a specific server instance, but is event driven and can make use of the available services. + +## FaaS — Function As A Service + +In addition to managed services, the Serverless architecture offers “FaaS (Function-as-a-Service)” runtime that allows developers to write code snippets that can work on the data and interact with available services. Developers can use their familiar programming languages (such as Python, node.js and Go) with SDKs to interact with services. FaaS is also charged based on number of executions and time and memory consumption of the runtime. + +The cloud infrastructure provides a “*Rule Engine*” that facilitates the orchestration of the data flow through services. The FaaS runtime can be set to trigger based on various conditions in the system. Together Rule Engine and FaaS runtime can be used to build the business logic of the application. + +The typical available Serverless services that are meaningful in the context of device connectivity include an MQTT broker, SQL and no-SQL database services, a binary blob/object storage, user management service, web API gateway service, message queuing service and stream analytics service amongst the few other Serverless services. + +While ESP RainMaker is based on AWS Serverless platform, most of the other leading cloud service providers including Google Cloud Platform, Microsoft Azure Cloud, Tencent Cloud and Alibaba Cloud provide Serverless platform offering that is more or less similar. ESP-RainMaker could also be deployed on these platforms. + +## ESP RainMaker and Serverless — Our Experience + +Let’s first evaluate how Serverless fares for the parameters that we have considered to be important. + +__Security__ — The Serverless architecture provides unified user management and RBAC (role-based access control) through security policies across the services. These roles and policies can be associated with multiple services at a very fine granularity. This is very useful as when the device data enters the system, when a user operation is performed, the context flows along with data across the services ensuring appropriate permission control at each stage. Devices get to choose a strong authentication with the IoT cloud service (e.g. TLS based mutual authentication). There are also some security specific services available for common requirements such as a web API gateway firewall that would protect from typical DoS attacks. With this infrastructure, security becomes an integral part of the design of the application and not an afterthought. + +__Time-to-Market__ — This is where Serverless provides a very strong advantage. The services’ availability, scalability and reliability is guaranteed and constraints are documented clearly. This provides a distributed platform to the application where the complexity of the distributed system is abstracted from the application. The Serverless application design pattern is however non-orthodox where the application is broken into individual segments responding to various system events and inter-service orchestration is a part of the application. However this, in-fact, leads to an easier to develop and maintain architecture compared to the monolithic architecture. There is no traditional dev-ops involved. This all greatly reduces time-to-market and makes the maintenance of the system easier. + +__Scalability__ — With the distributed nature of the services abstracted out and the availability of configuration to improve service response, the application achieves inherent scalability upto a large extent. However it’s also worthwhile to emphasise here that use of the Serverless architecture does not by default guarantee scalability. The data and workflows have to be defined considering the known limitations of individual services. + +__Cost__ — While the cost of services vary from cloud vendor to cloud vendor, the basic device connectivity, messaging service pricing is quite low in general. However here too, choice of the architecture and the services used, can impact the actual cost of cloud usage under the same workload. It requires a continuous analysis and optimisation as a part of development process. With ESP RainMaker running on AWS Serverless infrastructure, we can maintain the cost of an always-connected device with a few messages per day to be within a few cents per device per year. While there are greater savings for indirect cost (such as engineering and maintenance), even direct cost is quite attractive and linear scaling as expected beating our initial apprehension. + +__Runtime Reconfiguration Pattern__ — The Serverless framework with its availability of messaging, compute and storage services provided a good platform to design ESP RainMaker to meet its Runtime Reconfiguration requirement. In the Runtime Reconfiguration requirement, the devices and other services can use the cloud as a conduit: the devices can dynamically self describe their characteristics and the services can render themselves with the available data in an efficient way. + +Serverless has proven to be a great platform for us for ESP RainMaker to deliver a feature-rich yet cost-effective (just like our hardware :-) ) device cloud platform. This gives us an ample opportunity to innovate further in terms of features that will make developers’ life easy for building and maintaining connected devices. + +However this is also an important learning that Serverless is not a silver bullet. The application needs to be designed carefully, security configuration needs to be well thought through and service features need to be chosen to ensure low cost of operation. Also, application development and debugging is quite different than traditional model. But still the advantages greatly outweigh the efforts. + +ESP-Rainmaker is designed for Makers to reduce the complexity of connecting their devices to the web and to provide a ready-to-use phone apps, so that Makers can focus on building their devices instead of reinventing the wheel. We would love to see your devices connecting to ESP RainMaker. + +Let’s Make the world better! diff --git a/content/blog/esp-rainmaker-now-in-arduino/img/esp-1.webp b/content/blog/esp-rainmaker-now-in-arduino/img/esp-1.webp new file mode 100644 index 000000000..2eb4c89a7 Binary files /dev/null and b/content/blog/esp-rainmaker-now-in-arduino/img/esp-1.webp differ diff --git a/content/blog/esp-rainmaker-now-in-arduino/img/esp-2.webp b/content/blog/esp-rainmaker-now-in-arduino/img/esp-2.webp new file mode 100644 index 000000000..315c99877 Binary files /dev/null and b/content/blog/esp-rainmaker-now-in-arduino/img/esp-2.webp differ diff --git a/content/blog/esp-rainmaker-now-in-arduino/index.md b/content/blog/esp-rainmaker-now-in-arduino/index.md new file mode 100644 index 000000000..52c94df88 --- /dev/null +++ b/content/blog/esp-rainmaker-now-in-arduino/index.md @@ -0,0 +1,132 @@ +--- +title: "ESP RainMaker now in Arduino" +date: 2021-06-14 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - piyush-shah +tags: + - Esp32 + - Rainmaker + - Espressif + +--- +{{< figure + default=true + src="img/esp-1.webp" + >}} + +Since its launch in April 2020, we have been making quite some improvements to [ESP RainMaker](https://rainmaker.espressif.com/), mostly around the feature set. Along with that, we have also been making efforts to make developer on-boarding easier. The [ESP IDF Windows Installer](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/windows-setup.html#esp-idf-tools-installer) and the [Eclipse](https://github.com/espressif/idf-eclipse-plugin#installing-idf-plugin-using-update-site-url) and [VSCode](https://github.com/espressif/vscode-esp-idf-extension/blob/master/docs/tutorial/install.md) integrations especially have been useful for a lot of developers. One common request we still kept getting was support for Arduino, since getting started with it is much more convenient for many developers and it is also easier to migrate from other chips/platforms since the IDE and code structure is familiar. + +So, here it is. The support for ESP RainMaker in Arduino is now live. + +## Overview + +A sample sketch for a [switch](https://github.com/espressif/arduino-esp32/tree/master/libraries/RainMaker/examples/RMakerSwitch) has been included. Let’s quickly look at the code that enables this. + +```c +//GPIO for switch relay +static int gpio_switch = 16; + +// The framework provides some standard device types like switch, lightbulb, +// fan, temperature-sensor. You may add your own as well. +static Switch my_switch("Switch", &gpio_switch); + +void setup() +{ + // Create a RainMaker Node + Node my_node = RMaker.initNode("ESP RainMaker Node"); + + //Add the switch device to the node + my_node.addDevice(my_switch); + + // Add processing callback to the switch (This is what will get called when + // the state of the switch is updated using the phone-app or voice-assistants + my_switch.addCb(write_callback); + + // Enable RainMaker features to be supported (we enable Schedules and OTA here) + RMaker.enableOTA(OTA_USING_PARAMS); + RMaker.enableTZService(); + RMaker.enableSchedule(); + RMaker.start(); + + // Hand-over the control for Wi-Fi Provisioning. If a Wi-Fi network is not yet configured, + // this will start the provisioning process, else it will connect to the Wi-Fi network + WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM, + WIFI_PROV_SECURITY_1, pop, service_name); +} +``` + +With the above few lines of simple code, our fully functional smart switch is ready. The switch can be controlled with the [Android](https://play.google.com/store/apps/details?id=com.espressif.rainmaker) and [iOS](https://apps.apple.com/app/esp-rainmaker/id1497491540) applications, as well as Alexa and Google Voice Assistant skills. + +When we execute this code: + +- The device will first check if a Wi-Fi network is configured. If the network is not configured, it will launch the provisioning process. The device can then be configured using the phone apps mentioned above. +- If Wi-Fi configuration is found, it will connect to the configured network. +- Once connected, it will connect to the RainMaker cloud, looking for commands to modify its parameter (switch state in this case). +- The device will also look for commands on the local Wi-Fi network. +- When somebody changes the switch state using phone apps or voice integrations, the *write_callback()* gets called. This is then implemented as: + +```c +void write_callback(Device *device, Param *param, const param_val_t val, void *priv_data, write_ctx_t *ctx) +{ + const char *param_name = param->getParamName(); + + if(strcmp(param_name, "Power") == 0) { + switch_state = val.val.b; + (switch_state == false) ? digitalWrite(gpio_switch, LOW) : digitalWrite(gpio_switch, HIGH); + param->updateAndReport(val); + } +} +``` + +The function takes the new switch output value and + +- updates in our internal state, +- calls the driver to update its GPIO state +- reports back to the cloud the new state + +There, that’s a fully functional Smart Switch in action. A few common device types are already supported in the data model (bulb, fan, switch), but you can add yours too. + +## Getting Started + +Before you even get started, a few points to note + +- For using RainMaker, you first have to get started with the [ESP32 support in Arduino](https://github.com/espressif/arduino-esp32). +- RainMaker support is not yet part of a stable esp32-arduino release. So we will use the master branch of the [ESP32 Arduino](https://github.com/espressif/arduino-esp32) repository. We will update here and elsewhere once this support is available in a stable release. +- Currently, only ESP32 is supported. Support for ESP32-S and ESP32-C series is coming soon. + +Once your Arduino is set-up with the ESP32 support, follow these steps + +- Board: “ESP32 Dev Module” +- Flash Size: “4MB” +- Partition Scheme: “RainMaker” +- Core Debug Level: “Info” +- Port: Choose the appropriate ESP32 port as per your Host platform from the list. By connecting/disconnecting your ESP32 board, you can find out the port number. + +This is the complete list for reference: + +{{< figure + default=true + src="img/esp-2.webp" + >}} + +2. Now, go to File -> Examples -> Examples for ESP32 Dev Module -> ESP RainMaker -> RMakerSwitch + +3. Upload the Sketch onto your ESP32 board by clicking on the Upload button in the IDE, or going to Sketch -> Upload + +4. Go to Tools -> Serial Monitor. Choose 115200 as Baud. If you do not see anything in the monitor window, reset your board (using the RST button). + +5. Download the [ESP RainMaker phone app](https://rainmaker.espressif.com/docs/quick-links.html#phone-apps), sign-up or sign-in and you are ready to go. + +6. Follow the instructions in the Serial Monitor to add the switch from the RainMaker app. (If you do not see the instructions, double check the “Core Debug Level: Info” option under Tools) + +Any control from the phone app should now reflect on the device and any change on the device (by pressing the BOOT button) should reflect in the phone app. + +> You can press and hold the BOOT button for more than 3 seconds and then release for Resetting Wi-Fi, and for more than 10 seconds to Reset to Factory defaults. + +Please check out [here](https://rainmaker.espressif.com/) to understand more about ESP RainMaker. Even though all the [RainMaker APIs](https://docs.espressif.com/projects/esp-rainmaker/en/latest/c-api-reference/index.html) are expected to work seamlessly with Arduino, we have provided some simplified APIs to suit typical Arduino codes, as you can see [here](https://github.com/espressif/arduino-esp32/tree/master/libraries/RainMaker#documentation). + +John Macrae is active in our ESP32 maker community and he had created [this video](https://www.youtube.com/watch?v=g-Mw0-lzxdg) when Arduino support was launched. His [newer video](https://www.youtube.com/watch?v=eYVtHuLk008) demonstrates the improvements introduced recently and also shows how to build a custom device. + +Hope you enjoy RainMaker, have fun hacking! diff --git a/content/blog/esp-rainmaker/img/esp-1.webp b/content/blog/esp-rainmaker/img/esp-1.webp new file mode 100644 index 000000000..617325f83 Binary files /dev/null and b/content/blog/esp-rainmaker/img/esp-1.webp differ diff --git a/content/blog/esp-rainmaker/index.md b/content/blog/esp-rainmaker/index.md new file mode 100644 index 000000000..581f44421 --- /dev/null +++ b/content/blog/esp-rainmaker/index.md @@ -0,0 +1,29 @@ +--- +title: "ESP RainMaker" +date: 2020-12-06 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Rainmaker + - Espressif + - Esp32 + +--- +{{< figure + default=true + src="img/esp-1.webp" + >}} + +ESP RainMaker is a collection of [device-agent SDK](https://github.com/espressif/esp-rainmaker), a transparent cloud application and [iOS](https://apps.apple.com/us/app/esp-rainmaker/id1497491540)/[Android](https://play.google.com/store/apps/details?id=com.espressif.rainmaker&hl=en_IN) phone apps. This lets developers write the firmware and instantaneously interact with it through the phone-apps, or through voice assistants, without writing a single line of code in the cloud or the phone-applications. + +The various articles for RainMaker are available here: + +- [Introducing ESP RainMaker](/blog/introducing-esp-rainmaker) +- [RainMaker Projects: Firmware Considerations](/blog/rainmaker-projects-firmware-considerations) +- [OTA Firmware Upgrades with ESP RainMaker](/blog/ota-firmware-upgrades-with-esp-rainmaker) +- [ESP RainMaker and Serverless](/blog/esp-rainmaker-and-serverless) +- [3rd Party Integrations in ESP RainMaker](/blog/3rd-party-integrations-in-esp-rainmaker) +- [ESP RainMaker now in Arduino](/blog/esp-rainmaker-now-in-arduino) +- [New Features in ESP RainMaker](/blog/new-features-in-esp-rainmaker) diff --git a/content/blog/esp-usb-bridge/img/esp-1.webp b/content/blog/esp-usb-bridge/img/esp-1.webp new file mode 100644 index 000000000..4564ccdc6 Binary files /dev/null and b/content/blog/esp-usb-bridge/img/esp-1.webp differ diff --git a/content/blog/esp-usb-bridge/index.md b/content/blog/esp-usb-bridge/index.md new file mode 100644 index 000000000..575fb8634 --- /dev/null +++ b/content/blog/esp-usb-bridge/index.md @@ -0,0 +1,28 @@ +--- +title: "ESP USB Bridge" +date: 2022-04-13 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - roland-dobai +tags: + - Esp32 S2 + - USB + - Bridge + - Espressif + +--- +The [ESP USB Bridge](https://github.com/espressif/esp-usb-bridge) is an [ESP-IDF](https://github.com/espressif/esp-idf) project utilizing an ESP32-S2 (or optionally, an ESP32-S3) chip to create a bridge between a computer and a target microcontroller. It can serve as a replacement for USB-to-UART chips (e.g. CP210x). + +{{< figure + default=true + src="img/esp-1.webp" + >}} + +ESP USB Bridge creates a composite USB device accessible from the computer when they are connected through a USB cable. The main features are the following. + +- *Serial bridge*: The developer can run [esptool](https://github.com/espressif/esptool) or connect a terminal program to the serial port provided by the USB CDC. The communication is transferred in both directions between the computer and the target microcontroller through the ESP USB bridge. +- *JTAG bridge*: [openocd-esp32](https://github.com/espressif/openocd-esp32) can be run on the computer which will connect to the ESP USB Bridge. The ESP32-S2 acts again as a bridge between the computer and the target microcontroller, and transfers JTAG communication between them in both directions. +- *Mass storage device*: USB Mass storage device is created which can be accessed by a file explorer of the computer. Binaries in UF2 format can be copied to this disk and the ESP32-S2 will use them to flash the target microcontroller. Currently ESP USB Bridge is capable of flashing various Espressif microcontrollers. + +More information about the project can be found on [Github](https://github.com/espressif/esp-usb-bridge). We hope it will be useful for the community. It is licensed under the Apache License Version 2.0. We welcome issue reports, feature requests and contributions on the project’s [Github page](https://github.com/espressif/esp-usb-bridge). diff --git a/content/blog/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible/img/announcing-1.webp b/content/blog/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible/img/announcing-1.webp new file mode 100644 index 000000000..a308342b2 Binary files /dev/null and b/content/blog/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible/img/announcing-1.webp differ diff --git a/content/blog/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible/img/announcing-2.webp b/content/blog/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible/img/announcing-2.webp new file mode 100644 index 000000000..cdad501f7 Binary files /dev/null and b/content/blog/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible/img/announcing-2.webp differ diff --git a/content/blog/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible/img/announcing-3.webp b/content/blog/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible/img/announcing-3.webp new file mode 100644 index 000000000..304e44e02 Binary files /dev/null and b/content/blog/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible/img/announcing-3.webp differ diff --git a/content/blog/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible/index.md b/content/blog/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible/index.md new file mode 100644 index 000000000..55be8dd4c --- /dev/null +++ b/content/blog/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible/index.md @@ -0,0 +1,65 @@ +--- +title: "Announcing ESP ZeroCode ExL Module" +date: 2023-11-12 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - amey-inamdar +tags: + - Esp32 + - IoT + - Matter + - Espressif + - AWS + +--- +*Announcing ESP ZeroCode ExL powered by AWS IoT ExpressLink — Simplifying Matter-compatible Cloud-connected Devices* + +As a part of our efforts to make the development of Matter protocol-enabled devices easy, Espressif [announced](https://www.espressif.com/en/news/ESP-ZeroCode_Modules) ESP ZeroCode modules and ESP ZeroCode Console earlier this year. These ESP ZeroCode modules are well-suited for Matter connectivity for simple devices such as lighting fixtures, switches, sockets, blind controllers, and sensors. You can use ESP ZeroCode Console to configure, evaluate, and order ESP ZeroCode modules. + +In continuation of these efforts, Espressif, in collaboration with Amazon Web Services (AWS), is glad to announce the ESP ZeroCode ExL connectivity module powered by [AWS IoT ExpressLink](https://aws.amazon.com/iot-expresslink/). This module is based on Espressif’s ESP32-C6 system-on-chip (SoC) providing Wi-Fi 6, Bluetooth 5 (LE), and 802.15.4 connectivity. It contains built-in Matter and cloud connectivity software providing a simple [AT commands-based serial interface](https://docs.aws.amazon.com/iot-expresslink/latest/programmersguide/elpg.html) to the host. With such a simplified integration, you can build Matter-compliant, secure IoT devices that connect to AWS IoT Core and other AWS services. + +{{< figure + default=true + src="img/announcing-1.webp" + >}} + +## Why ESP ZeroCode ExL? + +{{< figure + default=true + src="img/announcing-2.webp" + >}} + +- When device makers want to build cloud-connected devices, they have to write and maintain a significant amount of software. It also needs a deep understanding of connectivity, security, OTA upgrades, and device management. +- The addition of the Matter protocol adds to this making the development, maintenance, and certification even more complex. The ESP ZeroCode ExL module moves this important yet undifferentiated workload onto a separate module, allowing device makers to easily build the hardware interfacing and business logic onto the host MCU. +- On the other hand, AWS IoT ExpressLink is designed and built with the best security and cloud connectivity practices and the Espressif implementation went through rigorous security and functionality testing. + +The ESP ZeroCode ExL firmware by Espressif extends the AWS IoT ExpressLink with Matter protocol implementation. This significantly reduces the efforts and time required for building and maintaining connected products by device makers. + +## Target Devices + +The Matter 1.2 specification adds support for new device types including appliances like refrigerators, laundry washers, air purifiers, and air conditioners. Additionally, some of the other device types are already supported such as dimmers, touch switches, and thermostats. Many of these types of devices have a dedicated MCU responsible for building the device logic. Also, cloud connectivity is a major feature for many of these device types especially in the appliance domain. ESP ZeroCode ExL offers simplified Matter and cloud connectivity for these devices and is even well-positioned for retrofitting existing designs to Matter-compliant and cloud-connected ones. It is important to note that ESP ZeroCode ExL can also enable Matter and cloud connectivity to devices beyond these types, supporting devices even with small, resource-constrained host MCUs. + +## Key Features + +ESP ZeroCode ExL implements AWS IoT ExpressLink specification version 1.2 and Matter protocol specification version 1.2. + +## AWS IoT ExpressLink Features: + +## Matter protocol features + +## Security + +ESP ZeroCode ExL modules are security hardened with hardware root of trust based on Secure Boot and Digital Signature Peripheral. All the sensitive data such as device identity and Wi-Fi network credentials are encrypted and secured using hardware security features such as flash encryption, digital signature peripheral, and HMAC peripheral. ESP ZeroCode ExL firmware is tested with the AWS-provided regression test suite. Communication interfaces such as Wi-Fi, BLE, and serial interface are verified against memory corruption attacks. Secure OTA ensures only the trusted firmware gets executed on the module as well as on the host. These security features add significant value and make the job of device makers significantly easier. + +## Ready for Evaluation? + +Espressif provides an easy evaluation through the [ESP ZeroCode Console](https://zerocode.espressif.com/) for the ESP ZeroCode ExL module. You can use any ESP32-C6 development board to quickly try out the functionality completely in the web browser. ESP ZeroCode Console supports a refrigerator, laundry washer, air conditioner, thermostat, and dimmer device types with ESP ZeroCode ExL module. We will be soon expanding on these device types. + +{{< figure + default=true + src="img/announcing-3.webp" + >}} + +If you need more information about ESP ZeroCode ExL modules, please reach out to us at [zerocode@espressif.com](mailto:zerocode@espressif.com) and we will get back to you as quickly as we can. diff --git a/content/blog/esp-zerocode/img/esp-1.webp b/content/blog/esp-zerocode/img/esp-1.webp new file mode 100644 index 000000000..e8c44f153 Binary files /dev/null and b/content/blog/esp-zerocode/img/esp-1.webp differ diff --git a/content/blog/esp-zerocode/index.md b/content/blog/esp-zerocode/index.md new file mode 100644 index 000000000..0066daed1 --- /dev/null +++ b/content/blog/esp-zerocode/index.md @@ -0,0 +1,32 @@ +--- +title: "ESP ZeroCode" +date: 2023-11-12 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Zero Code + - AWS + - Espressif + - Esp32 + +--- +{{< figure + default=true + src="img/esp-1.webp" + >}} + +ESP ZeroCode allows device makers to instantly specify, build and launch connected products, right through their browsers. A wide variety of products such as lightbulbs, lighting fixtures, led strips, sockets, switches, roller blinds, refrigerators, laundry washers, thermostats and more are supported. + +## Articles + +The various articles on ESP ZeroCode are available below: + +- Matter based connected devices: [Announcing ESP ZeroCode](/announcing-esp-zerocode-301201c24cba) +- Appliances with Matter and Cloud Connectivity: [Announcing ESP ZeroCode ExL Module](/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible-6f90fa89abe6) +- [What’s new with ESP ZeroCode](/whats-new-with-esp-zerocode-1199e0c577fc) + +## Podcast + +{{< youtube XMh81q81EMA >}} diff --git a/content/blog/esp32-c2-and-why-it-matter-s/img/espc-1.webp b/content/blog/esp32-c2-and-why-it-matter-s/img/espc-1.webp new file mode 100644 index 000000000..9be0447b2 Binary files /dev/null and b/content/blog/esp32-c2-and-why-it-matter-s/img/espc-1.webp differ diff --git a/content/blog/esp32-c2-and-why-it-matter-s/index.md b/content/blog/esp32-c2-and-why-it-matter-s/index.md new file mode 100644 index 000000000..806367c0e --- /dev/null +++ b/content/blog/esp32-c2-and-why-it-matter-s/index.md @@ -0,0 +1,85 @@ +--- +title: "ESP32-C2 and Why It Matter-s" +date: 2022-04-18 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - teo-swee-ann +tags: + - Esp32 + - Espressif + - Esp32 C2 + - Esp32 C6 + - Ceo Blog + +--- +{{< figure + default=true + src="img/espc-1.webp" + >}} + +As many would have heard, Shanghai is now undergoing a major lockdown and quarantine due to COVID-19. In the midst of this lockdown, we received our production wafers of ESP32-C2, and proceeded with the verifications. Due to the quarantine, we have faced some logistics problems, but slowly, we have improvised, worked out solutions and continue to move ahead with the ramp up of this product. And thanks to Espressifers from Brazil, Czech Republic, India and Singapore, the integration of ESP32-C2 into ESP-IDF and ESP-RainMaker continues at full speed. + +## ESP32-C2 and Why It Matter-s + +ESP32-C2 is a combo WiFi-BLE chip that was conceived middle of last year, at the start of the Great Semiconductor Supply Shortage, which to a certain extent, persists till today. Hence, one of the most important goals of the chip is to reduce its silicon area and the flash size requirement. In short, this chip targets simple high volume, low data rate IoT applications such as smart plugs and light bulbs. + +After almost a year, the result is a chip in a 4mm x 4mm package, supporting WiFi 4 + BLE 5.0 with 272 kB of memory and runs ESP-IDF and frameworks such as ESP-Jumpstart and ESP-RainMaker. The ROM code is optimized to reduce the need for flash. ESP-IDF is Espressif’s open-source real-time operating system for embedded IOT devices that now runs on more than 700 million devices. It is supported by Espressif and the community for all ESP32 chips. + +__So, if you need a small, simple, cheap, robust WiFi connection added to your application, ESP32-C2 is it. Besides, ESP32-C2 also continues to have the required security features such as secure boot and flash encryption, and provides hardware root-of-trust for the applications.__ + +## RF Performance + +One of the unintended side effects (positive) of this design is that the smaller package and chip enhance the RF performance due to reduced stray parasitics. + +ESP32-C2 can transmit 802.11N MC7 packets (72.2 Mbps) with 18 dBm output power. It transmits at the full 20 dBm FCC limit for the lower data rates. The typical receiver sensitivity is between -97 to -100 dBm for 1 Mbps 802.11B packets. The receive current is 58 mA. + +Routers usually have better transmitters than the client devices (referring to the devices connecting to the routers). However, in the case of ESP32-C2, the client devices can transmit as much output power as the router. (We are not talking about the multi-antenna ones.) For most client devices, the output power of 20 dBm is only supported for the low data rate modes, but for ESP32-C2, it is supported for some of the high data rates, and hence reduces the transmission time and improves the overall connection quality in the situation when you have more devices. + +> The maximum distance is determined by the maximum power that the device can transmit, or is allowed to transmit, at the lowest data rate, i.e., 20 dBm at 802.11B 1 Mbps (usually 19.5 dBm or sometimes even lower to have some margins for FCC certification). If your application needs to maximize the physical distance, as with most applications, check out the receive sensitivity and transmit power at 802.11B 1 Mbps of the parts that you are using. ESP32-C2 is at the limits of what is allowed. + +Besides physical distance, larger bandwidths are helpful if you are targeting applications related to audio. + +(Incidentally, the improvements to the RF performance are also inherited by ESP32-C6, which is a WiFi-6 + BLE 5.2 IOT chip that is to be commercially available in late Q3/early Q4.) + +## The Matter Standard + +The Matter standard is designed to run on any network stacks that support IP. In the soon-to-be-released Matter 1st release, it supports WiFi, Thread, and Ethernet protocols. + +The following are the pros and cons of using Matter WiFi vs. Matter Thread: + +__WiFi Pros__ + +- Low latency, high throughput +- Most supported due to the high availability of WiFi routers + +__WiFi Cons__ + +- High power consumption, hard to support battery power +- Without additional mesh protocol, the network is limited in scale and to only one hop + +__Thread Pros__ + +- Low power, support battery power +- Supports mesh network (up to 250 devices) + +__Thread Cons__ + +- We need a Thread border router to function. And we still need WiFi connectivity (or some other form of network connectivity). +- Low throughput, high latency + +Since WiFi is widely available in most places, the migration of existing WiFi-based devices to the Matter WiFi standard will most likely drive a large part of the early adoption of the Matter standard. + +For this reason, ESP32-C2, which is a low-cost WiFi chip supporting the Matter standard, matters. + +## How Do I Get Started? + +For ESP32-C2 samples, you can contact Espressif at sales@Espressif.com. + +For other products, you can browse the list of available development kits and modules available from [https://www.espressif.com/en/products/devkits](https://www.espressif.com/en/products/devkits) and [https://www.espressif.com/en/products/modules](https://www.espressif.com/en/products/modules). + +For information about ESP-IDF, do visit: + +- __English__ : [https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html) +- __Chinese__ : [https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html) +- __Code__ : [https://github.com/espressif/esp-idf](https://github.com/espressif/esp-idf) diff --git a/content/blog/esp32-device-provisioning-configuring-custom-data/img/esp-1.webp b/content/blog/esp32-device-provisioning-configuring-custom-data/img/esp-1.webp new file mode 100644 index 000000000..620c9880e Binary files /dev/null and b/content/blog/esp32-device-provisioning-configuring-custom-data/img/esp-1.webp differ diff --git a/content/blog/esp32-device-provisioning-configuring-custom-data/img/esp-2.webp b/content/blog/esp32-device-provisioning-configuring-custom-data/img/esp-2.webp new file mode 100644 index 000000000..4c659d42a Binary files /dev/null and b/content/blog/esp32-device-provisioning-configuring-custom-data/img/esp-2.webp differ diff --git a/content/blog/esp32-device-provisioning-configuring-custom-data/index.md b/content/blog/esp32-device-provisioning-configuring-custom-data/index.md new file mode 100644 index 000000000..679e49c15 --- /dev/null +++ b/content/blog/esp32-device-provisioning-configuring-custom-data/index.md @@ -0,0 +1,90 @@ +--- +title: "ESP32 Device Provisioning: Configuring Custom Data" +date: 2019-10-11 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - API + - Esp32 + - Jumpstart + - IoT + +--- +One of the common requirements I have seen is, during the initial device provisioning, configuring some device specific custom data on the device. This could be something as easy as assigning a user-friendly name to the device, or something like initialising the Alexa credentials on the device. + +The unified provisioning infrastructure within the ESP-IDF/ESP-Jumpstart allows for this mechanism with ease. + +## Conceptual Overview + +The communication mechanism for the unified provisioning is depicted in the following block diagram: + +{{< figure + default=true + src="img/esp-1.webp" + >}} + +This is the protocol stack that is used during the initial provisioning of the device. From the bottom to the top: + +- __Transport:__ The client (typically a phone app) will use either of the two available transport mechanism, HTTP (generally over softAP) or BLE, to establish a connection with the device. +- __Protocomm:__ The protocomm layer provides a secure abstraction for the higher level APIs. The protocomm layer takes care of registering the API as a HTTPd service API, or a GATT-level API. Additionally, the protocomm layer ensures that data exchange that happens over the API happens over a secure channel. +- __API implementation:__ At the highest level, the Wi-Fi Provisioning module implements its own APIs: Scan(), SetConfig(), ApplyConfig() and GetStatus(). These are the APIs that the phone application will call while performing the initial device provisioning. + +The Protocomm layer allows you to install your own custom API. This API can handle the additional configuration such as the user-friendly device name, or the Alexa credentials, that we discussed in the beginning. + +The provisioning implementation uses [Protocol Buffers](https://developers.google.com/protocol-buffers) to exchange data over its API. Your API implementation is free to choose any data representation for exchanging data. + +## Sample Code + +Let’s say you have to create your own custom API, MyCustomAPI() that allows the phone application to configure a user-friendly device name into the device. + +We can take the example of ESP-Jumpstart application for this discussion. In the ESP-Jumpstart application, in any application after the [4_network_config/](https://github.com/espressif/esp-jumpstart/blob/master/4_network_config/) application, go to the line that makes the call to [wifi_prov_mgr_start_provisioning()](https://github.com/espressif/esp-jumpstart/blob/master/4_network_config/main/app_main.c#L215). + +You can modify this call to look like the following: + +``` +wifi_prov_mgr_endpoint_create("my-custom-api"); +wifi_prov_mgr_start_provisioning(security, pop, service_name, + service_key));wifi_prov_mgr_endpoint_register("my-custom-api", + custom_prov_config_data_handler, NULL); +``` + +So we use the *wifi_prov_mgr_endpoint_create()* to create a new endpoint, and then setup a callback handler that needs to be invoked using the *wifi_prov_mgr_endpoint_register()*. And now you can implement the function *custom_prov_config_data_handler(). *This callback handler will get called whenever the client makes a call to the my-custom-api endpoint. + +``` +esp_err_t custom_prov_config_data_handler(uint32_t session_id, const + uint8_t *inbuf, ssize_t inlen, uint8_t **outbuf, + ssize_t *outlen, void *priv_data) +{/* The 'inbuf' contains the input data to this API. The function + * should allocated and populate the 'outbuf' that should contain + * the response. + */ + if (inbuf) { + ESP_LOGI(TAG, "Received data: %.*s", inlen, (char *)inbuf); + } char response[] = "SUCCESS"; + *outbuf = (uint8_t *)strdup(response); + if (*outbuf == NULL) { + ESP_LOGE(TAG, "System out of memory"); + return ESP_ERR_NO_MEM; + } + /* +1 for NULL terminating byte */ + *outlen = strlen(response) + 1; + + return ESP_OK;} +``` + +## Phone Application + +{{< figure + default=true + src="img/esp-2.webp" + >}} + +This API can now be called from any client like a phone application. The client will make calls to this API, just like it makes to the other APIs of the network configuration infrastructure. + +The source code for the provisioning phone applications is available for [iOS](https://github.com/espressif/esp-idf-provisioning-ios) and [Android](https://github.com/espressif/esp-idf-provisioning-android). + +The phone application can be modified to make the call to the *my-custom-api* that we defined in the firmware above. Please note any calls to custom APIs should be made *before* the phone application executes the *ApplyConfig *API. The *ApplyConfig *call indicates to the firmware that the provisioning is now complete. + +And that way, we have easily added a custom configuration API to our device’s initial provisioning workflow. diff --git a/content/blog/esp32-memory-analysis-case-study/img/esp-1.webp b/content/blog/esp32-memory-analysis-case-study/img/esp-1.webp new file mode 100644 index 000000000..780644b0f Binary files /dev/null and b/content/blog/esp32-memory-analysis-case-study/img/esp-1.webp differ diff --git a/content/blog/esp32-memory-analysis-case-study/index.md b/content/blog/esp32-memory-analysis-case-study/index.md new file mode 100644 index 000000000..92b13d65b --- /dev/null +++ b/content/blog/esp32-memory-analysis-case-study/index.md @@ -0,0 +1,280 @@ +--- +title: "ESP32 Memory Analysis — Case Study" +date: 2020-06-01 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - mahavir-jain +tags: + - Esp32 + - Esp Idf + - IoT + - Embedded Systems + - Memory Optimization + +--- +Memory has significant impact on silicon cost as well as die size, hence from hardware perspective having optimal size is important and from software perspective being able to utilise it to fullest is crucial. + +In this post we will discuss some upcoming features and commonly available configuration options (knobs) in ESP-IDF to allow __end__ __application__ to utilise various internal memory regions in most optimal way. + +## Important Notes + +- We will focus on single core mode of ESP32 here, as that is where more number of memory optimisation features are applicable. +- We will be considering typical IoT use-cases here where gaining memory at the cost of performance is acceptable criteria. +- We will take typical cloud application as case study which requires TLS connection with mutual authentication support. +- ESP-IDF feature branch used here can be found at, [https://github.com/mahavirj/esp-idf/tree/feature/memory_optimizations](https://github.com/mahavirj/esp-idf/tree/feature/memory_optimizations) + +## ESP32: Internal Memory Breakup + +{{< figure + default=true + src="img/esp-1.webp" + >}} + +- As can be seen from above memory layout, there are various memory regions internal to silicon and of different clock speed. +- For single core use-cases, we get additional 32K of instruction memory, which otherwise would have acted as cache for APP CPU core. +- Instruction RAM access should always be 32-bit address and size aligned. +- For end application business logic, it is always desirable to have more DRAM, which is fastest memory without any access restrictions. + +## Case Study — AWS IoT Sample Application + +- We will be taking subscribe_publish example from ESP-AWS-IoT [__here__ ](https://github.com/espressif/esp-aws-iot/tree/master/examples/subscribe_publish) as case study to analyse memory utilisation. +- ESP-IDF provides an API to get minimum free heap or dynamic memory available in system using heap_caps_get_minimum_free_size(). __Our aim would be to maximise this number (for relative analysis) and thus increase the amount of memory available for end application specific business logic (DRAM region to be specific).__ + +## Default Memory Utilisation + +We will be using following patch on top of subscribe_publish example to log dynamic memory statistics. + +- First we will be logging system level minimum free heap numbers for DRAM and IRAM regions respectively as mentioned earlier. +- Second we will be using heap task tracking feature which provides information on dynamic memory usage on per task basis. This feature is modified to also log peak usage numbers for DRAM and IRAM regions on per task basis. +- __We will be logging this information for__ __aws_iot_task__ __,__ __tiT (tcpip)__ __and__ __wifi__ __tasks respectively__ (as these tasks define data transfer path from application layer to physical layer and vice-versa). It is also to be noted that there will some variation in peak memory usage of networking tasks based on environmental (like WiFi connection, network latency) factors. + +*Note: Change in core-id during task creation (from below patch) is for single core configuration that we are using for this particular example.* + +> With default configuration (and heap task tracking feature enabled) we get following heap utilisation statistics (all values in bytes): + +``` +Task Heap Utilisation Stats: +|| Task | Peak DRAM | Peak IRAM || +|| aws_iot_task | 63124 | 0 || +|| tiT | 3840 | 0 || +|| wifi | 31064 | 0 ||System Heap Utilisation Stats: +|| Minimum Free DRAM | Minimum Free IRAM || +|| 152976 | 40276 || +``` + +## Single Core Config + +As mentioned earlier we will be using single core configuration for all our experiments. Please note that even in single core mode there is enough processing power available in ESP32 (close to 300 DMIPS), more than sufficient for typical IoT use-cases. + +> Corresponding configuration to be enabled in application: + +``` +CONFIG_FREERTOS_UNICORE=y +``` + +> Updated heap utilisation statistics from application re-run as following: + +``` +Task Heap Utilisation Stats: +|| Task | Peak DRAM | Peak IRAM || +|| aws_iot_task | 63124 | 0 || +|| tiT | 3892 | 0 || +|| wifi | 31192 | 0 ||System Heap Utilisation Stats: +|| Minimum Free DRAM | Minimum Free IRAM || +|| 162980 | 76136 || +``` + +> As can be seen from above, we have gained ~10KB memory in DRAM, since some of services (e.g. idle, esp_timer tasks etc.) for second CPU core are not required anymore. In addition IPC service for inter processor communication is also no more required, so we gain from stacks and dynamic memory of that service. Increase in IRAM is due to the freeing up of 32KB cache memory of second CPU core and some of code savings due to disablement of above mentioned services. + +## TLS Specific + +## Asymmetric TLS Content Length + +This feature has been part of ESP-IDF from v4.0 onwards. This feature allows to enable asymmetric content length for TLS IN/OUT buffers. Thus application has an ability to reduce TLS OUT buffer from its default value of 16KB __(maximum TLS fragment length per specification)__ to as small as say 2KB, and thus allowing __14KB of dynamic memory saving__ . + +Please note that, it is not possible to reduce TLS IN buffer length from its default 16KB, unless you have direct control over server configuration or sure about server behaviour that it will never send inbound data (during handshake or actual data-transfer phase) over certain threshold. + +> Corresponding configuration to be enabled in application: + +``` +# Enable TLS asymmetric in/out content length +CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y +CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=2048 +``` + +> Updated heap utilisation statistics from application re-run as following: + +``` +Task Heap Utilisation Stats: +|| Task | Peak DRAM | Peak IRAM || +|| aws_iot_task | 48784 | 0 || +|| tiT | 3892 | 0 || +|| wifi | 30724 | 0 ||System Heap Utilisation Stats: +|| Minimum Free DRAM | Minimum Free IRAM || +|| 177972 | 76136 || +``` + +> As can be seen from above, we have gained ~14KB memory from aws_iot_task and thus minimum free DRAM number has increased accordingly. + +## Dynamic Buffer Allocation Feature + +During TLS connection, mbedTLS stack keeps dynamic allocations active during entire session starting from initial handshake phase. These allocations includes, TLS IN/OUT buffers, peer certificate, client certificate, private keys etc. In this feature (soon to be part of ESP-IDF), mbedTLS internal APIs have been glued (using SHIM layer) and thus it is ensured that whenever resource usage (including data buffers) is complete relevant dynamic memory is immediately freed up. + +This greatly helps to reduce peak heap utilisation for TLS connection. This will have small performance impact due to frequent dynamic memory operations (on-demand resource usage strategy). Moreover since memory related to authentication credentials (certificate, keys etc.) has been freed up, during TLS reconnect attempt (if required), application needs to ensure that mbedTLS SSL context is populated again. + +> Corresponding configuration to be enabled in application: + +``` +# Allow to use dynamic buffer strategy for mbedTLS +CONFIG_MBEDTLS_DYNAMIC_BUFFER=y +CONFIG_MBEDTLS_DYNAMIC_FREE_PEER_CERT=y +CONFIG_MBEDTLS_DYNAMIC_FREE_CONFIG_DATA=y +``` + +> Updated heap utilisation statistics from application re-run as following: + +``` +Task Heap Utilization Stats: +|| Task | Peak DRAM | Peak IRAM || +|| aws_iot_task | 26268 | 0 || +|| tiT | 3648 | 0 || +|| wifi | 30724 | 0 ||System Heap Utilization Stats: +|| Minumum Free DRAM | Minimum Free IRAM || +|| 203648 | 76136 || +``` + +> As can be seen from above, we have gained ~22KB memory from *aws_iot_task* and thus minimum free DRAM number has increased accordingly. + +## Networking Specific + +## WiFi/LwIP Configuration + +We can further optimise the WiFi and LwIP configuration to reduce memory usage, at the cost of giving away some performance. Primarily we will reduce WiFi TX and RX buffers and try to balance it out by moving some critical code path from networking subsystem to instruction memory (IRAM). + +To give some ballpark on performance aspect, with default networking configuration average TCP throughput is close to ~20Mbps, but with below configuration it will be close to ~4.5Mbps, which is still sufficient to cover typical IoT use-cases. + +> Corresponding configuration to be enabled in application: + +``` +# Minimal WiFi/lwIP configuration +CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=4 +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=16 +CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=8 +CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED= +CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=16 +CONFIG_LWIP_TCP_SND_BUF_DEFAULT=6144 +CONFIG_LWIP_TCP_WND_DEFAULT=6144 +CONFIG_LWIP_TCP_RECVMBOX_SIZE=8 +CONFIG_LWIP_UDP_RECVMBOX_SIZE=8 +CONFIG_ESP32_WIFI_IRAM_OPT=y +CONFIG_ESP32_WIFI_RX_IRAM_OPT=y +CONFIG_LWIP_IRAM_OPTIMIZATION=y +``` + +> Updated heap utilisation statistics from application re-run as following: + +``` +Task Heap Utilization Stats: +|| Task | Peak DRAM | Peak IRAM || +|| aws_iot_task | 26272 | 0 || +|| tiT | 4108 | 0 || +|| wifi | 19816 | 0 ||System Heap Utilization Stats: +|| Minumum Free DRAM | Minimum Free IRAM || +|| 213712 | 62920 || +``` + +> As can be seen from above log, we have gained roughly ~9KB of additional DRAM for application usage. Impact (reduction) in total IRAM comes because we moved critical code path from networking subsystem to this region. + +## System Specific + +## Utilising RTC (Fast) Memory (single-core only) + +As can be seen from earlier memory breakup there is one useful 8KB RTC Fast memory (and reasonably fast) which has been sitting idle and not fully utilised. ESP-IDF will soon have feature to enable RTC Fast memory for dynamic allocation purpose. This option exists in single core configuration, as the RTC Fast memory is accessible to PRO CPU only. + +It has been ensured that RTC Fast memory region will be utilised as first dynamic memory range, and most of startup, pre-scheduler code/services will occupy this range. This will allow to not have any performance impact in application code due to clock speed (slightly on slower side) of this memory. + +Since there are no access restrictions to this region, capability wise we will call it as DRAM henceforth. + +Let’s re-run our application with this feature and gather memory numbers. + +> Corresponding configuration to be enabled in application: + +``` +# Add RTC memory to system heap +CONFIG_ESP32_ALLOW_RTC_FAST_MEM_AS_HEAP=y +``` + +> Updated heap utilisation statistics from application re-run as following: + +``` +Task Heap Utilization Stats: +|| Task | Peak DRAM | Peak IRAM || +|| aws_iot_task | 26272 | 0 || +|| tiT | 4096 | 0 || +|| wifi | 19536 | 0 ||System Heap Utilization Stats: +|| Minumum Free DRAM | Minimum Free IRAM || +|| 221792 | 62892 || +``` + +> As can be seen from above log, we have gained 8KB of additional DRAM for application usage. + +## Utilising Instruction Memory (IRAM, single-core only) + +So far we have seen different configuration options to allow end application to have more memory from DRAM (data memory) region. To continue along similar lines, it should be noted that there is still sufficient IRAM (instruction memory) left but it can not be used as generic purpose due to 32-bit address and size alignment restrictions. + +- If access (load or store) is from IRAM region and size is not word-aligned, then processor will generate LoadStoreError(3) exception +- If access (load or store) is from IRAM region and address is not word-aligned then processor will generate LoadStoreAlignmentError(9) exception + +In this particular feature from ESP-IDF, above mentioned unaligned accesses have been fixed through corresponding exception handlers and thus resulting in correct program execution. However, these exception handlers can take up-to 167 CPU cycles for each (restricted) load or store operation. So there could be significant performance penalty (as compared with DRAM access) while using this feature. + +This memory region can be used in following ways: + +- First through heap allocator APIs using special capability field known as __MALLOC_CAP_IRAM_8BIT__ +- Second by redirecting DATA/BSS to this region using provided linker attributes, __IRAM_DATA_ATTR__ and __IRAM_BSS_ATTR__ + +Limitations wise: + +- This memory region can be not be used for DMA purpose +- This memory region can not be used for allocating task stacks + +While discussing usage of this memory region with understood performance penalty, TLS IN/OUT (per our configuration value of buffer 16KB/2KB) buffers were found to be one of the potential candidate to allocate from this region. In one of the experiments, for transfer of 1MB file over TLS connection, time increased from ~3 seconds to ~5.2 seconds with TLS IN/OUT buffers moved to IRAM. + +It is also possible to redirect all TLS allocations to IRAM region but that may have larger performance impact and hence this feature redirects only buffers whose size is greater or equal than minimum of TLS IN or OUT buffer (in our case threshold would be 2KB). + +Let’s re-run our application with this feature and gather memory numbers. + +> Corresponding configuration to be enabled in application: + +``` +# Allow usage of IRAM as 8bit accessible region +CONFIG_ESP32_IRAM_AS_8BIT_ACCESSIBLE_MEMORY=y +CONFIG_MBEDTLS_IRAM_8BIT_MEM_ALLOC=y +``` + +> Updated heap utilisation statistics from application re-run as following: + +``` +Task Heap Utilization Stats: +|| Task | Peak DRAM | Peak IRAM || +|| aws_iot_task | 17960 | 21216 || +|| tiT | 3640 | 0 || +|| wifi | 19536 | 0 ||System Heap Utilization Stats: +|| Minumum Free DRAM | Minimum Free IRAM || +|| 228252 | 40432 || +``` + +> As can be seen from above log, we have gained another ~7KB of additional DRAM for application usage. Please note that, even though we have redirected all allocations above 2KB threshold to IRAM, there are still many smaller (and simultaneous) allocations happening from DRAM region (another local maxima) and hence effective gain is lower than what actually should have been. If additional performance impact is acceptable then it is possible to redirect all TLS allocation to IRAM and gain further at-least ~10–12KB memory from DRAM region. + +## Summary + +- Having complete application control over selection of various features through configuration options is one of the important features in ESP-IDF. +- Through above exercise we have systematically evaluated various features and configuration options within ESP-IDF to __increase DRAM (fastest memory) budget for end application by 63KB__ (minimum free DRAM size increased from ~160KB to ~223KB). +- Some of these configuration options are available for single-core configuration only (have been marked as such in title itself) but even in dual-core configuration memory savings are possible with rest of the options. +- It is further possible to utilise instruction memory (IRAM) as 8-bit accessible region for non-performance critical modules like logging and diagnostics by end application. +- It is recommended to disable some of the debugging features that we used in above exercise like heap task tracking to reduce metadata overhead (and further increase memory budget) once required system characterisation is achieved. + +## References + +- Modified subscribe_publish example along with final sdkconfig.defaults file can be found [__here__ ](https://github.com/mahavirj/esp-aws-iot/tree/feature/memory_optimizations/examples/subscribe_publish)__.__ +- This application should be built against ESP-IDF fork and feature branch from [__here__ ](https://github.com/mahavirj/esp-idf/tree/feature/memory_optimizations)__.__ diff --git a/content/blog/esp32-ota-updates-amazon-freertos/img/esp-1.webp b/content/blog/esp32-ota-updates-amazon-freertos/img/esp-1.webp new file mode 100644 index 000000000..350484728 Binary files /dev/null and b/content/blog/esp32-ota-updates-amazon-freertos/img/esp-1.webp differ diff --git a/content/blog/esp32-ota-updates-amazon-freertos/img/esp-2.webp b/content/blog/esp32-ota-updates-amazon-freertos/img/esp-2.webp new file mode 100644 index 000000000..e4be43335 Binary files /dev/null and b/content/blog/esp32-ota-updates-amazon-freertos/img/esp-2.webp differ diff --git a/content/blog/esp32-ota-updates-amazon-freertos/img/esp-3.webp b/content/blog/esp32-ota-updates-amazon-freertos/img/esp-3.webp new file mode 100644 index 000000000..7f16cf8ac Binary files /dev/null and b/content/blog/esp32-ota-updates-amazon-freertos/img/esp-3.webp differ diff --git a/content/blog/esp32-ota-updates-amazon-freertos/img/esp-4.webp b/content/blog/esp32-ota-updates-amazon-freertos/img/esp-4.webp new file mode 100644 index 000000000..6188a5bbf Binary files /dev/null and b/content/blog/esp32-ota-updates-amazon-freertos/img/esp-4.webp differ diff --git a/content/blog/esp32-ota-updates-amazon-freertos/index.md b/content/blog/esp32-ota-updates-amazon-freertos/index.md new file mode 100644 index 000000000..3171812a4 --- /dev/null +++ b/content/blog/esp32-ota-updates-amazon-freertos/index.md @@ -0,0 +1,73 @@ +--- +title: "ESP32 OTA Updates — Amazon FreeRTOS" +date: 2018-09-30 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - mahavir-jain +tags: + - AWS + - Esp32 + - IoT + - Framework + +--- +ESP32 now supports secure Over-the-Air firmware updates with Amazon FreeRTOS. This enables users of ESP32 with Amazon FreeRTOS to: + +- Deploy new firmware on ESP32 in secure manner (single or group of devices, along with dynamic addition of new/re-provisioned device) +- Verify authenticity and integrity of new firmware after its deployed +- Extend OTA update security scheme to take leverage of hardware security features in ESP32 + +## Working + +At a high level, + +- The firmware image (or any other partition’s content: filesystem, configuration data), is initially uploaded to an S3 bucket on AWS. +- An AWS OTA Job with the required certificates (for demo purpose can be self-signed) and code-signing profile (security scheme for ESP32 is ECDSA + SHA256) is setup. +- On the device side, the OTA agent from Amazon FreeRTOS needs to be enabled in the firmware, along with the certificate that is responsible for verifying the firmware update image (essentially ECDSA public key). +- The AWS OTA Job then takes the firmware image from the S3 bucket, signs it, and sends it over MQTT+TLS channel in small chunks to the OTA agent on the device. +- The OTA agent on the device then writes the newly received firmware to its storage and manages the state. +- At the end, firmware signature gets validated on the device and it gets approved for boot-up. +- Post boot-up, the OTA agent again interacts with AWS OTA Job for verifying sanity of firmware, and finally the firmware image gets marked as legitimate one, notifying the boot-loader to erase all older firmware instances from the device storage (for not allowing forced rollback). + +## Procedure + +Lets quickly walk over the steps for getting the OTA update demo functional on ESP32: + +- Please follow the Getting Started Guide for some of the prerequisites as documented at, [__https://docs.aws.amazon.com/freertos/latest/userguide/ota-prereqs.html__ ](https://docs.aws.amazon.com/freertos/latest/userguide/ota-prereqs.html) +- Refer to [__https://docs.aws.amazon.com/freertos/latest/userguide/ota-code-sign-cert-esp.html__ ](https://docs.aws.amazon.com/freertos/latest/userguide/ota-code-sign-cert-esp.html) for creating code signing profile for the ESP32 platform +- For downloading firmware to ESP32, refer to [__https://docs.aws.amazon.com/freertos/latest/userguide/ota-download-freertos.html#download-freertos-to-port__ ](https://docs.aws.amazon.com/freertos/latest/userguide/ota-download-freertos.html#download-freertos-to-port) +- Once the device boots up, the log should look like the one mentioned at, [__https://docs.aws.amazon.com/freertos/latest/userguide/burn-initial-firmware-esp.html__ ](https://docs.aws.amazon.com/freertos/latest/userguide/burn-initial-firmware-esp.html) +- Create an Amazon FreeRTOS OTA Job (by navigating to IoT Core -> Manage -> Jobs -> Create), + +{{< figure + default=true + src="img/esp-1.webp" + >}} + +- Select “Sign a new firmware image for me” option, + +{{< figure + default=true + src="img/esp-2.webp" + >}} + +- Create code signing profile, please select ESP32 platform here and provide certificates created earlier, + +{{< figure + default=true + src="img/esp-3.webp" + >}} + +{{< figure + default=true + src="img/esp-4.webp" + >}} + +## Enabling Hardware Security + +The ESP32 port is so structured that the same secure firmware verification mechanism can be used by the ESP32 chipset for enabling [__secure boot__ ](https://docs.espressif.com/projects/esp-idf/en/latest/security/secure-boot.html). + +ESP32’s secure boot scheme uses the same ECDSA + SHA256 algorithm. Hence the same public key that is used for the OTA firmware image verification can also be used by the bootloader to validate the firmware image on boot-up. + +It is highly recommended that you use secure boot in conjunction with the OTA firmware updates in your products. diff --git a/content/blog/esp32-programmers-memory-model/img/esp-1.webp b/content/blog/esp32-programmers-memory-model/img/esp-1.webp new file mode 100644 index 000000000..c7446c09c Binary files /dev/null and b/content/blog/esp32-programmers-memory-model/img/esp-1.webp differ diff --git a/content/blog/esp32-programmers-memory-model/img/esp-2.webp b/content/blog/esp32-programmers-memory-model/img/esp-2.webp new file mode 100644 index 000000000..05a6c821a Binary files /dev/null and b/content/blog/esp32-programmers-memory-model/img/esp-2.webp differ diff --git a/content/blog/esp32-programmers-memory-model/img/esp-3.webp b/content/blog/esp32-programmers-memory-model/img/esp-3.webp new file mode 100644 index 000000000..29bfc23aa Binary files /dev/null and b/content/blog/esp32-programmers-memory-model/img/esp-3.webp differ diff --git a/content/blog/esp32-programmers-memory-model/img/esp-4.webp b/content/blog/esp32-programmers-memory-model/img/esp-4.webp new file mode 100644 index 000000000..c13093967 Binary files /dev/null and b/content/blog/esp32-programmers-memory-model/img/esp-4.webp differ diff --git a/content/blog/esp32-programmers-memory-model/img/esp-5.webp b/content/blog/esp32-programmers-memory-model/img/esp-5.webp new file mode 100644 index 000000000..86eb32688 Binary files /dev/null and b/content/blog/esp32-programmers-memory-model/img/esp-5.webp differ diff --git a/content/blog/esp32-programmers-memory-model/img/esp-6.webp b/content/blog/esp32-programmers-memory-model/img/esp-6.webp new file mode 100644 index 000000000..e9e7d12d7 Binary files /dev/null and b/content/blog/esp32-programmers-memory-model/img/esp-6.webp differ diff --git a/content/blog/esp32-programmers-memory-model/index.md b/content/blog/esp32-programmers-memory-model/index.md new file mode 100644 index 000000000..f34ff0de3 --- /dev/null +++ b/content/blog/esp32-programmers-memory-model/index.md @@ -0,0 +1,130 @@ +--- +title: "ESP32 Programmers’ Memory Model" +date: 2020-07-02 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - amey-inamdar +tags: + - Esp32 Programming + - Esp32 + +--- +Internal memory of the MCU is probably the most precious resource as it occupies maximum area in the chip. The newer application use-cases have ever increasing memory requirement. For making the most of the hardware, understanding of the memory architecture and optimising of the memory for application’s use-case becomes important. Especially with the ESP32 SoC architecture that includes communication subsystems (Wi-Fi and BT/BLE) that requires certain memory to operate, it becomes necessary for the application to understand the requirements and tune their memory. + +We often get questions about available memory headroom for the application; and there is no easy answer to that question unless we go into the details of the use-case. But when developers understand the details about memory layout, system requirements and the common methods to optimise, we have seen that ESP32 can accommodate quite a variety of interesting application use-cases. + +This blog is intended to provide an overview of ESP32 SoC’s memory layout for application developers, explain different memory regions and their characteristics and discusses the memory allocation for a typical ESP32 firmware. + +*Please note that all the specific details mentioned here are with respect to ESP-IDF release version 4.0 which is the latest stable release at the time of writing of this blog.* + +## Internal RAM Layout + +{{< figure + default=true + src="img/esp-1.webp" + >}} + +The above diagram shows the ESP32 internal memory (SRAM) layout. The SRAM is divided into 3 memory blocks SRAM0, SRAM1 and SRAM2 (and two small blocks of RTC fast and slow memory which we’ll consider separately later). + +The SRAM is used in two ways — one for instruction memory — IRAM(used for code execution — text data) and data memory — DRAM (used for BSS, data, heap). SRAM0 and SRAM1 can be used as a contiguous IRAM whereas SRAM1 and SRAM2 can be used as a contiguous DRAM address space. + +{{< figure + default=true + src="img/esp-2.webp" + >}} + +While SRAM1 can be used as a IRAM and DRAM both, for practical purposes, ESP-IDF uses SRAM1 as DRAM, as it’s generally the data memory that applications fall short of. The above diagram shows the memory map for programmers to consider for their application development where they get 192KB IRAM and 328KB DRAM. While it does not matter much for the application as there is no overlap, please note that the direction of the address range is opposite for IRAM and DRAM address spaces. + +## IRAM Organisation + +{{< figure + default=true + src="img/esp-3.webp" + >}} + +Lets now zoom into the IRAM section. + +The 192 KB of available IRAM in ESP32 is used for code execution, as well as part of it is used as a cache memory for flash (and PSRAM) access. + +- First 32KB IRAM is used as a CPU0 cache and next 32KB is used as CPU1 cache memory. This is statically configured in the hardware and can’t be changed. +- After the first 64KB, the linker script starts placing the text region in IRAM. It first places all the interrupt vectors and then all the text in the compiled application that is marked to be placed in IRAM. While in common case, majority of the application is executed out of the flash (XiP), there are some portions of the applications which are time critical, or that operate on flash itself. They need to be placed in IRAM and that is achieved using a special attribute to these functions or files and linker script doing a job of placing them in IRAM. The symbols *_iram_text_start* and *_iram_text_end* are placed by the linker script at the two boundaries of this text section. +- The IRAM after the text section remains unused and is added to the heap. + +*_iram_text_start* and *_iram_text_end* symbols are placed by the linker script at the two boundaries of this text section. The IRAM after the text section remains unused and is added to the heap. + +Also, when the application is configured in a single-core mode, the CPU1 is not functional and CPU1 cache is unused. In that case, CPU1 cache memory (0x40078000–0x4007FFFF ) is added to the heap. + +The unused IRAM, that is placed in the heap, can be accessed through dynamic allocations. + +It can be used to place any code in IRAM if the application has such a requirement. However this is quite uncommon. + +The IRAM can also be used for data, but with two important limitations. + +If the application has such data that can obey these two rules of accesses, it can make use of IRAM memory for that data. + +> There is also a way to access IRAM without this limitations; but as a slower memory. This is discussed in a later section. + +## DRAM Organisation + +{{< figure + default=true + src="img/esp-4.webp" + >}} + +The above diagram shows a typical (simplified) DRAM layout for an application. As the DRAM addresses start at the end of SRAM2, increasing in backward direction, the link time segments allocation happens starting at the end of SRAM2. + +- The first 8KB (0x3FFA_E000–0x3FFA_FFFF) are used as a data memory for some of the ROM functions. +- The linker then places initialised data segment after this first 8KB memory. +- Zero initialised BSS segment comes next. +- The memory remaining after allocating data and BSS segments, is configured to be used as a heap. This is where typical dynamic memory allocations go. + +Please note that the size of data and BSS segments depend on the application. So each application, based on the components that it uses and APIs it calls has a different available heap size to begin with. + +There are two regions within the heap (0x3FFE_0000–0x3FFE_0440 — 1088 bytes) and (0x3FFE_3F20–0x3FFE_4350–1072 bytes) that are used by ROM code for its data. These regions are marked reserved and the heap allocator does not allocate memory from these regions. + +## DRAM Organisation with BT Enabled + +{{< figure + default=true + src="img/esp-5.webp" + >}} + +When BT functionality is enabled, the BT controller (software and hardware) needs to use a dedicated data memory. This memory is used as data/BSS for the controller as well as for transfer memory for BT packets between the software and hardware. So the linker script reserves 54KB of memory in addition to the default DRAM allocations between 0x3FFB_0000–0x3FFB_DB5C. The application’s data and BSS segment allocations continues after this region. + +When only BLE functionality is used by the application, a part of the BT controller memory can be relinquished back to the heap. The amount of memory that is released and added to the heap is ~19KB. + +## DRAM Organisation with Trace Memory + +{{< figure + default=true + src="img/esp-6.webp" + >}} + +When the application level tracing is enabled, it reserves a fixed 32 KB memory at the end of DRAM. Note that the above diagram shows the layout with BT disabled. But possibly application can use tracing with BT enabled too and in that case BT controller memory will be reserved as well by the linker script. + +## External SPIRAM + +ESP32 provides an ability to interface optional Pseudo-Static RAM (PSRAM a.k.a SPIRAM) on the same QSPI bus used for the flash using a different chip-select. This memory is directly addressable and just like flash, the accesses to this memory go through cache that is part of IRAM. ESP32 can map maximum 4MB SPIRAM at a time in its address space in the range 0x3F80_0000 to 0x3FBF_FFFF. There are three ways for the application to make use of the SPIRAM + +While this allows application to use additional memory, there are certain restrictions on the use of SPIRAM + +These ways of using SPIRAM and restrictions on using it are documented in detail [here](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/external-ram.html). + +## Heap Allocator + +From the above diagrams for IRAM and DRAM memory layout you can see that DRAM area *_bss_end* to *0x3FFF_FFFF* (or *_heap_end* in case of trace memory enabled) and IRAM area *_iram_text_end* to *0x4009_FFFF* are unused memory segment. If SPIRAM is available in the system, that too has unused memory. The application and SDK components always need to allocate and free the memory on demand. So a general purpose memory allocator — a.k.a. Heap Allocator operates on the available free memory and provides memory allocation and freeing APIs for them. + +As you see, the memory regions under the heap allocator’s control have different capabilities and access properties. Hence ESP-IDF implements a capability based heap allocator where the caller can specify the purpose of allocation along with the size of allocation. For example, an application may ask for memory specifically that is capable of DMA for using it with some peripheral or it may as memory explicitly from external SPIRAM for audio buffers for which allocating from internal DRAM is not preferred. + +ESP-IDF also performs generic *malloc* and *free* APIs above the heap allocator’s capability based allocation APIs to make the application porting easy from POSIX type systems. The application configuration can have governing rules to prefer the use of certain memory segment for *malloc* API based on allocation size. + +## Using IRAM for Data + +Starting with ESP-IDF release 4.2, we have added an ability to use IRAM for data. As mentioned above, IRAM has access limitations in terms of alignment of address and size. If an unaligned access is made, it results into an exception. The ESP-IDF, after release 4.2, handles these exceptions transparently to provide load/store as desired by the caller. As these unaligned accesses result in exception, the access is slower than the DRAM access. Typically each exception handling requires approximately 167 CPU cycles (i.e. 0.7 usec per access at 240 MHz or 1 usec per access at 160 MHz). The application or SDK components can use the IRAM for data either for BSS at link time or through heap allocator at run time. There are two limitations in using IRAM for data: + +ESP-IDF 4.2 provides some ready-made configurations to make effective use of unused IRAM for data such as TLS transmit and receive fragments in single-core mode. + +Please checkout [this](/blog/esp32-memory-analysis-case-study) blog for a case-study for memory analysis of an AWS-IoT client application and some common optimisation techniques. + +In the next blog, we’ll see more details about how Wi-Fi subsystem and BT subsystem use the memory so that memory availability for the application can be determined. We’ll also see various common use-cases and their memory consumption and possible optimisations for these use-cases. Please stay tuned. diff --git a/content/blog/esp32-s2-digital-signature-peripheral/img/esps-1.webp b/content/blog/esp32-s2-digital-signature-peripheral/img/esps-1.webp new file mode 100644 index 000000000..878218a2c Binary files /dev/null and b/content/blog/esp32-s2-digital-signature-peripheral/img/esps-1.webp differ diff --git a/content/blog/esp32-s2-digital-signature-peripheral/img/esps-2.webp b/content/blog/esp32-s2-digital-signature-peripheral/img/esps-2.webp new file mode 100644 index 000000000..46d6656ae Binary files /dev/null and b/content/blog/esp32-s2-digital-signature-peripheral/img/esps-2.webp differ diff --git a/content/blog/esp32-s2-digital-signature-peripheral/img/esps-3.webp b/content/blog/esp32-s2-digital-signature-peripheral/img/esps-3.webp new file mode 100644 index 000000000..efab91bdb Binary files /dev/null and b/content/blog/esp32-s2-digital-signature-peripheral/img/esps-3.webp differ diff --git a/content/blog/esp32-s2-digital-signature-peripheral/index.md b/content/blog/esp32-s2-digital-signature-peripheral/index.md new file mode 100644 index 000000000..4779a2b3b --- /dev/null +++ b/content/blog/esp32-s2-digital-signature-peripheral/index.md @@ -0,0 +1,116 @@ +--- +title: "ESP32-S2: Digital Signature Peripheral" +date: 2021-02-03 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - aditya-patwardhan +tags: + - IoT + - Security + - Embedded Systems + - Esp32 S2 + - Espressif + +--- +{{< figure + default=true + src="img/esps-1.webp" + >}} + +The [Transport Layer Security(TLS)](https://en.wikipedia.org/wiki/Transport_Layer_Security) is an integral part of the IoT world. It facilitates a secure way of communication between the IoT device and the cloud service. The TLS uses asymmetric key cryptography for security that consists of a private key and corresponding public key (certificate). As the name suggests public key is shared with everyone and the private key is kept secured on the IoT device. It is pivotal to keep the private key secure in order to protect the identity of the IoT device. This article explains how to keep the device private key secure with the Digital Signature peripheral present in Espressif’s SoCs. + +The [Digital Signature (DS) peripheral](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-reference/peripherals/ds.html) is a new security feature introduced in the Espressif’s ESP32-S2 SoC. This peripheral is also available in ESP32-C3 and ESP32-S3 SoCs. It produces hardware accelerated RSA digital signatures, without the RSA private key being accessible by software. This allows the private key to be kept secured on the device without anyone other than the device hardware being able to access it. + +## How does the DS peripheral keep the private key secure ? + +The DS peripheral makes use of the eFuse Controller available on the ESP32-S2 chip. For technical details about the eFuse Controller please refer to the __*eFuse Controller *__ section of the [ESP32-S2 Technical Reference Manual](https://www.espressif.com/sites/default/files/documentation/esp32-s2_technical_reference_manual_en.pdf). + +The ESP32-S2 has a total of 11 eFuse blocks each of the size of 256 bits. The eFuse block no.4 to block no.9 out of the total 11 blocks are available as key blocks and can be used to program a 256 bit key. All the blocks in the eFuse are one time programmable. Also, once a key is programmed in one of these key blocks, the software read operation on that block can be disabled. Thus making the key accessible only to the hardware of the ESP32-S2 chip. + +{{< figure + default=true + src="img/esps-2.webp" + >}} + +The eFuse key blocks shown above can be used for multiple purposes e.g. Digital Signature, Flash Encryption, Secure Boot etc. + +As you might have noticed, only a 256 bit key can be stored in a key block of the eFuse Controller. A typical RSA key has recommended minimum length of 1024 bits. Then how can we secure the RSA private key which has a considerably larger length? + +## Using the DS peripheral to secure the RSA private key + +The process to secure RSA private key involves multiple steps. Note that all the technical steps are not mentioned here for simplicity. Please refer to the [DS documentation](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-reference/peripherals/ds.html) in the ESP-IDF programming guide for more details. The following diagram explains the process in a simple manner. + +{{< figure + default=true + src="img/esps-3.webp" + >}} + +As the above diagram shows, the process to secure the RSA private key and use the DS peripheral follows these steps - + +## Setup Mode — One-Time Device Configuration + +## RSA Sign/Verify mode — Regular RSA key usage + +The DS peripheral will use the DS key from the eFuse to internally decrypt the cipher-text to obtain the RSA private key. Then this RSA private key can be used to perform the operations such as sign/verify. This way the encrypted RSA private key can be used to perform a TLS connection. + +Only the DS peripheral (hardware) now has the access of the DS key. This way the RSA private key is kept secure on the device with help of the DS peripheral. + +## Can we generate the RSA private key on the device? + +This article talks about a workflow where the RSA private key is generated and encrypted on the host machine (e.g. PC) and then stored in the flash of the device. This has been done for simplifying the workflow. But it is very well possible to generate the RSA private key on the device itself during manufacturing. Along with the RSA key, the other parameters e.g. IV, DS key can also be randomly generated on the device. Thus, the RSA key can be encrypted on the device using parameters which are completely randomly generated on the device itself. This way the RSA private key never leaves the device. The cipher-text (encrypted RSA private key) generated on the device can then be backed up safely if required. + +## What does a developer have to do to use the DS peripheral in their product ? + +The Espressif’s ESP-IDF provides all the necessary support for using the DS peripheral on the ESP32-S2 SoC. This support is added through the [ESP-TLS](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-reference/protocols/esp_tls.html#digital-signature-with-esp-tls) component. A developer needs to perform the following steps in order to use the DS peripheral in their project for a TLS connection. + +## TL;DR: + +## One-Time Device Configuration: + +__Step 1:__ First step is to configure the DS peripheral on the ESP32-S2 Soc. It can be done with the [configure_ds.py](https://github.com/espressif/esp-idf/blob/master/examples/protocols/mqtt/ssl_ds/configure_ds.py) script. To use the script we will have to set the appropriate idf_target (chip) in the project. The idf_target can be set to esp32s2 with following command: + +``` +$ idf.py set-target esp32s2 +``` + +The command to configure the DS peripheral for development purpose is as follows: + +``` +$ python configure_ds.py --port /* USB COM port */ --private-key /* RSA priv key */ +``` + +The script documentation can be found [here](https://github.com/espressif/esp-idf/blob/master/examples/protocols/mqtt/ssl_ds/README.md). The private key in above command indicates the device RSA private key. + +The script performs step i) to step iii) as mentioned above. It also creates an [NVS](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-reference/storage/nvs_flash.html) partition containing the encrypted private key parameters to be stored onto the flash. This data is required by the DS peripheral and is called as the DS context. + +The content of the NVS partition generated will be as follows: + +__Step 2:__ In order to use the [NVS](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-reference/storage/nvs_flash.html) partition generated in the previous step. We will have to create a custom partition table in our example project which lists the required partition. The following custom partition table can be used for that purpose. + +The __*pre_prov*__ * *partition in the above partition table represents the entry for NVS partition containing the DS context. The example project can be made to use the custom partition in the configuration menu (*idf.py menuconfig -> Partition Table). *Now the partition can be flashed onto the device with help of the [parttool.py](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/partition-tables.html#partition-tool-parttool-py) script. The commands will be as follows: + +``` +$ idf.py partition_table partition_table-flash +$ parttool.py --port /* Serial port */--partition-table-offset 0x8000 write_partition --partition-name="pre_prov" --input /* Path to NVS partition */ +``` + +## Regular RSA key usage: + +__Step 3:__ The support of DS peripheral is added through the ESP-TLS and is enabled by default. To use the peripheral for a TLS connection, the application will have to pass the DS context to the ESP-TLS along with the device certificate (public key). + +The contents of the [NVS](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-reference/storage/nvs_flash.html) partition generated by the [configure_ds.py](https://github.com/espressif/esp-idf/blob/master/examples/protocols/mqtt/ssl_ds/configure_ds.py) script are listed in step 1. The application will have to read the contents by using respective [NVS](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-reference/storage/nvs_flash.html) read/write API functions in order to create a DS context. The DS context and the client (device) certificate can be passed to an ESP-TLS connection as follows: + +This way the ESP-TLS will use the DS peripheral for that particular TLS connection. + +The DS peripheral uses the hardware RSA accelerator. Hence, the RSA sign/verify operation using the DS peripheral will be faster as compared to software RSA sign/verify operation. Refer the [ESP32-S2 TRM](https://www.espressif.com/sites/default/files/documentation/esp32-s2_technical_reference_manual_en.pdf) for more technical details. + +## Readily available example for the DS peripheral + +The ESP-IDF provides the example [mqtt/ssl_ds](https://github.com/espressif/esp-idf/tree/master/examples/protocols/mqtt/ssl_ds) to showcase the use of the DS peripheral . The example connects to the broker test.mosquitto.org using ssl transport with client certificate(RSA) and as a demonstration subscribes/unsubscribes, sends a message on certain topic. The RSA signature operation required in the ssl connection is performed with help of the Digital Signature (DS) peripheral. + +The example follows all of the above mentioned steps. A detailed explanation of the steps to perform the example is also provided in the [example README](https://github.com/espressif/esp-idf/blob/master/examples/protocols/mqtt/ssl_ds/README.md). + +If you would like to know more about TLS security then please see the article [TLS and IOT](/blog/esp32-tls-transport-layer-security-and-iot-devices) + +If you would like to know more about the other security features in the ESP32 series then you can see this article [Understanding ESP32’s Security Features](/blog/understanding-esp32s-security-features) diff --git a/content/blog/esp32-s2-is-here/img/esps-1.webp b/content/blog/esp32-s2-is-here/img/esps-1.webp new file mode 100644 index 000000000..4e081da64 Binary files /dev/null and b/content/blog/esp32-s2-is-here/img/esps-1.webp differ diff --git a/content/blog/esp32-s2-is-here/img/esps-2.webp b/content/blog/esp32-s2-is-here/img/esps-2.webp new file mode 100644 index 000000000..4cd9960ba Binary files /dev/null and b/content/blog/esp32-s2-is-here/img/esps-2.webp differ diff --git a/content/blog/esp32-s2-is-here/img/esps-3.webp b/content/blog/esp32-s2-is-here/img/esps-3.webp new file mode 100644 index 000000000..ba7af931b Binary files /dev/null and b/content/blog/esp32-s2-is-here/img/esps-3.webp differ diff --git a/content/blog/esp32-s2-is-here/img/esps-4.webp b/content/blog/esp32-s2-is-here/img/esps-4.webp new file mode 100644 index 000000000..a523705d5 Binary files /dev/null and b/content/blog/esp32-s2-is-here/img/esps-4.webp differ diff --git a/content/blog/esp32-s2-is-here/index.md b/content/blog/esp32-s2-is-here/index.md new file mode 100644 index 000000000..8deccfb5c --- /dev/null +++ b/content/blog/esp32-s2-is-here/index.md @@ -0,0 +1,75 @@ +--- +title: "ESP32-S2 Is Here!" +date: 2020-03-10 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - teo-swee-ann +tags: + - Esp32 S2 + - Espressif + - IoT + +--- +{{< figure + default=true + src="img/esps-1.webp" + >}} + +## Why Is ESP32-S2 Significant? + +We launched the ESP32-S2 chip and we are excited to announce that it is in mass production now. Personally, I think it’s a big thing; it’s something we have been working for, for many years: a Wi-Fi enabled MCU targeting connected low-cost low-power interactive sensors with these features: + +All these features add up to be a self-contained small form factor connected interactive secure computing and sensor device with a small LCD, such as a thermostat or a smart light switch. + +{{< figure + default=true + src="img/esps-2.webp" + >}} + +## Radio + +Transmit power on the client device is central to the quality of the wireless connection. Most routers have large linear amplifiers, while IOT client devices have more limitations on output power range. + +ESP32-S2 transmits at the maximum output power level while meeting the stringent spectral mask requirements. + +ESP32-S2 also has leading receiver sensitivity of -97 dBm. With the combination receive sensitivity and output power, the customer is guaranteed the best possible user experience for Wi-Fi connectivity. + +Importantly ESP32-S2 maintains this performance from -40°C to 105°C facilitating the applications such as light bulbs and industrial sensors. + +{{< figure + default=true + src="img/esps-3.webp" + >}} + +## GPIOs (Lots Of It) + +__ESP32-S2__ has 43 programmable GPIOs with all the standard peripheral support including USB-OTG. These standard peripheral enable different sensors and actuators interfacing. 14 IO pins can be configured for capacitive touch sense. This paired with available LCD interface can enable HMI interface for your devices. Availability of audio interfaces and sufficient compute power and memory expandability allows building streaming media solutions. + +{{< figure + default=true + src="img/esps-4.webp" + >}} + +## Touch Sensors and HMI + +Based on ESP32-S2, the highly-integrated kit provides an easy-to-use platform to develop HMI solutions with touch screen displays for use across a wide range of industrial and building automation, simplistic designs with touch pad and basic LED indicator screens or a more complex HMI systems with touchscreen and other features. ESP32-S2 touch sensors are able to withstand harsh environments and are resistant to dust, water, moisture. We can envision these type of devices used to improve the communication among various types of equipment throughout the facility benefiting in operation, safety and productivity. + +## Security + +With tiny MCU based devices becoming frontline soldiers of the IOT revolution, their security becomes an important aspect. The target attack surface is wide given the fact that these devices become first class citizens of the internet using standard communication protocols. ESP32-S2 supports secure boot and flash encryption with standard cryptographic protocols. RSA based secure boot ensures that only trusted software executes on the chip. AES-XTS based flash encryption ensures that the sensitive configuration data and application remain encrypted on the flash. In addition the cryptographic accelerators provide TLS connectivity with cloud servers with strongest cipher suites without any performance impact. It also comes with a high tolerance to physical fault injection attacks. You can find more information about these security features [here](/blog/esp32-s2-security-improvements). + +## ESP-IDF SDK + +[ESP-IDF](https://github.com/espressif/esp-idf) is Espressif’s open source RTOS based SDK that is already being used in millions of deployed products. The same SDK continues to supports ESP32-S2. Availability of commonly required software components and rich tooling makes it easy to develop and maintain your application firmware. It implements easy to use Wi-Fi network provisioning protocols, cloud support and over the air (OTA) software upgrades. [ESP-Jumpstart](https://docs.espressif.com/projects/esp-jumpstart/en/latest/introduction.html) running on ESP32-S2 offers a step-by-step production quality application reference for the developers. ESP-Rainmaker provides a quick way to realise production quality cloud connected devices. + +## Camera Support + +ESP32-S2 provides an 8/16 bit DVP camera interface that supports a maximum clock frequency of 40 MHz. Also, the DMA bandwidth is optimized for transferring high resolution images. + +We imagine that ESP32-S2 can be widely used in various IoT applications. It is suitable for variety of smart-home devices, industrial wireless control, wireless monitoring, wireless QR code scanners, wireless positioning systems and many other IoT applications. As always, we remain open to your valuable feedback. + +## Available Documentation + +- [*ESP32-S2 Datasheet*](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf) +- [ESP32-S2 Technical Reference Manual](https://www.espressif.com/sites/default/files/documentation/esp32-s2_technical_reference_manual_en.pdf) diff --git a/content/blog/esp32-s2-security-features/img/esps-1.webp b/content/blog/esp32-s2-security-features/img/esps-1.webp new file mode 100644 index 000000000..6368ffb42 Binary files /dev/null and b/content/blog/esp32-s2-security-features/img/esps-1.webp differ diff --git a/content/blog/esp32-s2-security-features/index.md b/content/blog/esp32-s2-security-features/index.md new file mode 100644 index 000000000..06fe05f73 --- /dev/null +++ b/content/blog/esp32-s2-security-features/index.md @@ -0,0 +1,69 @@ +--- +title: "ESP32-S2 — Security Features" +date: 2019-12-09 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - amey-inamdar +tags: + - Security + - ESP32-S2 +aliases: + - esp32-s2-security-improvements +--- +Espressif recently [announced](https://www.espressif.com/en/news/espressif-announces-%E2%80%A8esp32-s2-secure-wi-fi-mcu) ESP32-S2 — a new Wi-Fi SoC with additional security features and improvements over some of the ESP32 security features. Given the current state of the security of the connected devices, these are quite meaningful features. This article discusses these changes and what do they mean from security perspective. + +My colleague wrote about ESP32 security features [here](/blog/understanding-esp32s-security-features). We continue to carry forward *Secure Boot* and *Flash Encryption* features. ESP32-S2 improves these features further and also adds more security features. + +Detailed ESP32-S2 [datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf) and [technical reference manual](https://www.espressif.com/sites/default/files/documentation/esp32-s2_technical_reference_manual_en.pdf) are available now. + +## Secure Boot + +*Secure Boot* allows the ESP32-S2 to boot only trusted code. The BootROM (which can’t be modified and is trusted) verifies the software bootloader and software bootloader then verifies the application firmware to be trusted (authenticated) one. This is transitive trust model to ensure that the application is fully trusted. + +{{< figure + default=true + src="img/esps-1.webp" + >}} + +ESP32 BootROM uses a digest programmed in the eFUSE for validating the software bootloader. This digest based authentication uses AES symmetric encryption and SHA secure digest algorithm internally. + +ESP32-S2 implements a public key cryptography based signature verification mechanism in BootROM. The algorithm is RSA-PSS with 3072-bit keys. The device maker generates the RSA3072 public-private key pair. The private key remains with the device maker and the public key is programmed in the eFUSE of the device at the time of manufacturing. The software bootloader image carries the signature of the image signed using the private key corresponding to the public key in eFUSE. The BootROM verifies the authenticity of the software bootloader by verifying the signature of the software bootloader (the signature in fact contains a cryptographic hash of the software bootloader that is checked against the software bootloader image). + +The application firmware verification can happen using the same algorithm and same public-private key pair. + +ESP32-S2 has an improved hardware RSA accelerator and BootROM’s secure boot algorithm makes use of this to provide sub-100ms signature verification time. This results into significantly reduced boot up time of the device with secure boot enabled. This is a big improvement especially for those devices which can’t afford longer boot-up time — imagine a light bulb that needs to switch on immediately upon powering-on. + +## Flash Encryption + +Flash encryption allows the contents of the flash to remain encrypted for the data and code at rest. This is useful in two ways + +ESP32 uses AES256 cryptographic algorithm with key tweaking based on the flash offset. The flash encryption key stays in eFUSE and only the hardware has access to this key. While the key tweaking based on the flash offset adds to the security of AES256 protocol, it’s still a customised cryptographic implementation over which a standard implementation is preferred. + +ESP32-S2 has an improved scheme where it uses AES256-XTS based encryption scheme that is standard for the storage encryption where the random access needs to be supported. ESP32-S2 continues to use the eFUSE for the storage and access protection of the AES-XTS keys. + +## Digital Signature Peripheral + +This is a new hardware block added to ESP32-S2. This block is capable of allowing application to perform RSA digital signature operations without letting the application access the private key. Let’s first discuss the need for it. + +One compelling requirement for the Digital Signature Peripheral is considering the current device-cloud authentication. Most of the common device cloud implementations (AWS-IoT, Azure IoT, Google-IoT-Core to name a few) use (or support) X.509 certificate based mutual authentication. The cloud and device both have a private key and certificate with only certificate shared with the each other. With this, the cloud and device can both authenticate each other and if required cloud can revoke the service access to a specific device. So essentially the device private key is the device identity that needs to be protected. Any application vulnerability that gives the malicious user access to the device private key can compromise the device identity. The devices which require protection against such compromise typically use a separate hardware (HSM, smart-card, PIV dongles etc.) that secures the private key with itself and provides signing procedures with the stored device private key. However this adds to the cost of the device. + +ESP32-S2’s Digital Signature Peripheral allows the manufacturer to generate the symmetric encryption key that can be unique to each device and then encrypt the device private key with the same encryption key. At runtime, the Digital Signature Peripheral allows application to perform signing operation with this encrypted device private key without software being able to access the plaintext private key. The per-device unique encryption key also stops malicious user from recovering plaintext private keys or cloning them on other devices. + +Espressif also provides a pre-provisioned modules service where customers can order the modules that have the device certificates pre-generated in a secure fashion in Espressif factory. This when combined with the ESP32-S2’s Digital Signature Peripheral, greatly simplifies manufacturing of devices for device makers. + +## More eFUSE Memory + +ESP32 has 1024 bits of eFUSE memory out of which 256 bits are useable by the application. + +ESP32-S2 increases the eFUSE memory to 4096 bits with 2048 bits available for application’s use. This is useful when applications want to generate and use per-device unique identifiers for its own use. + +## Performance Improved Cryptographic Accelerators + +ESP32-S2 has improved performance of the RSA, ECC and AES hardware accelerators. The mbedTLS stack will continue to facilitate the use of hardware accelerators making the system performance better for the TLS communication over internet and local network. Of course these peripherals can be used directly as well based on the application’s requirement. + +## Resilience to Physical Fault Injection + +When malicious user has physical possession of the device, a glitching based fault injection can be used to make device behave in unintended way or to give undesired information out. There has been fault injection attack for ESP32 V1 SoC that allowed user to compromise security by reading encryption key or bypassing secure boot. ESP32-S2 has additional hardware and software checks in the bootROM that prevent physical voltage glitching. This hardening against physical fault injection attacks may be useful for certain product use-cases. + +ESP32-S2 has some additional security features. I’ll write about them adding them to the same blog in the near future. Please stay tuned! diff --git a/content/blog/esp32-s3-edge-ai-human-activity-recognition-using-accelerometer-data-and-esp-dl/img/esps-1.webp b/content/blog/esp32-s3-edge-ai-human-activity-recognition-using-accelerometer-data-and-esp-dl/img/esps-1.webp new file mode 100644 index 000000000..423cff03f Binary files /dev/null and b/content/blog/esp32-s3-edge-ai-human-activity-recognition-using-accelerometer-data-and-esp-dl/img/esps-1.webp differ diff --git a/content/blog/esp32-s3-edge-ai-human-activity-recognition-using-accelerometer-data-and-esp-dl/img/esps-2.webp b/content/blog/esp32-s3-edge-ai-human-activity-recognition-using-accelerometer-data-and-esp-dl/img/esps-2.webp new file mode 100644 index 000000000..837dd3986 Binary files /dev/null and b/content/blog/esp32-s3-edge-ai-human-activity-recognition-using-accelerometer-data-and-esp-dl/img/esps-2.webp differ diff --git a/content/blog/esp32-s3-edge-ai-human-activity-recognition-using-accelerometer-data-and-esp-dl/index.md b/content/blog/esp32-s3-edge-ai-human-activity-recognition-using-accelerometer-data-and-esp-dl/index.md new file mode 100644 index 000000000..80c19bb02 --- /dev/null +++ b/content/blog/esp32-s3-edge-ai-human-activity-recognition-using-accelerometer-data-and-esp-dl/index.md @@ -0,0 +1,332 @@ +--- +title: "ESP32-S3 Edge-AI|Human Activity Recognition Using Accelerometer Data and ESP-DL" +date: 2023-06-06 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - ali-hassan-shah +tags: + - AI + - Edge Computing + - Neural Networks + - Esp + - Recognition + +--- +Edge computing is a distributed computing paradigm that brings computation and data storage closer to the device’s location. Edge Artificial Intelligence (edge-AI) is an exciting development within edge computing because it allows traditional technologies to run more efficiently, with higher performance and less power. Trained neural networks are used to make inferences on small devices. The potential [applications areas](https://www.xenonstack.com/blog/edge-ai-use-case) of edge AI includes manufacturing, healthcare, the retail industry, surveillance, smart home, and finance banking. + +{{< figure + default=true + src="img/esps-1.webp" + >}} + +__Espressif System provides a framework ESP-DL that can be used to deploy your high-performance deep learning models on ESP32-S3.__ + +*In this article, you will understand how to read sensor data and using *[*ESP-DL*](https://github.com/espressif/esp-dl)* to *[*deploy*](https://github.com/espressif/esp-dl/tree/master/tutorial/quantization_tool_example)* a deep-learning model on *[*ESP32-S3*](https://www.espressif.com/en/products/socs/esp32-s3)*.* + +--- + +## Prerequisite for using ESP-DL + +Before getting a deep dive into ESP-DL, we assume that readers have knowledge about: + +- Building and training neural networks. ([Check out the basics of deep learning](https://www.youtube.com/watch?v=WvoLTXIjBYU)) +- ESP-IDF [release/v4.4](https://github.com/espressif/esp-idf/tree/release/v4.4) environment. (For more details, follow [setting-up ESP-IDF environment](https://www.youtube.com/watch?v=byVPAfodTyY) or [tool chain for ESP-IDF](/esp-idf-development-tools-guide-part-i-89af441585b)) +- Working knowledge of [basic C](https://www.youtube.com/watch?v=KJgsSFOSQv0&t=12665s) and C++ language +- Converting model into [ESP-DL formate](/hand-gesture-recognition-on-esp32-s3-with-esp-deep-learning-176d7e13fd37) + +__Note:__ Please use ESP-IDF release/v4.4 on the commit “cc71308e2fdce1d6d27fc52d39943f5d0fb83f35” to reproduce the same results + +--- + +## 1. Model Deployment + +A convolution neural network is designed using [accelerometer data](https://www.cis.fordham.edu/wisdm/dataset.php) to recognize human activity. + +**In this blog we will not focus on the *[*development*](https://www.youtube.com/watch?v=lUI6VMj43PE)* and conversion of neural networks to *[*ESP-Dl format*](/blog/hand-gesture-recognition-on-esp32-s3-with-esp-deep-learning)*.* + +## 1.1 ESP-IDF Project Hierarchy + +The Project directory should look like this: + +```shell +├── CMakeLists.txt +├── components +│ ├── bus +│ ├── mpu6050 +│ └── esp-dl +├── dependencies.lock +├── main +│ ├── app_main.cpp +│ └── CMakeLists.txt +├── model +│ ├── Activity_coefficient.cpp +│ ├── Activity_coefficient.hpp +│ └── model_define.hpp +├── partitions.csv +├── sdkconfig +├── sdkconfig.defaults +├── sdkconfig.defaults.esp32 +├── sdkconfig.defaults.esp32s2 +└── sdkconfig.defaults.esp32s3 +``` + +## 2. Model Define + +We will define our model in the ‘model_define.hpp’ file. Following the steps below with detailed explanation. When open in [Netron](https://netron.app/) our model looks like Figure 1 below. + +{{< figure + default=true + src="img/esps-2.webp" + >}} + +## 2.1 Import Libraries + +Import all the relevant libraries. Please [check here](https://github.com/espressif/esp-dl/tree/master/include/layer) for all the currently supported libraries by [ESP-DL](https://github.com/espressif/esp-dl). + +```c +#pragma once +#include "dl_layer_model.hpp" +#include "dl_layer_base.hpp" +#include "dl_layer_max_pool2d.hpp" +#include "dl_layer_conv2d.hpp" +#include "dl_layer_concat.hpp" +#include "Activity_coefficient.hpp" +#include "dl_layer_reshape.hpp" +#include "dl_layer_softmax.hpp" +#include + +using namespace dl; +using namespace layer; +using namespace Activity_coefficient; +``` + +## 2.2 Declare Layers + +The next step is to declare each layer. + +- Input is not considered a layer so it is not defined here. +- Except for the output layer, all the layers are declared as private layers. + +```c +class ACTIVITY : public Model +{ +private: + Conv2D l1; + Conv2D l2; + Reshape l3; + Conv2D l4; + Conv2D l5; + +public: + Softmax l6; +``` + +## 2.3 Initialize Layers + +After declaring the layers, Initialize each layer with its weight, biases, activation functions and shape. + +```c +ACTIVITY () : + l1(Conv2D(-13, get_statefulpartitionedcall_sequential_1_conv2d_2_biasadd_filter(), get_statefulpartitionedcall_sequential_1_conv2d_2_biasadd_bias(), get_statefulpartitionedcall_sequential_1_conv2d_2_biasadd_activation(), PADDING_VALID, {}, 1,1, "l1")), + l2(Conv2D(-13, get_statefulpartitionedcall_sequential_1_conv2d_3_biasadd_filter(), get_statefulpartitionedcall_sequential_1_conv2d_3_biasadd_bias(), get_statefulpartitionedcall_sequential_1_conv2d_3_biasadd_activation(), PADDING_VALID, {}, 1,1, "l2")), + l3(Reshape({1,1,2496},"l2_reshape")), + l4(Conv2D(-11, get_fused_gemm_0_filter(), get_fused_gemm_0_bias(), get_fused_gemm_0_activation(), PADDING_VALID, {}, 1, 1, "l3")), + l5(Conv2D(-9, get_fused_gemm_1_filter(), get_fused_gemm_1_bias(), NULL, PADDING_VALID,{}, 1,1, "l4")), + l6(Softmax(-14,"l5")){} +``` + +## 2.4 Building Layers + +The next step is to build each layer. For more information about building layers please check the [build function](https://github.com/espressif/esp-dl/tree/master/include/layer) of each layer. + +```c +void build(Tensor &input) + { + this->l1.build(input); + this->l2.build(this->l1.get_output()); + this->l3.build(this->l2.get_output()); + this->l4.build(this->l3.get_output()); + this->l5.build(this->l4.get_output()); + this->l6.build(this->l5.get_output()); + } +``` + +## 2.5 Call Layers + +In the end, connect these layers and call them one by one by using a call function. For more information about calling layers please check the c[all function](https://github.com/espressif/esp-dl/tree/master/include/layer) of each layer. + +```c +void call(Tensor &input) + { + this->l1.call(input); + input.free_element(); + + this->l2.call(this->l1.get_output()); + this->l1.get_output().free_element(); + + this->l3.call(this->l2.get_output()); + this->l2.get_output().free_element(); + + this->l4.call(this->l3.get_output()); + this->l3.get_output().free_element(); + + this->l5.call(this->l4.get_output()); + this->l4.get_output().free_element(); + + this->l6.call(this->l5.get_output()); + this->l5.get_output().free_element(); + + } +}; +``` + +## 3. Model Run + +Once our model is built, declare the input to our model and run the model on [ESP32-S3](https://www.espressif.com/en/products/socs/esp32-s3) in ‘app_main.cpp’. + +## 3.1 Import libraries + +```c +#include +#include +#include "esp_system.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "dl_tool.hpp" +#include "model_define.hpp" +#include "i2c_bus.h" +#include "mpu6050.h" +#include "driver/i2c.h" +#include "esp_log.h" +``` + +## 3.2 Declare Input + +The input to our neural network is taken from the [MPU6050](https://www.electronicwings.com/sensors-modules/mpu6050-gyroscope-accelerometer-temperature-sensor-module) accelerometer sensor. To read sensor data in real time, we use the [mpu6050 driver](https://components.espressif.com/components/espressif/mpu6050) from espressif. Every 4 seconds, the data will be stored in an array and fed to the network for predictions. + +```c +int input_height = 80; +int input_width = 3; +int input_channel = 1; +int input_exponent = -13; +float acc_xyz[240] = {0}; +int index_acc=0; +#define I2C_MASTER_SCL_IO 16 /*!< gpio number for I2C master clock */ +#define I2C_MASTER_SDA_IO 17 /*!< gpio number for I2C master data */ +#define I2C_MASTER_NUM I2C_NUM_0 /*!< I2C port number for master dev */ +#define I2C_MASTER_FREQ_HZ 400000 /*!< I2C master clock frequency */ +static i2c_bus_handle_t i2c_bus = NULL; +static mpu6050_handle_t mpu6050 = NULL; + +extern "C" void app_main(void) +{ + i2c_config_t conf = { + .mode = I2C_MODE_MASTER, + .sda_io_num = I2C_MASTER_SDA_IO, + .scl_io_num = I2C_MASTER_SCL_IO, + .sda_pullup_en = GPIO_PULLUP_ENABLE, + .scl_pullup_en = GPIO_PULLUP_ENABLE, + .clk_flags = 0, + }; + + conf.master.clk_speed = I2C_MASTER_FREQ_HZ; + i2c_bus = i2c_bus_create(I2C_MASTER_NUM, &conf); + mpu6050 = mpu6050_create(i2c_bus, MPU6050_I2C_ADDRESS); + uint8_t mpu6050_deviceid; + mpu6050_acce_value_t acce; + mpu6050_get_deviceid(mpu6050, &mpu6050_deviceid); + printf("mpu6050 device ID is: 0x%02x\n", mpu6050_deviceid); + mpu6050_set_acce_fs(mpu6050, ACCE_FS_4G); +while(1){ +for (int i=0 ;i<80; i++) +{ + mpu6050_get_acce(mpu6050, &acce); + acc_xyz[index_acc]=acce.acce_x; + index_acc=index_acc+1; + acc_xyz[index_acc]=acce.acce_y; + index_acc=index_acc+1; + acc_xyz[index_acc]=acce.acce_z; + index_acc=index_acc+1; + vTaskDelay(50 / portTICK_RATE_MS); +} +index_acc=0; +int16_t *model_input = (int16_t *)dl::tool::malloc_aligned_prefer(input_height*input_width*input_channel, sizeof(int16_t *)); + for(int i=0 ;i input; + +input.set_element((int16_t *) model_input).set_exponent(input_exponent).set_shape({input_height,input_width,input_channel}).set_auto_free(false); +``` + +## 3.4 Call model + +Call the model by calling the method forward and passing input to it. Use latency to calculate the time taken by ESP32-S3 to run the neural network. + +```c +ACTIVITY model; + dl::tool::Latency latency; + latency.start(); + model.forward(input); + latency.end(); + latency.print("\nActivity model", "forward");3. Future Directions +``` + +## 3.5 Monitor output + +The output is taken out from the public layer i.e l6. The result can be printed in the terminal. + +```c +float *score = model.l6.get_output().get_element_ptr(); + float max_score = score[0]; + int max_index = 0; + for (size_t i = 0; i < 6; i++) + { + printf("%f, ", score[i]*100); + if (score[i] > max_score) + { + max_score = score[i]; + max_index = i; + } + } + printf("\n"); + switch (max_index) + { + case 0: + printf("0: Downstairs"); + break; + case 1: + printf("1: Jogging"); + break; + case 2: + printf("2: Sitting"); + break; + case 3: + printf("3: Standing"); + break; + case 4: + printf("4: Upstairs"); + break; + case 5: + printf("5: Walking"); + break; + default: + printf("No result"); + } + printf("\n"); + } +} +``` + +## 4. Conclusion + +In conclusion, the current project offers exciting possibilities for various applications, including predictive maintenance in industrial settings, boxing punch recognition in sports using an accelerometer, and fall detection in healthcare. These are just a few examples that can be explored further. For those interested in accessing the source code, it is available on the [GitHub](https://github.com/alibukharai/Blogs/tree/main/Activity_detection) repository. diff --git a/content/blog/esp32-tls-transport-layer-security-and-iot-devices/img/esp-1.webp b/content/blog/esp32-tls-transport-layer-security-and-iot-devices/img/esp-1.webp new file mode 100644 index 000000000..848f74069 Binary files /dev/null and b/content/blog/esp32-tls-transport-layer-security-and-iot-devices/img/esp-1.webp differ diff --git a/content/blog/esp32-tls-transport-layer-security-and-iot-devices/img/esp-2.webp b/content/blog/esp32-tls-transport-layer-security-and-iot-devices/img/esp-2.webp new file mode 100644 index 000000000..28f429edd Binary files /dev/null and b/content/blog/esp32-tls-transport-layer-security-and-iot-devices/img/esp-2.webp differ diff --git a/content/blog/esp32-tls-transport-layer-security-and-iot-devices/index.md b/content/blog/esp32-tls-transport-layer-security-and-iot-devices/index.md new file mode 100644 index 000000000..4607271a7 --- /dev/null +++ b/content/blog/esp32-tls-transport-layer-security-and-iot-devices/index.md @@ -0,0 +1,109 @@ +--- +title: "ESP32: TLS (Transport Layer Security) And IoT Devices" +date: 2018-10-24 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Security + - IoT + - Esp32 + - Technology + +--- +{{< figure + default=true + src="img/esp-1.webp" + >}} + +TLS is the security component in the familiar *https *protocol,* *that we rely on for security on the Internet. A TLS connection between a device and the server ensures that the data exchange between them is secured from the multiple threats possible over an untrusted medium. The TLS connection typically includes mutual authentication of the communicating parties, secure key exchange, symmetric encryption and message integrity checks. + +As a recommendation, all the communication between a device and a remote server (cloud) *must* use TLS. Although the TLS layer will take care of all the components involved in the secure communication, as a device maker, you have to be aware of a few things while you are using the TLS session. Let’s quickly look at these: + +## CA Certificates (Server Validation) + +The TLS layer uses a CA certificate to validate that the server is really who it claims to be. Say your device needs to talk to *aws.amazon.com.* The CA certificate ensures that you are really talking to *aws.amazon.com* and not somebody who is impersonating (DNS Spoofing) them. + +During a TLS session establishment, the server presents a certificate to the device. One of the pieces of information encoded in this certificate is the server’s domain name (aws.amazon.com). This server’s certificate is signed by a CA (Certifying Authority). A CA certificate (different from the server’s certificate) present on the device helps validate this signature. If the signature is valid, then the server’s certificate is valid, and hence the domain name encoded in the certificate is valid. The TLS layer then ensures that this domain name in the certificate matches the domain name that we have connected to. + +{{< figure + default=true + src="img/esp-2.webp" + >}} + +A TLS connection typically expects a CA certificate to be passed to it as a session establishment parameter. For example in the ESP-IDF, this is the *cacert_pem_buf* parameter in the *esp_tls_cfg_t *structure. + +``` +esp_tls_cfg_t cfg = { + .cacert_pem_buf = server_root_cert_pem_start, + .cacert_pem_bytes = server_root_cert_pem_end - + server_root_cert_pem_start, +};struct esp_tls *tls= esp_tls_conn_http_new("https://aws.amazon.com", + &cfg); +``` + +In the code above, the server_root_cert_pem_start points to the start of the CA certificate that is embedded in the device’s firmware. + +Not specifying the certificate here implies that the server certificate validation check will be skipped. + +## Obtaining a CA Certificate + +If your server is hosted on a cloud infrastructure, your https endpoint will likely already have a certificate signed by some CA. In this case, you could fetch the CA certificate for your server’s endpoint using the following command: + +``` +$ openssl s_client -showcerts -connect hostname:443 < /dev/null +``` + +This prints out a list of certificates. The last certificate is the CA certificate that can be embedded in the device’s firmware. + +## Self-Signed Certificates + +Typically server certificates are signed by a CA like Verisign. But you also have the option of using your own key-certificate pair to sign the server’s certificate. This is the self-signed certificate. + +You may have your reasons to do this (your cloud provider charges you for certificates with your own domain name, you want to have more control your infrastructure etc). The following two things need to be noted in this context: + +- The onus of protecting the private key is now on you +- Self-signed certificates work as long as the client (in this case your device) is under control and you have a means of installing your certificate as a CA certificate on the client. For example, most web browsers will flag a server with self-signed certificate as a security-risk, since the browsers don’t have your certificate installed as a trusted CA certificate. + +## Updating Certificates on your Device + +Once you have the CA certificate embedded in your firmware, you have to make sure you update it when required. Typically, you may have to update the CA certificate + +- if you happen to change cloud service providers or your domain names or +- if your cloud service provider migrates to another CA or +- if the CA certificate’s time validity is going to expire + +If your CA certificate is embedded in the device firmware, you can update the CA certificates by doing an OTA firmware upgrade. The new firmware can contain the updated CA certificate to be used. + +Since devices in the field may come and go online based on their usage, it may not be guaranteed that all devices see the firmware upgrade just in time for you to make the switch. It is usually helpful to maintain a period of transition where devices can continue to support multiple CA certificates the old and the new. + +In the ESP-TLS API above, the *cacert_pem_buf *can point to a buffer that contains multiple CA certificates one after the other. The TLS module will then try to validate the server’s certificate using any of the trusted CA certificates in that buffer. + +## Debugging TLS Problems + +## 1. Memory Requirement + +The TLS session takes quite a bit of memory. You should have enough free heap memory while running TLS. Typically one TLS session requires about 5–6KB of additional stack and about 33–35KB of additional heap memory. Please make sure you have enough room in your heap while running the TLS session. + +## 2. Cipher Suites + +During the TLS session establishment the client and server negotiate the best possible cipher suite to be used for the session. Most of the typical cipher-suites supported by the servers these days are already enabled in IDF. But it may happen that some servers use a different combination of ciphers. + +If your TLS connection fails because of mismatched ciphers you may have to select those specific ciphers in the SDK configuration. This can be done by: + +``` +make menuconfig --> Component configuration --> mbedTLS --> And then selecting the appropriate ciphers that are missing +``` + +Note that enabling/disabling cipher suites from the SDK configuration will have a static and dynamic memory footprint impact. + +## 3. Identifying Certificate Validation Issues + +It is likely that once you deploy a CA certificate for verification, the TLS handshake may fail. This typically implies that there is some problem in certificate validation. Usually this may happen if you select the wrong CA certificate for validation. Additional information about the exact reason for failure can be known by using the following calls: + +``` +int flags = mbedtls_ssl_get_verify_result(&tls->ssl);char buf[100] = { 0, }; +mbedtls_x509_crt_verify_info(buf, sizeof(buf), " ! ", flags); +printf("Certificate Verification Failure Reason: %s\n", buf); +``` diff --git a/content/blog/esp32s-family-memory-map-101/img/esps-1.webp b/content/blog/esp32s-family-memory-map-101/img/esps-1.webp new file mode 100644 index 000000000..583efed0e Binary files /dev/null and b/content/blog/esp32s-family-memory-map-101/img/esps-1.webp differ diff --git a/content/blog/esp32s-family-memory-map-101/img/esps-10.webp b/content/blog/esp32s-family-memory-map-101/img/esps-10.webp new file mode 100644 index 000000000..c406ab821 Binary files /dev/null and b/content/blog/esp32s-family-memory-map-101/img/esps-10.webp differ diff --git a/content/blog/esp32s-family-memory-map-101/img/esps-11.webp b/content/blog/esp32s-family-memory-map-101/img/esps-11.webp new file mode 100644 index 000000000..ebdb59532 Binary files /dev/null and b/content/blog/esp32s-family-memory-map-101/img/esps-11.webp differ diff --git a/content/blog/esp32s-family-memory-map-101/img/esps-2.webp b/content/blog/esp32s-family-memory-map-101/img/esps-2.webp new file mode 100644 index 000000000..507498f52 Binary files /dev/null and b/content/blog/esp32s-family-memory-map-101/img/esps-2.webp differ diff --git a/content/blog/esp32s-family-memory-map-101/img/esps-3.webp b/content/blog/esp32s-family-memory-map-101/img/esps-3.webp new file mode 100644 index 000000000..0a89593a2 Binary files /dev/null and b/content/blog/esp32s-family-memory-map-101/img/esps-3.webp differ diff --git a/content/blog/esp32s-family-memory-map-101/img/esps-4.webp b/content/blog/esp32s-family-memory-map-101/img/esps-4.webp new file mode 100644 index 000000000..78d908e46 Binary files /dev/null and b/content/blog/esp32s-family-memory-map-101/img/esps-4.webp differ diff --git a/content/blog/esp32s-family-memory-map-101/img/esps-5.webp b/content/blog/esp32s-family-memory-map-101/img/esps-5.webp new file mode 100644 index 000000000..aa306f5bc Binary files /dev/null and b/content/blog/esp32s-family-memory-map-101/img/esps-5.webp differ diff --git a/content/blog/esp32s-family-memory-map-101/img/esps-6.webp b/content/blog/esp32s-family-memory-map-101/img/esps-6.webp new file mode 100644 index 000000000..6d03ea393 Binary files /dev/null and b/content/blog/esp32s-family-memory-map-101/img/esps-6.webp differ diff --git a/content/blog/esp32s-family-memory-map-101/img/esps-7.webp b/content/blog/esp32s-family-memory-map-101/img/esps-7.webp new file mode 100644 index 000000000..2d6280066 Binary files /dev/null and b/content/blog/esp32s-family-memory-map-101/img/esps-7.webp differ diff --git a/content/blog/esp32s-family-memory-map-101/img/esps-8.webp b/content/blog/esp32s-family-memory-map-101/img/esps-8.webp new file mode 100644 index 000000000..b8a5cf1ce Binary files /dev/null and b/content/blog/esp32s-family-memory-map-101/img/esps-8.webp differ diff --git a/content/blog/esp32s-family-memory-map-101/img/esps-9.webp b/content/blog/esp32s-family-memory-map-101/img/esps-9.webp new file mode 100644 index 000000000..5e047b5b5 Binary files /dev/null and b/content/blog/esp32s-family-memory-map-101/img/esps-9.webp differ diff --git a/content/blog/esp32s-family-memory-map-101/index.md b/content/blog/esp32s-family-memory-map-101/index.md new file mode 100644 index 000000000..68bf99369 --- /dev/null +++ b/content/blog/esp32s-family-memory-map-101/index.md @@ -0,0 +1,268 @@ +--- +title: "ESP32’s Family Memory Map 101" +date: 2023-09-25 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - marek-matej +tags: + - Esp32 Programming + - Esp32 + - IoT + - Soc + +--- +{{< figure + default=true + src="img/esps-1.webp" + >}} + +The performance and memory capabilities of the microcontrollers are increasing, and so is their complexity, especially when the users are responsible for mapping external memory chips such as Flash or SPIRAM by configuring a memory management unit. + +When I started to use Espressif ESP32’s series SoC’s with the [__*Zephyr RTOS*__ ](https://docs.zephyrproject.org/latest/index.html), quickly I realized that these SoC’s are a very different world, compared to my previous MCU experiences, which were mostly ARM-related. ARM Cortex-M’s - in most cases - uses Von-Neumann memory architecture, while the ESP32’s series of microcontrollers uses the Harvard memory architecture, which adds complexity. + +The primary source of knowledge about any SoC was always the datasheet or Technical Reference Manual of the part. Indeed it still is, but I found the ESP32's TRM — although very useful — quite challenging to read. Especially because there is a significant portion of important information buried in the long textual descriptions. + +This sparked the motivation to compile a visually rich and informative depiction of crucial information from the current versions of a TRM. This is intended to be used together with the SoC’s datasheets and TRM to help with a better understanding of the ESP32's family SoCs internals, which is crucial during the system and driver development - for example when porting to other platforms such as Zephyr RTOS. + +## Table of contents: + +## ESP32 + +The ESP32 is the Xtensa LX6 dual-core microcontroller, and it is the oldest SoC from the ESP32’s family of MCUs. + +The SoC has access to external Flash memory using the SPI interface. It can also access the external SPIRAM, but only on the data bus. + +Zephyr-RTOS support for the ESP32 devkit board can be found [__*here*__ ](https://docs.zephyrproject.org/latest/boards/). + +## ROM + +ROM memories hold the primary bootloader code and other library functions available to the end users. The content of the ROM memories is baked during the manufacturing process and cannot be changed. Please refer to the ECO versions of the ESP32 microcontroller for more detailed information. TLDR is to use the last ECOv3 and later ESP32 chip versions. + +## SRAM + +The ESP32 has three internal SRAM modules. The SRAM0 is 192kB, and it can be configured to use the first 64kB as MMU cache for the external memory access. When not used as a cache, the first 64kB can be read and written by either CPU from the instruction bus. + +The capacity of Internal SRAM1 is 128 KB. Either CPU can read and write this memory using the data and instruction bus. + +The address ranges of the instruction and the data bus are in reverse order (word-wise). + +## RTC-SRAM + +RTC-Fast Memory can be read and written by PRO_CPU only, at a given address range on the data bus or at the instruction bus. Unlike most other memory regions, RTC Fast memory cannot be accessed by the APP_CPU. + +RTC-Slow memory is r/w memory that can be accessed by either CPU via the instruction and data bus. + +The RTC memories can hold the data during the deep sleep period. + +## Instruction & data cache + +The instruction and data cache address space is a virtual address space where the external memories such as Flash or SPIRAM modules can be accessed by the instruction or the data bus. + +{{< figure + default=true + src="img/esps-2.webp" + >}} + +## Peripherals + +The ESP32 has 41 peripherals. Nearly all peripheral modules can be accessed by either CPU at the same address with a single exception of the PID controller which exists for each CPU and can be accessed only by its own CPU. + +## eFuse blocks + +The eFuse memory is the OTP memory where hardware and encryption settings are stored. Fundamentally, an eFuse is a single bit of non-volatile memory with the restriction that once an eFuse bit is programmed to 1, it can never be reverted to 0. + +{{< figure + default=true + src="img/esps-3.webp" + >}} + +For further information and all the details about the ESP32 SoC please refer to the latest [__*ESP32 Technical Reference Manual*__ ](https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf). + +## ESP32-S2 + +The ESP32-S2 microcontroller is the successor of ESP32 and although very similar it has a single core and slightly different memory composition. + +One of the improvements from ESP32 is the ability to access external SPI-ram on data and instruction buses, which means it can run programs and access the data. + +Zephyr-RTOS support for the ESP32-S2 devkit board can be found [__*here*__ ](https://docs.zephyrproject.org/latest/). + +## ROM + +ROM memories hold the primary bootloader code and other library functions available to the end users. The content of the ROM memories is baked during the manufacturing process and cannot be changed. + +## SRAM + +The ESP32-S2 consists of SRAM0 which can be configured as a hardware cache to access external memories. SRAM1 is r/w memory space addressed by the CPU on the data and instruction bus in the same order. + +## RTC-SRAM + +RTC-Slow memory can be accessed by the CPU via the instruction and data bus. But is also accessible via the peripheral bus 1 and 2. + +RTC-Fast is r/w memory that can be accessed by the CPU via the instruction and data bus. + +## Instruction & data cache + +The CPU accesses the external memories using the cache. Up to 7.5MB of address space can be accessed via the I-cache. Up to 4MB of address space can be used to access the I-Cache as read-only via the data bus. Up to 10.5MB of address space can be used to access the external Flash or SPIRAM. + +{{< figure + default=true + src="img/esps-4.webp" + >}} + +## Peripherals + +Peripherals on ESP32-S2 are accessed using two peripheral busses: PeriBus1 and PeriBus2. Each has its own address space at the data bus. + +The PeriBus1 features speculative reads to improve performance. This also means that not every access is valid. Therefore we need to use the volatile statement, or access registers such as FIFOs using the PeriBus2, which is slower but safe. + +## eFuse blocks + +The eFuse memory consists of 4096 bits of OTP memory where hardware and encryption settings are stored. Fundamentally, an eFuse is a single bit of non-volatile memory with the restriction that once an eFuse bit is programmed to 1, it can never be reverted to 0. + +{{< figure + default=true + src="img/esps-5.webp" + >}} + +For further information and all the details about the ESP32-S2 SoC please refer to the latest [__*ESP32-S2 Technical Reference Manual*__ ](https://espressif.com/sites/default/files/documentation/esp32-s2_technical_reference_manual_en.pdf). + +## ESP32-S3 + +The ESP32-S3 is the latest Xtensa LX7 CPU with a dual-core design. Besides two main cores, it has two ultra-low-power coprocessors based on Risc-V architecture. The SoC has a built-in JTAG debugger accessible via a USB interface. It can access external SPIRAM on data and instruction buses, which means it can run programs and access the data. + +Zephyr-RTOS support for the ESP32-S3 devkit board can be found [__*here*__ ](https://docs.zephyrproject.org/latest/). + +## ROM + +ROM memories hold the primary bootloader code and other library functions available to the end users. The content of the ROM memories is baked during the manufacturing process and cannot be changed. + +## SRAM + +There are three internal SRAM modules. The SRAM0 can be configured as an I-Cache buffer to access instructions from external memory or be used as static r/w memory via the instruction bus. SRAM1 is the r/w memory which can be accessed via the instruction and data bus. SRAM2 can be configured as D-Cache, or it can be accessed as static r/w memory via the data bus + +## RTC-SRAM + +RTC-Slow is r/w memory that can be accessed via the instruction and data bus. RTC-Fast is the r/w memory that can be accessed via the instruction and data bus on a given address range. + +## Instruction & data cache + +The CPUs can access external memories via the cached MMU address space. Memories can be accessed using I-Cache or D-Dache via instruction or data bus respectively. + +{{< figure + default=true + src="img/esps-6.webp" + >}} + +## Peripherals + +The peripherals (modules) can be accessed at their address range using the data and instruction bus. Each peripheral module has its own memory boundaries given by its base address and block size. Blocks size is usually 4kB long. For more details refer to device TRM. + +## eFuse blocks + +The eFuse memory consists of 4096 bits of OTP memory where hardware and encryption settings are stored. Fundamentally, an eFuse is a single bit of non-volatile memory with the restriction that once an eFuse bit is programmed to 1, it can never be reverted to 0. + +{{< figure + default=true + src="img/esps-7.webp" + >}} + +For further information and all the details about the ESP32-S3 SoC please refer to the latest [__*ESP32-S3 Technical Reference Manual*__ ](https://www.espressif.com/sites/default/files/documentation/esp32-s3_technical_reference_manual_en.pdf). + +## ESP32-C3 + +The ESP32-C3 is a 32-bit RISC-V microcontroller with the “IMC” extensions. The address space of ESP32-C3 is significantly simpler compared to its Xtensa counterparts. It supports JTAG debugging via the on-chip USB interface. + +Zephyr-RTOS support for the ESP32-C3 devkit board can be found [__*here*__ ](https://docs.zephyrproject.org/latest/boards/). + +## ROM + +ROM memories hold the primary bootloader code and other library functions available to the end users. The content of the ROM memories is baked during the manufacturing process and cannot be changed. + +## SRAM + +The ESP32-C3 has two SRAM modules. SRAM1 can be configured as the instruction cache buffer, or accessed as static r/w memory. The SRAM1 is a general-purpose r/w memory that can be accessed via instruction and data bus. + +## RTC-SRAM + +RTC-Fast memory is r/w memory that can be accessed via CPU instruction and data bus. + +## Instruction & data cache + +The ESP32-C3 supports SPI, dual-SPI, quad-SPI, and QPI interfaces to access the external Flash memory. It supports manual encryption and automatic decryption. The external flash can be accessed by the I-Cache or D-Cache on instruction or data bus respectively. + +{{< figure + default=true + src="img/esps-8.webp" + >}} + +## Peripherals + +The CPU can access the peripherals (modules) using the data or instruction bus on a given address space. Each peripheral has its own memory boundaries given by the base address and block size, which is usually 4kB. For details please refer to the TRM. + +## eFuse blocks + +The eFuse memory consists of 4096 bits of OTP memory where hardware and encryption settings are stored. Fundamentally, an eFuse is a single bit of non-volatile memory with the restriction that once an eFuse bit is programmed to 1, it can never be reverted to 0. + +{{< figure + default=true + src="img/esps-9.webp" + >}} + +For further information and all the details about the ESP32-C3 SoC please refer to the latest [__*ESP32-C3 Technical Reference Manual*__ ](https://www.espressif.com/sites/default/files/documentation/esp32-c3_technical_reference_manual_en.pdf). + +## ESP32-C6 + +The ESP32-C6 is a 32-bit RISC-V microcontroller with the “IMAC” extensions. The address space of ESP32-C6 is also significantly simpler compared to its Xtensa counterparts. It supports JTAG debugging via the on-chip USB interface. + +Zephyr-RTOS support for the ESP32-C6 devkit board is in progress. + +## ROM + +ROM memories hold the primary bootloader code and other library functions available to the end users. The content of the ROM memories is baked during the manufacturing process and cannot be changed. + +## SRAM + +The ESP32-C6 has two SRAM modules. + +HP-SRAM is static r/w memory that can be accessed by the HP CPU or LP CPU via the data bus or instruction bus in the same order. + +LP-SRAM is static r/w memory that can be accessed by the HP CPU or LP CPU via the data bus or instruction bus. It can be accessed using high-speed more or low-speed more. + +## Instruction & data cache + +ESP32-C6 supports SPI, dual-SPI, quad-SPI, or QPI interface to connect external Flash memory. It also supports manual encryption and automatic decryption to protect user data and code. + +{{< figure + default=true + src="img/esps-10.webp" + >}} + +## Peripherals + +The CPU can access the peripherals (modules) using the data or instruction bus on a given address space. Each peripheral has its own memory boundaries given by the base address and block size, which is usually 4kB. For details please refer to the TRM. + +## eFuse blocks + +The eFuse memory consists of 4096 bits of OTP memory where hardware and encryption settings are stored. Fundamentally, an eFuse is a single bit of non-volatile memory with the restriction that once an eFuse bit is programmed to 1, it can never be reverted to 0. + +{{< figure + default=true + src="img/esps-11.webp" + >}} + +For further information and all the details about the ESP32-C6 SoC please refer to the latest [__*ESP32-C6 Technical Reference Manual*__ ](https://www.espressif.com/sites/default/files/documentation/esp32-c6_technical_reference_manual_en.pdf). + +## Downloads + +Printable versions of the images in PDF format can be downloaded here: + +- [ESP32](https://dl.espressif.com/public/esp32-mm.pdf) +- [ESP32-S2](https://dl.espressif.com/public/esp32s2-mm.pdf) +- [ESP32-S3](https://dl.espressif.com/public/esp32s3-mm.pdf) +- [ESP32-C3](https://dl.espressif.com/public/esp32c3-mm.pdf) +- [ESP32-C6](https://dl.espressif.com/public/esp32c6-mm.pdf) + +## Conclusion + +Sometimes, when we need to understand something in-depth, we need to do a deep dive into very technical documents and extract the information in a way that we can use. Technical documents can be challenging to understand, especially when you are not familiar with a particular architecture or if you are not from that specific area. I hope that with this article, you will be able to easily understand the memory map of the ESP32 family and use it as a guide when diving deep into the TRMs and datasheets. diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-1.webp b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-1.webp new file mode 100644 index 000000000..f526afe8b Binary files /dev/null and b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-1.webp differ diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-10.webp b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-10.webp new file mode 100644 index 000000000..d77e4facc Binary files /dev/null and b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-10.webp differ diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-2.webp b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-2.webp new file mode 100644 index 000000000..1ca44287b Binary files /dev/null and b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-2.webp differ diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-3.webp b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-3.webp new file mode 100644 index 000000000..f7e00dc48 Binary files /dev/null and b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-3.webp differ diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-4.webp b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-4.webp new file mode 100644 index 000000000..aaf19df32 Binary files /dev/null and b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-4.webp differ diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-5.webp b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-5.webp new file mode 100644 index 000000000..3f894feda Binary files /dev/null and b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-5.webp differ diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-6.webp b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-6.webp new file mode 100644 index 000000000..1a0a55a17 Binary files /dev/null and b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-6.webp differ diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-7.webp b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-7.webp new file mode 100644 index 000000000..a6478510d Binary files /dev/null and b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-7.webp differ diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-8.webp b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-8.webp new file mode 100644 index 000000000..92acc57ea Binary files /dev/null and b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-8.webp differ diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-9.webp b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-9.webp new file mode 100644 index 000000000..af717c2e7 Binary files /dev/null and b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/img/espressif-9.webp differ diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/index.md b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/index.md new file mode 100644 index 000000000..c11e33908 --- /dev/null +++ b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-1/index.md @@ -0,0 +1,170 @@ +--- +title: "Espressif IDE and What’s new in v2.4.0 — Part 1" +date: 2022-03-01 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kondal-kolipaka +tags: + - v2.4.0 + - v2.4.1 + - Espressif Ide + - Idf Eclipse Plugin + - Esp Idf + - Espressif + - Eclipse + +--- +Espressif IDE is an Integrated Development Environment(IDE) based on Eclipse CDT for developing IoT Applications from end to end using the ESP-IDF(IoT Development Framework). It’s a standalone, customized IDE built specifically for ESP-IDF. Espressif IDE comes with the latest IDF Eclipse plugins, essential Eclipse CDT plugins, OpenOCD Plugins, and other third-party plugins from the Eclipse platform to support building ESP-IDF applications. + +{{< figure + default=true + src="img/espressif-1.webp" + >}} + +## Key features of Espressif IDE + +- Easy-to-use IDE built on Eclipse CDT environment +- Specifically built for ESP-IDF application development +- Integrated esp toolchain configuration for build +- Offers auto-configuration of the build environment variables +- Offers new project wizard and getting started ESP-IDF templates +- Advanced editing, compiling, and editing with syntax coloring features +- Pre-built function header and function definition navigation +- Offers to install a new ESP-IDF or configure an existing one +- ESP-IDF Tools installation and configuration directly from IDE +- SDK Configuration editor for project-specific settings +- Integrated [CMake Editor](https://github.com/15knots/cmakeed) for editing CMake files such as CMakeLists.txt +- CMake based build support +- Support for UART and JTAG flashing +- Customized ESP-IDF OpenOCD Debugging with pre-built configuration and settings +- GDB Hardware debugging support +- Integrated ESP-IDF serial monitor for viewing program serial output +- ESP-IDF Terminal with the pre-configured build environment variables +- Application size analysis editor for analyzing static memory footprint of your application +- Supports Heap profiling for memory analysis and finding memory leaks +- Supports GDB Stub debugging on panic mode +- Provides Application level tracing for analyzing program behavior using start and stop commands +- Supports ESP32, ESP32-S2, ESP32-S3 and ESP32-C3 chips +- English and Chinese language support for IDE +- Extensible IDE for other third-party plugins from Eclipse eco-system +- Host operating systems supported: Windows, macOS, and Linux + +## What’s new with the v2.4.0 release? + +With our recent release of v2.4.0/2.4.1, we have released a bunch of new features, enhancements, and notable bug fixes which greatly improve the quality of the plugin also improve user productivity! + +## Source code navigation and linking esp-idf components + +IDE offers integrated esp-idf components as part of the projects. When an IDF project is built all the dependent esp-idf components (based on the compile_commands.json) will be linked to the project with folder name *esp_idf_components*. + +This will help in two ways. First, the user should be able to browse through the esp-idf source code directly under the eclipse project explorer. Second, It allows navigating to the function definitions by pressing *F3* or *ctrl+ click*(in macOS *command+click*) on the function name. + +{{< figure + default=true + src="img/espressif-2.webp" + >}} + +## Indexer Improvements + +One of the challenging issue with the IDE was unresolved headers and indexer problems. Though the project was able to build successfully the eclipse plugin was used to show errors in the source code editors. With the v2.4.0 release, we have optimized the indexer to find the headers based on the compile_commands.json defined components and resolve the functions. + +As soon as the build finishes, the plugin will trigger linking esp-idf components and indexing all the files listed in it. This might take a couple of seconds based on the host system. These files located in the *esp_idf_components *folder are linked virtually to the esp-idf components folder and this list is refreshed every time after the build. + +## Application level tracing + +ESP-IDF provides a useful feature for program behavior analysis called [Application Level Tracing](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-guides/app_trace.html?). IDE has UI, that allows using start, stop tracing commands and process received data. To familiarize yourself with this library, you can use the [app_trace_to_host](https://github.com/espressif/esp-idf/tree/master/examples/system/app_trace_to_host) project. + +Before you start using application-level tracing, it is important to create a debug configuration for the project where you must select the board you are using in order to successfully start the OpenOCD server. + +After debug configuration is created, right-click on the project in the project explorer and click on *ESP-IDF: Application Level Tracing* + +It can take a while to open the application level tracing dialog because the OpenOCD server starts first, so you don’t need to start it externally. At the very top of the application-level trace dialog, there are auto-configured fields that you can change for the trace start command. + +{{< figure + default=true + src="img/espressif-3.webp" + >}} + +Trace Processing Script and Start Parsing Command are used to parse the output file. The first one is used to provide the path to the parsing script, by default it is logtrace_proc.py from esp-idf. In the second field, you can check the resulting parsing command and edit it if it’s necessary. By default, this field is automatically configured to match $IDF_PATH/tools/esp_app_trace/logtrace_proc.py/path/to/trace/file/path/to/program/elf/file. + +The Start parse button is disabled until a dump file is available. To generate it, click the Start button at the bottom of the dialog box. After you click, the button changes to Stop so that you can stop tracking. + +When the output file is generated, you can click on the Start parse button and you will see parse script output in the eclipse console. + +{{< figure + default=true + src="img/espressif-4.webp" + >}} + +Additional information can be found [here](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-guides/app_trace.html?). + +## Application memory usage in the build console + +Keeping track of memory usage is an important aspect of IoT applications. Now after the build, you should be able to see the application RAM and flash usage information. + +{{< figure + default=true + src="img/espressif-5.webp" + >}} + +## ESP-IDF Components Registry + +IDE offers to browse and install[ esp-idf components](https://components.espressif.com/) from the IDF registry and allows you to integrate them into your existing ESP-IDF project. + +Right-click on the project from project explorer in which you want to add the component to and Select *Install ESP-IDF Components*, this will show up all the available components in the UI. + +From the window, you can click on the Install button to add that component to the project. To get to the readme file for that component you can click on *More Info* which will open the browser link to the readme file of that component. + +{{< figure + default=true + src="img/espressif-6.webp" + >}} + +## GDBStub Debugging + +IDE offers to diagnose and debug esp-idf applications using GDBStub debugging on-chip when it’s in panic mode. + +To enable GDBStub debugging for a project you need to enable it first in the *sdkconfig*. Launch the sdkconfig in project root by double-clicking on it which will open the configuration editor. Expand the *Component Config* section and select *ESP System Settings*. From the settings on the right for *Panic Handler behavior* select the *GDBStub on Panic* option from the list + +{{< figure + default=true + src="img/espressif-7.webp" + >}} + +Now you will be taken to the GDBStub debugger automatically when you connect the serial monitor and there is a panic for this example create a template *hello_world* project and add the following lines in the main c file. + +This is a global variable* COREDUMP_DRAM_ATTR uint8_t global_var;* + +Now add these two lines just above *esp_restart()* function *global_var = 25; assert(0);* + +The final file should be something like this. + +{{< figure + default=true + src="img/espressif-8.webp" + >}} + +Build and flash the project and launch the serial monitor. On line number *45* we are signaling for a failing assert which will put the chip in panic mode and when that line reaches you will be prompted to switch the perspective to debug mode and the chip will be halted, remember that this is a panic mode and you cannot continue the execution from here you will have to stop and restart the chip through IDF commands or simply restart the serial monitor. + +You can view the registers stack trace and even view the value of variables in the stack frame. To exit the debug session simply press the *stop* button. + +{{< figure + default=true + src="img/espressif-9.webp" + >}} + +## Espressif Menu + +All the plugin contributed menu items are moved into the Espressif Menu and this will improve the user experience and easy accessibility! + +{{< figure + default=true + src="img/espressif-10.webp" + >}} + +## Eclipse 2021–12 Support + +IDF Eclipse plugin supports the latest version of Eclipse 2021–12(4.22) along with the Eclipse 2021–09 and Eclipse 2021–06. + +There are many other improvements and bug fixes that are part of the v2.4.0 release. Please check our [v2.4.0](https://github.com/espressif/idf-eclipse-plugin/releases/tag/v2.4.0) and [v2.4.1](https://github.com/espressif/idf-eclipse-plugin/releases/tag/v2.4.1) release pages for more details. diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-2/img/espressif-1.webp b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-2/img/espressif-1.webp new file mode 100644 index 000000000..2c4c04f26 Binary files /dev/null and b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-2/img/espressif-1.webp differ diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-2/img/espressif-2.webp b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-2/img/espressif-2.webp new file mode 100644 index 000000000..514c90a0e Binary files /dev/null and b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-2/img/espressif-2.webp differ diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-2/img/espressif-3.webp b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-2/img/espressif-3.webp new file mode 100644 index 000000000..7a7929b44 Binary files /dev/null and b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-2/img/espressif-3.webp differ diff --git a/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-2/index.md b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-2/index.md new file mode 100644 index 000000000..8f14b0ace --- /dev/null +++ b/content/blog/espressif-ide-and-whats-new-in-v2-4-0-part-2/index.md @@ -0,0 +1,88 @@ +--- +title: "Espressif IDE and What’s new in v2.4.0 — Part 2" +date: 2022-03-01 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kondal-kolipaka +tags: + - Espressif Ide + - Idf Eclipse Plugin + - Esp Idf + - Espressif + - Eclipse + +--- +This section will talk about Espressif IDE installation options that are available and platforms supported. + +Espressif IDE supports Windows, macOS, and Linux platforms. Please find the download links below to get started. + +[Espressif-IDE-2.4.1-win32.win32.x86_64.zip](https://dl.espressif.com/dl/idf-eclipse-plugin/ide/Espressif-IDE-2.4.1-win32.win32.x86_64.zip) + +[Espressif-IDE-2.4.1-macosx.cocoa.x86_64.tar.gz](https://dl.espressif.com/dl/idf-eclipse-plugin/ide/Espressif-IDE-2.4.1-macosx.cocoa.x86_64.tar.gz) + +[Espressif-IDE-2.4.1-linux.gtk.x86_64.tar.gz](https://dl.espressif.com/dl/idf-eclipse-plugin/ide/Espressif-IDE-2.4.1-linux.gtk.x86_64.tar.gz) + +## macOS security notice + +On macOS, if you download the Espressif-IDE archive with the browser, the strict security checks on recent macOS will prevent it to run, and complain that the program is damaged. That’s obviously not true, and the fix is simple, you need to remove the com.apple.quarantine extended attribute. + +``` +*$ xattr -d com.apple.quarantine ~/Downloads/Espressif-IDE-2.4.1-macosx.cocoa.x86_64.tar.gz* +``` + +After un-archiving, if the application still complains, check/remove the attribute from the Espressif-IDE.app folder too: + +``` +*$ xattr -dr com.apple.quarantine ~/Downloads/Espressif-IDE.app* +``` + +## Espressif-IDE v2.4.0 Installer (All-in-one package) for Windows OS + +Espressif-IDE Installer is an offline installer and it comes with all the required components to work with the ESP-IDF Application development. + +The installer deploys the following components: + +- ESP-IDF v4.4 +- Espressif-IDE (based on Eclipse 2021–12) +- Amazon Corretto OpenJDK 11.0.14 +- Drivers — FTDI chip, WinUSB support for JTAG +- Embedded Python +- Cross-compilers +- OpenOCD +- CMake and Ninja build tools + +As Installer bundles, all the required components and tools including stable esp-idf so people behind corporate firewalls can use the whole solution out-of-box. This also configures all the required build environment variables and tool paths as you launch the IDE. All you could do is to get started with your project directly without manually configuring anything. This will give you a big boost to your productivity! + +The All-in-one installer option is a recommended approach if someone trying for the first time in Windows OS or has challenges in installing tools. + +Espressif-IDE Installer for Windows OS is available [here](https://dl.espressif.com/dl/esp-idf/) for download. The latest version of Espressif-IDE is v2.4.1 but you get as part of the installer is v2.4.0 so one has to update to the latest using the [update site](https://github.com/espressif/idf-eclipse-plugin#installing-idf-plugin-using-update-site-url) + +Installation instructions are similar to what is described [here](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/windows-setup.html#esp-idf-tools-installer) for the ESP-IDF Tools installer. Always prefer *Full Installation *during the setup. + +{{< figure + default=true + src="img/espressif-1.webp" + >}} + +Once the installation completes you could launch the Espressif-IDE from the desktop shortcut and this will pre-configure everything required to build the ESP-IDF project. + +When you launch the IDE for the first time it will pop up with the Welcome page! + +{{< figure + default=true + src="img/espressif-2.webp" + >}} + +To verify Installed tools version and product information in general, you could navigate to the *Espressif *menu and click on the *Product Information *option. + +{{< figure + default=true + src="img/espressif-3.webp" + >}} + +Once you’re able to see all the tools, IDF_PATH, IDF_PYTHON_PATH, PATH, and other environment information correctly in the console, you are set to get started with the HelloWorld project! + +Check our IDE [documentation](https://github.com/espressif/idf-eclipse-plugin#esp-idf-eclipse-plugin) page for more information! + +Happy coding! diff --git a/content/blog/espressif-ide-lsp-support/index.md b/content/blog/espressif-ide-lsp-support/index.md index 09456f19b..3d5ee4fe0 100644 --- a/content/blog/espressif-ide-lsp-support/index.md +++ b/content/blog/espressif-ide-lsp-support/index.md @@ -2,6 +2,7 @@ title: "Espressif-IDE v3.0.0 — LSP Support for C/C++ Editor" date: 2024-06-28 showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" tags: ["News", "Espressif IDE", "LLVM", "Eclipse"] authors: - "kondal-kolipaka" diff --git a/content/blog/espressif-receives-investment-from-intel-capital-and-beijing-singularity-power-investment-fund/img/espressif-1.webp b/content/blog/espressif-receives-investment-from-intel-capital-and-beijing-singularity-power-investment-fund/img/espressif-1.webp new file mode 100644 index 000000000..30bc723d4 Binary files /dev/null and b/content/blog/espressif-receives-investment-from-intel-capital-and-beijing-singularity-power-investment-fund/img/espressif-1.webp differ diff --git a/content/blog/espressif-receives-investment-from-intel-capital-and-beijing-singularity-power-investment-fund/img/espressif-2.webp b/content/blog/espressif-receives-investment-from-intel-capital-and-beijing-singularity-power-investment-fund/img/espressif-2.webp new file mode 100644 index 000000000..c1c030fd4 Binary files /dev/null and b/content/blog/espressif-receives-investment-from-intel-capital-and-beijing-singularity-power-investment-fund/img/espressif-2.webp differ diff --git a/content/blog/espressif-receives-investment-from-intel-capital-and-beijing-singularity-power-investment-fund/index.md b/content/blog/espressif-receives-investment-from-intel-capital-and-beijing-singularity-power-investment-fund/index.md new file mode 100644 index 000000000..ac50fd3cd --- /dev/null +++ b/content/blog/espressif-receives-investment-from-intel-capital-and-beijing-singularity-power-investment-fund/index.md @@ -0,0 +1,61 @@ +--- +title: "Espressif Receives Investment from Intel Capital and Beijing Singularity Power + Investment Fund" +date: 2018-05-08 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Announcements + +--- +Espressif Systems (or “Espressif”), a leading global IoT semiconductor company, announced today that it has received investment co-led by Intel Capital and Beijing Singularity Power Investment Fund L.P. (SPC). + +{{< figure + default=true + src="img/espressif-1.webp" + >}} + +Espressif Systems’ Founder and CEO Swee Ann Teo (1st from left) and the CEOs of other invested companies + +Espressif helps power the devices that are key to the Internet-of-Things (IoT) industry. The company’s IoT chipsets provide dual-mode connectivity (Wi-Fi & BT/BLE), powered by a 32-bit, single- or dual-core processor in all-in-one SoCs with excellent price performance. Gartner profiled Espressif in the category of “Cool Vendors in ‘IoT Thingification’ 2016,” and Techno Systems Research Co. Ltd, a Japan market research company, ranked Espressif first in the MCU Embedded WiFi sector in 2017. With highly integrated MCU embedded Wi-Fi solutions, such as the popular ESP32 and ESP8266, Espressif achieved sales of one hundred million IoT chipsets by the end of 2017. This new round of investment is another milestone in Espressif’s development and will strengthen the company’s R&D capabilities and help increase its market influence. + +{{< figure + default=true + src="img/espressif-2.webp" + >}} + +Espressif Systems’ Founder and CEO Swee Ann Teo at the Intel Capital Global Summit + +Espressif Founder and CEO Swee Ann Teo said: “We are honored to receive investment from Intel Capital and SPC. This new funding will assist our expansion in the field of Artificial Intelligence, take our IoT solutions to the next level and allow us to remain at the forefront of today’s technological innovation.” + +Anthony Lin, Intel Capital Vice President and Managing Director of Greater Asia and Europe, commented: “Intel Capital is committed to propelling data-driven technological innovation and promoting the transformation of smart technology industries. Espressif has demonstrated its ability to create innovative IoT solutions with a competitive edge. We look forward to working with the company to help unlock the potential for data in a new era of smart and connected devices.” + +Wang Jiaheng, Managing Director of SPC, stated: “Espressif Systems is a leading company in the IoT industry and has gained a competitive advantage in the field of embedded Wi-Fi solutions by building a reputation for delivering innovative products. The company has a track record of responding to customer needs and constantly improving user experience with cost-effective and easy-to-use IoT solutions. With this investment deal, SPC offers Espressif the opportunity to seize momentum in China’s rapidly developing semiconductor industry by further optimizing its own strategic and operational capabilities, while also contributing to the rapid growth of the IoT industry.” + +__About Espressif Systems__ + +Espressif Systems (Shanghai, China) is a multinational, fabless, semiconductor company that creates low-cost and high-performance solutions for the Internet-of-Things industry. The company’s all-in-one system-on-chips (SoCs), such as the popular ESP8266 and ESP32, provide dual-mode connectivity (Wi-Fi+BT/BLE) to a wide range of IoT products, including tablets, cameras, smart-home devices and wearable electronics. For more information on the products and services that Espressif offers, visit [www.espressif.com](https://www.espressif.com/en). + +__About Intel Capital__ + +Intel Capital invests in innovative startups targeting artificial intelligence, autonomous driving, workload accelerators, 5G connectivity, virtual reality and a wide range of other disruptive technologies. Since 1991, Intel Capital has invested US $12.3 billion in over 1,530 companies worldwide, and more than 660 portfolio companies have gone public or been acquired. For more information on what makes Intel Capital one of the world’s most powerful venture capital firms, visit [www.intelcapital.com](http://www.intelcapital.com/) or follow [@Intelcapital](https://twitter.com/intelcapital). + +__About Beijing Singularity Power Investment Fund L.P. (SPC)__ + +Beijing Singularity Power Investment Fund L.P. (SPC) was initiated and established in 2015 by the BOE Technology Group, National IC Industry Investment Fund, Yizhuang SDIC, and industry leaders. SPC is headquartered in Yizhuang, Beijing, and has research centers in such areas such as Zhongguancun in Beijing and Silicon Valley in the USA. The initial investable funds of SPC totaled RMB 4bn (USD 600m). SPC mainly focuses on integrated-circuit design, human-computer interaction, the Internet of Things and Artificial Intelligence. + +__Media Contact:__ + +__Espressif Systems__ + +Email: pr@espressif.com + +__Ogilvy PR__ + +Joyce Li, Director + +Tel: +86 10 8520 3305 + +Email: joycey.li@ogilvy.com diff --git a/content/blog/espressif-thread-border-router/img/espressif-1.webp b/content/blog/espressif-thread-border-router/img/espressif-1.webp new file mode 100644 index 000000000..9b6c46c82 Binary files /dev/null and b/content/blog/espressif-thread-border-router/img/espressif-1.webp differ diff --git a/content/blog/espressif-thread-border-router/img/espressif-2.webp b/content/blog/espressif-thread-border-router/img/espressif-2.webp new file mode 100644 index 000000000..d318ffc9a Binary files /dev/null and b/content/blog/espressif-thread-border-router/img/espressif-2.webp differ diff --git a/content/blog/espressif-thread-border-router/img/espressif-3.webp b/content/blog/espressif-thread-border-router/img/espressif-3.webp new file mode 100644 index 000000000..f4264da60 Binary files /dev/null and b/content/blog/espressif-thread-border-router/img/espressif-3.webp differ diff --git a/content/blog/espressif-thread-border-router/index.md b/content/blog/espressif-thread-border-router/index.md new file mode 100644 index 000000000..b9acd4cdb --- /dev/null +++ b/content/blog/espressif-thread-border-router/index.md @@ -0,0 +1,95 @@ +--- +title: "Espressif Thread Border Router" +date: 2023-06-14 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - shu-chen +tags: + - Esp32 + - IoT + - Open Thread + +--- +We are glad to announce that the Espressif Thread Border Router (ESP Thread BR) solution has received [certification](https://www.espressif.com/sites/default/files/Espressif%20Thread%20Border%20Router%20Thread%20V1.3%20Interoperability%20Certification_0.pdf) from the Thread Group, and the accompanying development kit has now been officially released. + +This blog post will delve into the technical aspects of the solution and explore the benefits it offers, facilitating faster time-to-market for our customers’ products. + +## What’s a Thread Border Router? + +As defined in the [Thread Border Router White Paper](https://www.threadgroup.org/Portals/0/documents/support/ThreadBorderRouterWhitePaper_07192022_4001_1.pdf): + +> A Border Router is a device that can route packets to and from the mesh. This routing happens between the Thread mesh and any other IPbearing interfaces like Wi-Fi, Ethernet, and Cellular. + +## ESP Thread BR Architecture + +ESP Thread BR solution is based on the combination of Espressif’s Wi-Fi and 802.15.4 SoCs, built on the ESP-IDF and open-source OpenThread stack. + +{{< figure + default=true + src="img/espressif-1.webp" + >}} + +Unlike the well-known [ot-br-posix](https://github.com/openthread/ot-br-posix) solution that is Linux/Unix-based, the ESP Thread BR is built on the ESP-IDF framework, incorporating integrated components such as Wi-Fi and 802.15.4 stacks, LwIP, mDNS, and more. + +In the solution, the Host Wi-Fi SoC operates the Espressif Thread BR and OpenThread Core stack, while the 802.15.4 SoC runs the OpenThread RCP (Radio Co-processor). Communication between the two is established through the [Spinel protocol](https://openthread.io/platforms/co-processor#spinel_protocol). + +{{< figure + default=true + src="img/espressif-2.webp" + >}} + +## ESP Thread BR Features + +## Networking Features + +A previous blog [Thread Border Router in Matter](/matter-thread-border-router-in-matter-240838dc4779) introduces the role of the Thread Border Router in Matter scenario. Here are the key networking features supported by the ESP Thread BR: + +- __Bi-directional IPv6 connectivity__ + +Enable bi-directional IPv6 communication across Thread and non-Thread networks, it currently supports both Wi-Fi and Ethernet as the backbone link. + +- __Service Discovery__ + +Implements the functions for bi-directional service discovery, including the Service Registry Protocol (SRP) server, Advertising Proxy, and Discovery Proxy. These functions facilitate zero-configuration discovery of services offered by Thread Devices, as well as services offered by non-Thread devices. + +- __Multicast Forwarding__ + +Implements the Multicast Listener Discovery v2 (MLDv2) protocol and enables seamless IPv6 multicast across Thread, Wi-Fi, and Ethernet networks. + +- __NAT64__ + +The Thread devices can access the IPv4 internet via the ESP Thread BR. + +*Note: Although NAT64 is not a mandatory feature for the Matter scenario, as Matter is primarily designed for local network applications, it does facilitate point-to-point communication between Thread devices and cloud services.* + +## Production Features + +In addition to the networking features, the Espressif Thread BR SDK also supports multiple useful features for productization. + +- __RCP Update__ + +As the solution involves two SoCs, it requires the download of two matching firmware for over-the-air (OTA) updates. The SDK offers a mechanism that combines the two firmware into a single binary. With a streamlined one-step OTA process, the host SoC will automatically download the RCP firmware to the 802.15.4 SoC during the initial boot. + +- __RF Coexistence__ + +The coexistence design is often a challenging aspect for devices that incorporate multiple radios. The Espressif Thread BR addresses this issue by leveraging an integrated hardware and software design, offering the 3-wires PTA Coexistence feature in the SDK. This feature greatly simplifies the complexity of the customer’s application. + +- __Web GUI__ + +Additionally, the SDK offers a user-friendly web-based GUI for easy configuration by the user. Moreover, the provided REST APIs are compliant with the APIs offered by [ot-br-posix](https://github.com/openthread/ot-br-posix), ensuring compatibility and seamless integration. + +## HW Reference and SW SDK + +The Espressif Thread BR SDK is available on GitHub: + +[https://github.com/espressif/esp-thread-br](https://github.com/espressif/esp-thread-br) + +[https://docs.espressif.com/projects/esp-thread-br](https://docs.espressif.com/projects/esp-thread-br) + +The Hardware reference design and dev kits are also available ([link](https://www.aliexpress.com/item/1005005688193617.html?spm=5261.ProductManageOnline.0.0.56162ddbyxG7Gb)): + +{{< figure + default=true + src="img/espressif-3.webp" + >}} diff --git a/content/blog/espressifs-alexa-sdk-v1/index.md b/content/blog/espressifs-alexa-sdk-v1/index.md new file mode 100644 index 000000000..d29b0a265 --- /dev/null +++ b/content/blog/espressifs-alexa-sdk-v1/index.md @@ -0,0 +1,46 @@ +--- +title: "Espressif’s Alexa SDK v1.0b1!" +date: 2018-09-24 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - ESP32 + - Alexa + - IoT + - Framework +aliases: + - espressifs-alexa-sdk-v1-0b1 +--- +The Espressif’s Alexa SDK v1.0b1 is now available on github here: [https://github.com/espressif/esp-avs-sdk](https://github.com/espressif/esp-avs-sdk) + +This is a low-footprint C-based SDK that includes support for all of the following features: + +- __Conversations__ (Calendar, Shopping, News, Todo, Info, Movies, Sports) +- __Music/Audio Services__ : Amazon Prime Music, Audible, Kindle, TuneIn and iHeartRadio +- __Alerts__ : Alarms, Timers, Reminders and Notifications + +## Supported Hardware + +By default, the SDK supports [ESP32-LyraT](https://www.espressif.com/en/products/hardware/esp32-lyrat) development boards. + +The SDK is so structured that it should be easily possible to support other hardware configurations. + +## Getting Started + +Instructions for building, flashing and using the firmware are available here: [https://github.com/espressif/esp-avs-sdk/tree/master/examples/lyrat_alexa](https://github.com/espressif/esp-avs-sdk/tree/master/examples/lyrat_alexa) + +## Hands-Free Mode/Wake-Word Engine + +The SDK also supports hands-free mode of operation. The example [lyrat_alexa_sr/](https://github.com/espressif/esp-avs-sdk/tree/master/examples/lyrat_alexa_sr) is provided that demonstrates the use in a hands-free mode (activity triggered based on saying ‘Alexa’ instead of pushing a button). + +As discussed in a previous article, [Anatomy of a Voice-Integrated Device](/blog/anatomy-of-a-voice-integrated-device), multiple configurations are possible given the micro-controller, DSP and the wake-word engine. The example [lyrat_alexa_sr/](https://github.com/espressif/esp-avs-sdk/tree/master/examples/lyrat_alexa_sr) demonstrates the scenario where the Alexa client as well as the WWE is running on ESP32. + +## Phone Apps + +The SDK release also includes a phone app for Android for performing (a) network configuration of the development board and (b) Authentication with Amazon. The source code for this app is also available here: [https://github.com/espressif/esp-idf-provisioning-android/tree/versions/avs](https://github.com/espressif/esp-idf-provisioning-android/tree/versions/avs). It can be easily modified to add your Alexa project’s ID and credentials. It can also be easily customized to the branding and look-and-feel of your products. + +## Production Ready + +We offer a complete production-ready solution that includes all Alexa features, reference phone app implementations and hardware reference designs. If you are interested in building commercial products with this, please reach out to us. diff --git a/content/blog/espresso-machine/index.md b/content/blog/espresso-machine/index.md index d1a0bc67a..ab6da8d12 100644 --- a/content/blog/espresso-machine/index.md +++ b/content/blog/espresso-machine/index.md @@ -2,6 +2,7 @@ title: "Espresso Machine PID controller using ESP32 and RainMaker" date: 2024-06-19T10:18:17+08:00 showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" authors: - "raffael-rostagno" tags: ["ESP32", "ESP-IDF", "RainMaker"] diff --git a/content/blog/extending-esp-rainmaker-with-services/img/extending-1.webp b/content/blog/extending-esp-rainmaker-with-services/img/extending-1.webp new file mode 100644 index 000000000..7f2647d34 Binary files /dev/null and b/content/blog/extending-esp-rainmaker-with-services/img/extending-1.webp differ diff --git a/content/blog/extending-esp-rainmaker-with-services/img/extending-2.webp b/content/blog/extending-esp-rainmaker-with-services/img/extending-2.webp new file mode 100644 index 000000000..6cf9dec05 Binary files /dev/null and b/content/blog/extending-esp-rainmaker-with-services/img/extending-2.webp differ diff --git a/content/blog/extending-esp-rainmaker-with-services/img/extending-3.webp b/content/blog/extending-esp-rainmaker-with-services/img/extending-3.webp new file mode 100644 index 000000000..6c5b42ac9 Binary files /dev/null and b/content/blog/extending-esp-rainmaker-with-services/img/extending-3.webp differ diff --git a/content/blog/extending-esp-rainmaker-with-services/img/extending-4.webp b/content/blog/extending-esp-rainmaker-with-services/img/extending-4.webp new file mode 100644 index 000000000..6c81dc124 Binary files /dev/null and b/content/blog/extending-esp-rainmaker-with-services/img/extending-4.webp differ diff --git a/content/blog/extending-esp-rainmaker-with-services/index.md b/content/blog/extending-esp-rainmaker-with-services/index.md new file mode 100644 index 000000000..9d74dfede --- /dev/null +++ b/content/blog/extending-esp-rainmaker-with-services/index.md @@ -0,0 +1,172 @@ +--- +title: "Extending ESP RainMaker with “Services”" +date: 2022-01-12 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - piyush-shah +tags: + - Esp32 + - Rainmaker + - Espressif + +--- +{{< figure + default=true + src="img/extending-1.webp" + >}} + +[*If you have been following the Espressif blogs and announcements, you must already be aware of ESP RainMaker and its various features. If not, please check out the info *[*here*](https://rainmaker.espressif.com/)* so that you get an idea about what ESP RainMaker is before you proceed further*.] + +One important aspect of RainMaker is that the cloud is very thin and acts as a tunnel between the ESP nodes and clients like mobile phones, Alexa, GVA, etc. This makes it very flexible and extensible allowing users to create any type of device with any kind of functionality and access it from the phone apps. There are some defaults that we have defined, but they are not mandatory to use and you can create your own device/param types. + +The functionality that a RainMaker node supports is communicated by the node using something called as the [node configuration](https://rainmaker.espressif.com/docs/node-cloud-comm.html#node-configuration). This, broadly has 2 parts. + +Most RainMaker users are now well versed with the concept of devices since they are very much visible in the examples. However, the concept of “services” may not be clear because it is hidden under the APIs like __esp_rmaker_system_service_enable(), esp_rmaker_schedule_enable()__ or __esp_rmaker_timezone_service_enable()__ and used internally by the phone apps. + +Structurally, a service is very similar to a device. It has a “name” and “type” and a set of parameters. That’s one reason why all device specific APIs are applicable even to services. This applies not just to the firmware APIs, but even to the cloud APIs. The same [GET /user/nodes?node_details=true](https://swaggerapis.rainmaker.espressif.com/#/User%20Node%20Association/getUserNodes), [GET /user/nodes/config](https://swaggerapis.rainmaker.espressif.com/#/User%20Node%20Association/getUserNodeConfiguration) and [GET/PUT /user/nodes/params](https://swaggerapis.rainmaker.espressif.com/#/Node%20Parameter%20Operations) APIs that are used for devices are applicable for services. + +You can find some standard services [here](https://github.com/espressif/esp-rainmaker/blob/master/components/esp_rainmaker/src/standard_types/esp_rmaker_standard_services.c), but the purpose of this post is to help understand how to add your own custom service. + +## Defining the Use Case + +Naturally, before you even write a service, you need to define your use case, which will then help you define the parameters of the service. Let’s consider a use case of “Diagnostics” wherein you want the users to trigger some diagnostics on the node and get the diagnostic data in the phone app. + +## Creating the service + +The code snippet below is the minimal code required to create a service. It basically has 4 components + +If the overall number of values in diagnostic data is small, it would be ok to define separate integer/bool/float/string parameters for each (“Timestamp” in above example). But if the data is going to be large, it is recommended to use an “object” type (“Data” in above example) and then pass whatever JSON object you want. + +1. Creating the service. +2. Registering a callback. +3. Creating and adding parameters as applicable. +4. Adding it to the node. + +```c +/* Create the service using esp_rmaker_service_create(). However, note that a service uses esp_rmaker_device_t + * as the data type, since it is structurally same as a device. + */ +esp_rmaker_device_t *diag_service = esp_rmaker_service_create("Diagnostics","my.service.diag", NULL); + +/* Register the write callback. Read callback would normally be NULL */ +esp_rmaker_device_add_cb(diag_service, diag_write_cb, NULL); + +/* Create and add paramaters of various types as applicable. + * Parameter types (like my.param.diag-trigger) are not mandatory, but useful to have. + */ +esp_rmaker_device_add_param(diag_service, esp_rmaker_param_create("Trigger", "my.param.diag-trigger", esp_rmaker_bool(false), PROP_FLAG_WRITE)); +esp_rmaker_device_add_param(diag_service, esp_rmaker_param_create("Timestamp", "my.param.diag-timestamp", esp_rmaker_int(0), PROP_FLAG_READ)); +esp_rmaker_device_add_param(diag_service, esp_rmaker_param_create("Data", "my.param.diag-data", esp_rmaker_obj("{}"), PROP_FLAG_READ)); + +/* Add the service to the node */ +esp_rmaker_node_add_device(node, diag_service); +``` + +Note that none of these parameters are mandatory and are shown just for reference. + +The above service will show up in the node configuration as this object under the services array: + +{{< figure + default=true + src="img/extending-2.webp" + >}} + +Similarly, the following will show up in the node parameters object + +{{< figure + default=true + src="img/extending-3.webp" + >}} + +## Handling Service callbacks + +As you can see in the code snippet above, we have registered diag_write_cb as the service write callback. Let us see a sample implementation of this. + +```c +#include +static esp_err_t diag_write_cb(const esp_rmaker_device_t *device, const esp_rmaker_param_t *param, + const esp_rmaker_param_val_t val, void *priv_data, esp_rmaker_write_ctx_t *ctx) +{ + /* This ctx check is just to find if the request was received via Cloud, Local network or Schedule. + * Having this is not required, but there could be some cases wherein specific operations may be allowed + * only via specific channels (like only Local network), where this would be useful. + */ + if (ctx) { + ESP_LOGI(TAG, "Received write request via : %s", esp_rmaker_device_cb_src_to_str(ctx->src)); + } + + /* Check if the write is on the "Trigger" parameter. We aren't really checking true/false as that + * is not much of a concern in this context. But you can add checks on the values too. + */ + if (strcmp(esp_rmaker_param_get_name(param), "Trigger") == 0) { + /* Here we start some dummy diagnostics and populate the appropriate values to be passed + * to "Timestamp" and "Data". + */ + ESP_LOGI(TAG, "Starting Diagnostics"); + time_t current_timestamp = 0; + time(¤t_timestamp); + char buf[100] = {0}; + json_gen_str_t jstr; + json_gen_str_start(&jstr, buf, sizeof(buf), NULL, NULL); + json_gen_start_object(&jstr); + json_gen_obj_set_bool(&jstr, "diag1", true); + json_gen_obj_set_int(&jstr, "diag2", 30); + json_gen_obj_set_float(&jstr, "diag3", 54.1643); + json_gen_obj_set_string(&jstr, "diag4", "diag"); + json_gen_end_object(&jstr); + json_gen_str_end(&jstr); + + /* The values are reported by updating appropriate parameters */ + esp_rmaker_param_update_and_report(esp_rmaker_device_get_param_by_name(device, "Data"), + esp_rmaker_obj(buf)); + esp_rmaker_param_update_and_report(esp_rmaker_device_get_param_by_name(device, "Timestamp"), + esp_rmaker_int((int)current_timestamp)); + } + return ESP_OK; +} +``` + +The above code snippet should be self explanatory because of the comments. + +As you can see, 4 different values of 4 different types could be reported via a single parameter, which is better than having 4 different parameters, which would bloat up the node configuration. Note that the JSON Generator library usage is shown just for reference as it is used at most places in ESP RainMaker. You can choose any other libraries or functions to create the object. + +## Testing the Service + +Before you add some logic in your phone apps to use the service, it would be better to test it first from the [RainMaker CLI](https://rainmaker.espressif.com/docs/cli-setup.html). Once you have the CLI set-up, you can use a command like this to start the diagnostics: + +```shell +$ ./rainmaker.py setparams --data '{"Diagnostics":{"Trigger":true}}' +``` + +Once the device gets this command, the device serial console will show up such prints + +```log +I (74726) esp_rmaker_param: Received params: {"Diagnostics": {"Trigger": true}} +I (74726) app_main: Received write request via : Cloud +I (74726) app_main: Starting Diagnostics +I (74736) esp_rmaker_param: Reporting params: {"Diagnostics":{"Data":{"diag1":true,"diag2":30,"diag3":54.16430,"diag4":"diag"}}} +I (74746) esp_rmaker_param: Reporting params: {"Diagnostics":{"Timestamp":1639738352}} +``` + +You can then query the node parameters to see the results using: + +```shell +$ ./rainmaker.py getparams \ +``` + +It will show up this object: + +{{< figure + default=true + src="img/extending-4.webp" + >}} + +As you can see here, we could add a new custom functionality in RainMaker without changing/configuring anything in the cloud backend. That’s how the “tunnelling” concept of RainMaker works, making it very extensible. + +A few samples for RainMaker services can be found here: + +- [OTA Using Params](https://github.com/espressif/esp-rainmaker/blob/master/components/esp_rainmaker/src/ota/esp_rmaker_ota_using_params.c) +- [System Service](https://github.com/espressif/esp-rainmaker/blob/master/components/esp_rainmaker/src/core/esp_rmaker_system_service.c) +- [Time Service](https://github.com/espressif/esp-rainmaker/blob/master/components/esp_rainmaker/src/core/esp_rmaker_time_service.c) +- [Schedules](https://github.com/espressif/esp-rainmaker/blob/master/components/esp_rainmaker/src/core/esp_rmaker_schedule.c) diff --git a/content/blog/feb-2022/img/feb-1.webp b/content/blog/feb-2022/img/feb-1.webp new file mode 100644 index 000000000..6e72e8722 Binary files /dev/null and b/content/blog/feb-2022/img/feb-1.webp differ diff --git a/content/blog/feb-2022/img/feb-2.webp b/content/blog/feb-2022/img/feb-2.webp new file mode 100644 index 000000000..fff803c38 Binary files /dev/null and b/content/blog/feb-2022/img/feb-2.webp differ diff --git a/content/blog/feb-2022/img/feb-3.webp b/content/blog/feb-2022/img/feb-3.webp new file mode 100644 index 000000000..772a26d25 Binary files /dev/null and b/content/blog/feb-2022/img/feb-3.webp differ diff --git a/content/blog/feb-2022/img/feb-4.webp b/content/blog/feb-2022/img/feb-4.webp new file mode 100644 index 000000000..14fb848dc Binary files /dev/null and b/content/blog/feb-2022/img/feb-4.webp differ diff --git a/content/blog/feb-2022/index.md b/content/blog/feb-2022/index.md new file mode 100644 index 000000000..11ba0bf11 --- /dev/null +++ b/content/blog/feb-2022/index.md @@ -0,0 +1,67 @@ +--- +title: "Feb 2022" +date: 2022-02-28 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Version 4.4 + - Instagram + - Esp32 + - Newsletter + +--- +Hi everyone, + +[Version 4.4](https://github.com/espressif/esp-idf/releases/tag/v4.4) of Espressif’s IoT Development Framework (ESP-IDF v4.4) has recently been released, adding full support for the [ESP32-S3 SoC](https://www.espressif.com/en/products/socs/esp32-s3) and preliminary support for the [ESP32-H2 SoC](https://www.espressif.com/en/news/ESP32-H2_Thread_and_Zigbee_certified). + +The purpose of [ESP-IDF](https://www.espressif.com/en/products/sdks/esp-idf) has always been to create a simple, easy-to-use, open-source development environment which helps users take full advantage of the powerful hardware and software solutions that Espressif offers. Thus, ESP-IDF integrates real-time operating systems, peripheral drivers, network protocol stacks, such as Wi-Fi and Bluetooth, program libraries, and development tools, while being accompanied by copious documentation, examples of use cases, and other relevant resources. As a result, there are already millions of Espressif IoT devices in use across the whole wide world. + +Espressif is committed to constantly enhancing the capabilities of its software and hardware solutions. On this note, Teo Swee Ann, Founder and CEO of Espressif Systems, said: “Although innovation often begins with bursts of creativity and inspiration, it eventually comes to fruition after sustained hard work, perseverance and well-coordinated team work. This is the kind of work that our R&D team performs, always aiming at constant improvement. We attach great importance to user experience and, therefore, we continuously collect developer feedback, we evaluate it, and we optimize our products, solutions and services accordingly”. ESP-IDF is now a mature platform, with a rigorous release process and a strong support strategy, which ensures software stability and hassle-free mass production. If you have any suggestions for ESP-IDF, please give us your feedback via the [ESP32 forum](https://www.esp32.com/viewforum.php?f=13) or the [ESP-IDF GitHub repository](https://github.com/espressif/esp-idf/issues). + +Other topics you can read about in this month’s newsletter include: + +{{< figure + default=true + src="img/feb-1.webp" + >}} + +[__New Features of the ESP-IDF-VS Code Extension__ ](https://www.espressif.com/en/news/ESP-IDF_VS_Code_Extension) + +The [ESP-IDF extension of Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=espressif.esp-idf-extension) aims at helping developers write code based on [ESP-IDF](https://www.espressif.com/en/products/sdks/esp-idf) and Espressif SoCs. In the following article, you can find the latest features we have added. + +{{< figure + default=true + src="img/feb-2.webp" + >}} + +[__ESP32-C3-based M5Stamp C3U Released__ ](https://www.espressif.com/en/news/M5Stamp_C3U) + +The [ESP32-C3](https://www.espressif.com/en/products/socs/esp32-c3)-based [M5Stamp C3U](https://shop.m5stack.com/collections/m5stack-new-arrival/products/m5stamp-c3u-5pcs) has just been released. With a 32-bit RISC-V microcontroller, a 400 KB internal RAM, and a 4 MB Flash, it operates at a maximum clock frequency of 160 MHz, facilitating a variety of use cases. + +{{< figure + default=true + src="img/feb-3.webp" + >}} + +[__AirTag-like Device Based on ESP32__ ](https://www.espressif.com/en/news/ESP32Tag) + +Get to know how independent maker, Eric Nam, created the [ESP32Tag](https://www.youtube.com/watch?v=_Bu3lw49m5s), which works similarly to Apple’s AirTag! + +{{< figure + default=true + src="img/feb-4.webp" + >}} + +[__E__ ](https://www.espressif.com/en/news/ESP32_Security_Camera)[__SP32-Powered DIY Smartwatch__ ](https://www.espressif.com/en/news/MutantW) + +An independent maker known as “rahmanshaber” recently presented an [ESP32-WROOM](https://www.espressif.com/en/products/modules/esp32)-powered, open-source smartwatch, called MutantW. + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/feb-2023/img/feb-1.webp b/content/blog/feb-2023/img/feb-1.webp new file mode 100644 index 000000000..9945ba769 Binary files /dev/null and b/content/blog/feb-2023/img/feb-1.webp differ diff --git a/content/blog/feb-2023/img/feb-2.webp b/content/blog/feb-2023/img/feb-2.webp new file mode 100644 index 000000000..3d95ae986 Binary files /dev/null and b/content/blog/feb-2023/img/feb-2.webp differ diff --git a/content/blog/feb-2023/img/feb-3.webp b/content/blog/feb-2023/img/feb-3.webp new file mode 100644 index 000000000..3dddd4b8d Binary files /dev/null and b/content/blog/feb-2023/img/feb-3.webp differ diff --git a/content/blog/feb-2023/img/feb-4.webp b/content/blog/feb-2023/img/feb-4.webp new file mode 100644 index 000000000..d6fb3d383 Binary files /dev/null and b/content/blog/feb-2023/img/feb-4.webp differ diff --git a/content/blog/feb-2023/img/feb-5.webp b/content/blog/feb-2023/img/feb-5.webp new file mode 100644 index 000000000..c4c0d52f0 Binary files /dev/null and b/content/blog/feb-2023/img/feb-5.webp differ diff --git a/content/blog/feb-2023/img/feb-6.webp b/content/blog/feb-2023/img/feb-6.webp new file mode 100644 index 000000000..9960ceddd Binary files /dev/null and b/content/blog/feb-2023/img/feb-6.webp differ diff --git a/content/blog/feb-2023/index.md b/content/blog/feb-2023/index.md new file mode 100644 index 000000000..752c152fb --- /dev/null +++ b/content/blog/feb-2023/index.md @@ -0,0 +1,89 @@ +--- +title: "Feb 2023" +date: 2023-02-15 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +Exciting times lie ahead, as Espressif Systems will be an official exhibitor at [Embedded World 2023](https://www.embedded-world.de/en/exhibit). So, between 14 and 16 March 2023, Espressif’s team will be in Nuremberg, Germany, among 720 exhibitors from 39 countries. The Embedded World exhibition-and-conference brings the entire embedded community together once a year, providing a unique overview of some state-of-the-art technologies in the industry. + +This year, Espressif will focus on three areas mainly: + +{{< figure + default=true + src="img/feb-1.webp" + >}} + +Espressif’s team in Nuremberg will demonstrate our unique combination of high-performance hardware, software, and complete solutions, with which we make it easy for our customers to build Matter-enabled smart-home devices of various types. In fact, [Espressif provides the most comprehensive such solutions](https://www.espressif.com/solutions/device-connectivity/esp-matter-solution), including support for Wi-Fi or Thread end-point devices, Thread Border Routers, and Matter gateway reference designs. [Espressif’s SDK for Matter](https://github.com/espressif/esp-matter) is based on the official open-source Matter SDK, and includes an easy-to-use API as well as all the required mass-production tools. Then, [the ESP-ZeroCode module](https://www.espressif.com/en/solutions/device-connectivity/esp-matter-solution), based on ESP32-C3/C2/H2, provides Matter connectivity out-of-the-box. + +[We also provide certificate-generation and pre-provisioning services](https://www.espressif.com/news/Pre-provisioning_Matter) for Matter-compatible devices, thus reducing for our customers the complexity they would otherwise face when producing such devices from scratch. On this note, it is also worth mentioning that Espressif has already helped many customers pass [the Matter 1.0 certification](https://www.espressif.com/en/news/Matter1.0_Certified) for their products. + +Additionally, [ESP32-C6](https://www.espressif.com/products/socs/esp32-c6) combines 2.4 GHz Wi-Fi 6, Bluetooth 5 (LE) and 802.15.4, thus ensuring that any ESP32-C6-powered IoT devices have a high transmission efficiency. ESP32-C6 also supports uplink, downlink OFDMA and downlink MU-MIMO mechanisms. Its TWT (Target Wake Time) function is suitable for building ultra-low power IoT devices, so that even those powered by batteries can continue their operation for longer than usual. Last, but not least, ESP32-C6 has a high standard of security with such mechanisms as secure boot, flash encryption, digital signatures, encryption accelerators, etc. + +In general, Espressif’s SoCs enable a series of [HMI functions](https://www.espressif.com/solutions/hmi/smart-displays), such as data visualization, touch or knob control, voice wake-up and recognition, and multi-mode gateway among other features. [ESP32-S3](https://www.espressif.com/products/socs/esp32-s3), in particular, is suitable for RGB-interface displays with a maximum resolution of 800x480, while [ESP32-C3](https://www.espressif.com/products/socs/esp32-c3) supports SPI-interface displays. Espressif’s HMI smart displays support standard GUI development frameworks including LVGL, SquareLine Studio and QT. + +In Nuremberg, we will also demonstrate[ ESP RainMaker](https://rainmaker.espressif.com/index.html) (Espressif’s one-stop private Cloud platform), along with [ESP Insights](https://www.espressif.com/news/ESP_Insights) (our remote monitoring platform), Espressif’s [AWS IoT ExpressLink](https://www.espressif.com/solutions/device-connectivity/esp-aws-iot-expresslink) module, the [ACK SDK](https://www.espressif.com/solutions/device-connectivity/ack-solution) device, and [ESP-NOW](https://github.com/espressif/esp-now) (our low-power communication protocol). + +So, if you happen to be in Nuremberg from 14 to 16 March, don’t forget to get your [free tickets](https://www.embedded-world.de/en/visitor) and visit our booth (Hall 3A, Booth 625). + +Keep reading this month’s newsletter, so you can learn more exciting news from Espressif: + +{{< figure + default=true + src="img/feb-2.webp" + >}} + +[__Espressif Launches HMI Smart Displays__ ](https://www.espressif.com/en/solutions/hmi/smart-displays) + +Espressif’s HMI smart displays, based on [ESP32-S3](https://www.espressif.com/en/products/socs/esp32-s3)and [ESP32-C3](https://www.espressif.com/en/products/socs/esp32-c3), are designed to support RGB and SPI interfaces, respectively. These solutions ensure smart interaction and unlimited communication! + +{{< figure + default=true + src="img/feb-3.webp" + >}} + +[__Espressif Has Revealed ESP32-P4__ ](https://www.espressif.com/en/news/ESP32-P4) + +At last month’s CES in Las Vegas, Espressif revealed ESP32-P4 and it went viral! Our new high-performance MCU is designed for IO-rich, HMI and AIoT applications. For all the details, click on the link above. + +{{< figure + default=true + src="img/feb-4.webp" + >}} + +[__ESP32-C6 Officially Available__ ](https://www.espressif.com/en/news/ESP32-C6_Available) + +[ESP32-C6](https://www.espressif.com/en/products/socs/esp32-c6) is Espressif’s Wi-Fi 6 SoC that combines 2.4 GHz Wi-Fi 6, Bluetooth 5 (LE) and the 802.15.4 protocol. It is our first Wi-Fi 6 SoC achieving an industry-leading RF performance, with reliable security features and multiple memory resources for AIoT products. + +{{< figure + default=true + src="img/feb-5.webp" + >}} + +[__ESP-Based Products Earn Matter 1.0 Certification__ ](https://www.espressif.com/en/news/Matter1.0_Certified) + +Espressif Systems (SSE: 688018.SH) is pleased to announce that the company has successfully completed the [Matter 1.0 certification](https://www.espressif.com/sites/default/files/ESP32-C%20Matter%201.0%20Certification.pdf) program. Build your Matter devices with ease using Espressif SoCs (the entire ESP32 and ESP32-C series, as well as ESP32-S3). + +{{< figure + default=true + src="img/feb-6.webp" + >}} + +[__ESP32-Based Smart Watch__ ](https://www.espressif.com/en/news/ESP32_Watch) + +Independent maker Philippe Cadic has created a [smart watch](https://hackaday.io/project/181159-the-603-200-watch) based on Espressif’s ESP32-PICO-D4. It can be connected to a mobile phone or other smart devices, while also producing exciting visual effects with a total of 192 LEDs. + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/february-2019/img/february-1.webp b/content/blog/february-2019/img/february-1.webp new file mode 100644 index 000000000..2cbaa7b0a Binary files /dev/null and b/content/blog/february-2019/img/february-1.webp differ diff --git a/content/blog/february-2019/img/february-2.webp b/content/blog/february-2019/img/february-2.webp new file mode 100644 index 000000000..2c080f606 Binary files /dev/null and b/content/blog/february-2019/img/february-2.webp differ diff --git a/content/blog/february-2019/img/february-3.webp b/content/blog/february-2019/img/february-3.webp new file mode 100644 index 000000000..55f4002d4 Binary files /dev/null and b/content/blog/february-2019/img/february-3.webp differ diff --git a/content/blog/february-2019/img/february-4.webp b/content/blog/february-2019/img/february-4.webp new file mode 100644 index 000000000..eb697a841 Binary files /dev/null and b/content/blog/february-2019/img/february-4.webp differ diff --git a/content/blog/february-2019/index.md b/content/blog/february-2019/index.md new file mode 100644 index 000000000..fdd003915 --- /dev/null +++ b/content/blog/february-2019/index.md @@ -0,0 +1,78 @@ +--- +title: "February 2019" +date: 2019-02-04 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Welcome to our February Newsletter + +__*Our News. Our World Join Us!*__ + +Hi everyone, + +Today is New Year’s Day, according to the lunar calendar, which we follow here in China. The lunar year from 5 February 2019 until 24 January 2020 is considered to be the year of the pig, which is the twelfth animal in the Chinese horoscope and is regarded as a symbol of wealth and good fortune. On this note, then, we would like to wish you all “新年快乐”, which is transliterated as “xīnnián kuàilè” and translated as Happy New Year! + +In mid-January, between the Chinese and Western New Year’s Day we spent a weekend in Chongming Island, where we held our annual gathering as a company. On this picturesque island at the mouth of Yangtze River in Eastern China, Espressifers from all our offices across China, Europe and India gathered to contemplate the company’s course in 2018 and discuss its goals for 2019. We spoke about our mission to build bridges between the wider public and technology, particularly in the domains of Artificial Intelligence and the Internet of Things. As a company driving today’s AI and IoT revolution, Espressif Systems will continue supporting research in these fields through investments and partnerships with scholars and institutions whose mission is to promote STEM education in China and beyond. + +Other topics you can find in this month’s newsletter include: + +- [ESP-EYE](https://www.espressif.com/en/products/hardware/esp-eye/overview), Espressif’s newly-released development board for applications relating to Artificial Intelligence and the Internet of Things (AIoT); +- an announcement of the recent [Bluetooth SIG certification](https://launchstudio.bluetooth.com/ListingDetails/76255) for our ESP BLE Mesh SDK which will be released very soon; +- [the new “washMaster”](https://www.schulthess.ch/en/apartment-blocks/the-new-washmaster), a cutting-edge laundry machine based on Espressif’s powerful ESP32, which has been developed by Schulthess Maschinen AG in Switzerland; and, last but not least, +- the exciting [one-day event, dedicated to ESP32](https://www.facebook.com/events/357123601778174/), which took place in Bangkok last weekend, attracting a large number of makers from all around the country, and highlighting the huge popularity of ESP32 in Thailand. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog/featured). We respond to all of your messages as quickly as possible! + +Best wishes, John Lee. Senior Customer Support Officer + +## New AIoT Solution Released + +{{< figure + default=true + src="img/february-1.webp" + >}} + +Espressif’s new development board for applications relating to Artificial Intelligence and the Internet of Things has just been released, together with its accompanying SDK, [ESP-WHO](https://github.com/espressif/esp-who). Its commercial name is [ESP-EYE](https://www.espressif.com/en/products/hardware/esp-eye/overview). This board is based on ESP32, which also integrates a digital microphone, 8 MB of PSRAM and 4 MB of flash. Additionally, it provides an external 2-megapixel camera, which makes the board ideal for face detection, face recognition and speech recognition. + +[*Keep Reading*](https://www.espressif.com/en/news/New_AIoT_Solution_Released) + +## Espressif’s BLE Mesh SDK Is Now Bluetooth-SIG-certified + +{{< figure + default=true + src="img/february-2.webp" + >}} + +Espressif is pleased to announce that the ESP BLE-Mesh SDK has been [Bluetooth-SIG-certified](https://launchstudio.bluetooth.com/ListingDetails/76255) as of January 2019, having received what was previously known as the BQB certification. This officially ensures that Espressif’s above-mentioned SDK meets the Bluetooth organization’s standards for global product interoperability and complies with the Bluetooth License Agreement. + +[*Keep reading*](https://www.espressif.com/en/news/Espressifs_BLE_Mesh_SDK_Is_Now_Bluetooth_SIG_certified) + +## “washMaster”: A Swiss ESP32-based Laundry Machine + +{{< figure + default=true + src="img/february-3.webp" + >}} + +[Schulthess Maschinen AG](https://www.schulthess.ch/en) is a Swiss company that has produced washing machines and dryers for families, hotels and other commercial enterprises for over 170 years. Their latest pioneering product, “The New washMaster”, is an [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview)-based laundry machine which provides a state-of-the-art solution to cashless payment systems for laundry rooms in big blocks of flats. + +[*Keep Reading*](https://www.espressif.com/en/news/washMaster_A_Swiss_ESP32_based_Laundry_Machine) + +## Packed Out One-Day ESP32 Event in Thailand + +{{< figure + default=true + src="img/february-4.webp" + >}} + +An exciting [one-day event](https://www.facebook.com/events/357123601778174/) took place in Bangkok, Thailand, last Sunday on 3 February. It was dedicated to Espressif’s flagship chip [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview) and the multiple ways in which it can be used in IoT and AI applications. The event featured prominent speakers from the Thai maker community, attracting scores of attendees. + +[Keep Reading](https://www.espressif.com/en/news/Packed_Out_One_Day_ESP32_Event_in_Thailand) + +*Originally published at *[*mailchi.mp*](https://mailchi.mp/ce04b5ab07cc/espressif-esp-news-february-2019?e=f9593a0e62)*.* diff --git a/content/blog/february-2020/img/february-1.webp b/content/blog/february-2020/img/february-1.webp new file mode 100644 index 000000000..1e5f21664 Binary files /dev/null and b/content/blog/february-2020/img/february-1.webp differ diff --git a/content/blog/february-2020/img/february-2.webp b/content/blog/february-2020/img/february-2.webp new file mode 100644 index 000000000..ff5175457 Binary files /dev/null and b/content/blog/february-2020/img/february-2.webp differ diff --git a/content/blog/february-2020/img/february-3.webp b/content/blog/february-2020/img/february-3.webp new file mode 100644 index 000000000..9097c3b8a Binary files /dev/null and b/content/blog/february-2020/img/february-3.webp differ diff --git a/content/blog/february-2020/img/february-4.webp b/content/blog/february-2020/img/february-4.webp new file mode 100644 index 000000000..37c4ba392 Binary files /dev/null and b/content/blog/february-2020/img/february-4.webp differ diff --git a/content/blog/february-2020/index.md b/content/blog/february-2020/index.md new file mode 100644 index 000000000..c101042b5 --- /dev/null +++ b/content/blog/february-2020/index.md @@ -0,0 +1,71 @@ +--- +title: "February 2020" +date: 2020-02-27 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +{{< figure + default=true + src="img/february-1.webp" + >}} + +Hi everyone, + +We expect that all of you will have heard by now the news about the novel coronavirus epidemic in China and beyond. These are tough times indeed, but luckily, at the time of the outbreak, Espressif had already structured its IT system in such a way that has enabled the vast majority of staff members to work from home. As Espressif’s Founder and CEO, Teo Swee Ann, [mentioned in a recent message he posted on our website](https://www.espressif.com/en/news/Espressif_CEO_Letter_2020): “__the disruption to our operations will be minimal. Our teams in Europe, India and China continue our work to best serve our customers.__ ” + +Indeed, everyone at Espressif remains committed to working hard not just to overcome the current crisis, but also to honour our partnerships in China and abroad, and accomplish our goals for the first quarter of 2020, as well as for the rest of the year. + +On this note, Teo Swee Ann, also mentioned in his recent message: “__In 2020, we will be launching four new chips, covering different segments of the market, price points and performance.__ Our latest chips feature our new radio architecture that has lower power consumption, while maintaining the same -40°C to +125°C performance. The peripherals have been upgraded with highly sensitive capacitive touch IOs. Capacitive touch controls are now a staple of user interfaces, because they are cost efficient; certain functions such as slider controls are better supported with capacitive touch than with analog implementations.” + +Teo Swee Ann also pointed out: “__As you can see, we are not just about creating the best Wi-Fi chips, but also about providing our customers with complete and fully customizable solutions that work right out of the box.__ We also understand that connected product development and maintenance needs to be simplified, without compromising its flexibility. Try our latest [ESP32-S2](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf)-based ESP-RAINMAKER development boards that enable you to build the a complete cloud-connected product within a couple of hours.” + +You can read Teo Swee Ann’s entire message [here](https://www.espressif.com/en/news/Espressif_CEO_Letter_2020). Other topics you can read about in this month’s newsletter include: + +- Espressif’s ESP32 SoC providing a qualified platform for Amazon Common Software for devices; +- ESP32-S2 SoCs, modules and development boards going into mass production from February 2020 onwards; +- Espressif’s partnership with Gigabits, a real-world IoT Sandbox for enterprises, developers, and makers looking to explore various IoT use cases and application spaces. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog). We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer + +## Espressif’s ESP32 SoC Provides a Qualified Platform for Amazon Common Software for Devices + +{{< figure + default=true + src="img/february-2.webp" + >}} + +Espressif’s [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview) is among the first Systems-on-Chip to support the newly announced [Amazon Common Software for Devices (ACS)](https://developer.amazon.com/acs-devices). The combination of ESP32 hardware with ACS provides accelerated, yet flexible, development for connected devices with a seamless integration of Amazon Device SDKs. + +[*Keep Reading*](https://www.espressif.com/en/news/espressif-acs-announcement) + +## ESP32-S2 SoC, Modules and Dev Boards Go Into Mass Production + +{{< figure + default=true + src="img/february-3.webp" + >}} + +With the [ESP32-S2](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf) chips, modules and development boards going into into mass production from February 2020 onwards, the functional advantages of all these products will become readily available to the entire IoT market. In the course of 2020, Espressif will launch more chips in the ESP32-S series and, at the same time, its simplified version, the ESP32-C series, will also be launched. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP32-S2-mass-production) + +## Espressif Partners with Gigabits + +{{< figure + default=true + src="img/february-4.webp" + >}} + +Espressif has just launched a collaboration with [Gigabits](http://gigabits.io/), a real-world IoT Sandbox for enterprises, developers, and makers looking to explore various IoT use cases. Gigabits is where the physical world meets the digital world. So, combining the Gigabits IoT platform with the power of[ ESP32](https://www.espressif.com/en/products/hardware/esp32/overview) will enable users to rapidly deploy test environments, explore application spaces, and develop use cases for their business or IoT project. + +[*Keep Reading*](https://www.espressif.com/en/news/espressif-gigabits) + +*Originally published at *[*https://mailchi.mp*](https://mailchi.mp/367408c007c6/espressif-esp-news-february-2020?e=309e9b0452)*.* diff --git a/content/blog/getting-started-with-esp-idf/index.md b/content/blog/getting-started-with-esp-idf/index.md index d8cb40f6c..2b1689558 100644 --- a/content/blog/getting-started-with-esp-idf/index.md +++ b/content/blog/getting-started-with-esp-idf/index.md @@ -2,6 +2,7 @@ title: "Getting Started With ESP-IDF" date: "2024-07-31" showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" authors: - "cheah-hao-yi" tags: ["ESP32", "ESP-IDF", "Tutorial"] diff --git a/content/blog/getting-started-with-esp32-and-nuttx/img/getting-1.webp b/content/blog/getting-started-with-esp32-and-nuttx/img/getting-1.webp new file mode 100644 index 000000000..bd7bcdd9f Binary files /dev/null and b/content/blog/getting-started-with-esp32-and-nuttx/img/getting-1.webp differ diff --git a/content/blog/getting-started-with-esp32-and-nuttx/img/getting-2.webp b/content/blog/getting-started-with-esp32-and-nuttx/img/getting-2.webp new file mode 100644 index 000000000..b74da2505 Binary files /dev/null and b/content/blog/getting-started-with-esp32-and-nuttx/img/getting-2.webp differ diff --git a/content/blog/getting-started-with-esp32-and-nuttx/img/getting-3.webp b/content/blog/getting-started-with-esp32-and-nuttx/img/getting-3.webp new file mode 100644 index 000000000..c13be27ad Binary files /dev/null and b/content/blog/getting-started-with-esp32-and-nuttx/img/getting-3.webp differ diff --git a/content/blog/getting-started-with-esp32-and-nuttx/index.md b/content/blog/getting-started-with-esp32-and-nuttx/index.md new file mode 100644 index 000000000..ea7b3d36a --- /dev/null +++ b/content/blog/getting-started-with-esp32-and-nuttx/index.md @@ -0,0 +1,269 @@ +--- +title: "Getting Started with ESP32 and NuttX" +date: 2020-11-30 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - sara-monteiro +tags: + - Nuttx + - Esp32 + +--- +{{< figure + default=true + src="img/getting-1.webp" + >}} + +## Introduction + +This article is part of the “First Steps with ESP32 and NuttX” series. A series whose objective is to present an overview of the NuttX Operating System and to provide instructions for using NuttX on ESP32. + +The first part of the series instructs the preparation of the environment, the compilation, and the building of the Operating System (NuttX) until the firmware upload to the SoC (ESP32). + +The second part of the series demonstrates how to run the famous “[Hello World](/blog/blink-led-on-esp32-with-rtos-nuttx)” from the Embedded Systems world, i.e., an application that blinks an LED. + +This series used the ESP32 DevKit-C v1 development board and the Ubuntu Linux distribution (Ubuntu 18.04.5 LTS). The used NuttX version in this tutorial is the latest from mainline. Although it’s recommended to use the latest stable version, the features that have been implemented for ESP32 are going to be included from release 10.1 on. + +If you do not have a development board, but you want to run NuttX on your own computer to test the basic functionality of the system, try using the simulator, the installation guide can be found at [http://nuttx.apache.org/docs/latest/guides/simulator.html](http://nuttx.apache.org/docs/latest/guides/simulator.html) . + +## What is NuttX? + +NuttX is a Real-Time Operating System specially designed to be used in Embedded Systems with microcontrollers or processors from 8 to 64 bits and which have a small footprint. NuttX is also a customizable Operating System, i.e., the developer can include in the image that will be generated only what is really useful for the project. One of NuttX’s main commitments is to be POSIX and ANSI standards-compliant. Both standards define the generic interface for Operating Systems, which contributes to portability, code reuse, and support for applications that use this interface. + +With these characteristics, NuttX has become attractive to be used in microcontrollers and SoCs. And Espressif, ESP32’s manufacturer, is currently investing in support of ESP32 for NuttX. + +The official NuttX documentation can be found on the Apache Foundation website where the project is currently incubated: [http://nuttx.apache.org/docs/latest/index.html](http://nuttx.apache.org/docs/latest/index.html). + +## Building and Flashing Process + +Before starting the NuttX compilation and build, update your repositories and install the dependencies: + +``` +sudo apt update +sudo apt upgrade +sudo apt-get install automake bison build-essential flex gperf git libncurses5-dev libtool libusb-dev libusb-1.0.0-dev pkg-config +``` + +1. Create a directory to group all NuttX repositories and access it: + +``` +mkdir ~/nuttxspace && cd ~/nuttxspace +``` + +2. Clone the apps repository, which includes examples and other applications and the nuttx repository, that contains the OS source codes: + +``` +git clone https://github.com/apache/incubator-nuttx.git nuttx +git clone https://github.com/apache/incubator-nuttx-apps.git apps +``` + +__Note:__ NuttX uses a build system similar to the Linux Kernel ([https://www.kernel.org/doc/html/latest/kbuild/index.html](https://www.kernel.org/doc/html/latest/kbuild/index.html)). And so, It uses kconfig-frontends as its configuration system. The tools repository is another repository that may be used only to install this package. However, if you are using Ubuntu 19.10 or later, these distributions already contain the “kconfig-frontends” package and therefore you do not need to clone this repository, and you may just install the package through the following command: + +``` +sudo apt-get install kconfig-frontends +``` + +Otherwise, clone the repository and install kconfig-frontends manually via the tools repository: + +``` +git clone https://bitbucket.org/nuttx/tools.gitcd ~/nuttxspace/tools/kconfig-frontends +./configure --enable-mconf +make +sudo make install +sudo ldconfig +``` + +3. The expected result should be this: + +``` +~/nuttxspace$: ls +apps nuttx tools +``` + +4. Download and decompress the pre built cross compiler for ESP32 in Linux environment. The cross compiler will be used to convert the source code into an executable code. + +``` +curl https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp-2020r2-linux-amd64.tar.gz | tar -xz +``` + +Since the /opt/ directory is a space commonly used to store third party software, create a directory at /opt/ to keep the cross compiler for xtensa architecture: + +``` +sudo mkdir /opt/xtensa +``` + +Move the cross compiler to this new directory: + +``` +sudo mv xtensa-esp32-elf/ /opt/xtensa/ +``` + +Now you have the cross compiler for ESP32 at this path, in order to invoke the cross compiler binaries as commands, you should add its absolute path to PATH, which is a Linux environment variable that informs the shell where to search for executables or programs that are invoked through commands. To do so, use the following command: + +``` +export PATH=$PATH:/opt/xtensa/xtensa-esp32-elf/bin +``` + +5. Install the esptool Python module to perform the download of all binaries to the ESP32 through serial. + +``` +pip3 install esptool +``` + +You may have noticed the following warning message at the end of the installation: + +*“WARNING: The scripts pyserial-miniterm and pyserial-ports are installed in ‘/home//.local/bin’ which is not on PATH.”* + +This messages warns us that esptool, as well as other programs that are used by esptool, were installed at a path which is not included on PATH, so these programs are not visible at the current shell. To solve this issue, add this path to PATH and load it using the following command (Replace with your user name): + +``` +export PATH=$PATH:/home//.local/bin +``` + +__NOTE:__ Once you leave your terminal session, PATH will loose these paths added to it temporarily and you will need to run the “export” commands again in a new session. It may be a little annoying. If you want to keep these paths permanent to shell sessions, open your *bash* file and add these paths to PATH, through the following command: + +``` +sudo nano ~/.bashrc +``` + +Paste it to the end of the file (Replace with your user name): + +``` +# Add esptool.py and its dependencies directory +PATH=$PATH:/home//.local/bin# Add the cross compiler path for ESP32 +PATH=$PATH:/opt/xtensa/xtensa-esp32-elf/bin +``` + +6. Besides the Operating System with the application, ESP32 also requires a bootloader and a partition table. Both of them can be customized and built to answer customer’s expectations. However, for the sake of simplicity, these binaries were previously generated for you from the latest ESP-IDF’s master branch and can be easily downloaded from this [repository](https://github.com/espressif/esp-nuttx-bootloader) kept by Espressif. To do so, create a dedicated directory aside nuttx directory to keep these binaries and download these pre-configured binaries: + +``` +mkdir esp-binscurl -L "https://github.com/espressif/esp-nuttx-bootloader/releases/download/latest/bootloader-esp32.bin" -o esp-bins/bootloader-esp32.bincurl -L "https://github.com/espressif/esp-nuttx-bootloader/releases/download/latest/partition-table-esp32.bin" -o esp-bins/partition-table-esp32.bin +``` + +In case you want to generate these binaries yourself, take a look at [here](https://github.com/espressif/esp-nuttx-bootloader) and check out the step by step. + +7. In the NuttX directory run the configuration script to create a configuration file for ESP32. + +``` +cd nuttx +./tools/configure.sh esp32-devkitc:nsh +``` + +8. Since in the next step you will use the serial to download the binaries, run the following command to add your user to the dialout group, which has the permission to access the serial driver. + +``` +sudo adduser dialout +``` + +This addition will only permanently take effect after log out and log in. So, a workaround for it is to temporarily change the current user to the dialout group: + +``` +newgrp dialout +``` + +9. Finally, from now on, connect your DevKit to your computer, build and download all the binaries: + +``` +make download ESPTOOL_PORT=/dev/ttyUSB0 ESPTOOL_BAUD=115200 ESPTOOL_BINDIR=../esp-bins +``` + +__NOTE:__ adjust the USB port according to your configuration. The last two arguments are optional. In case they’re not specified, the command will download only the application and it will use the default baud rate of 921600. Once the bootloader and partition table binaries are downloaded, it’s not necessary to download them next time. + +In case the below command is interrupted because the Pyserial module was not installed, install it running the following command: + +``` +pip3 install pyserial +``` + +And make the download again. + +## NuttX Shell Access + +To access the NuttX shell, you only need a serial terminal. If you don’t have a serial terminal, I suggest the picocom. To install the picocom run the following command: + +``` +sudo apt-get install -y picocom +``` + +And finally, access the nsh (NuttX Shell): + +``` +sudo picocom /dev/ttyUSB0 -b 115200 +``` + +NOTE: adjust the USB port according to your configuration. + +{{< figure + default=true + src="img/getting-2.webp" + >}} + +## Next Steps + +If you made it this far and accessed the NuttX shell, and everything is properly installed and configured, move on to the next article in the series and run the [Blink Led example](/blog/blink-led-on-esp32-with-rtos-nuttx)! + +## NuttX Tips + +This section is a bonus in order to summarize the main commands that are most used and show some simple and typical problems that can happen in your journey and how to work around them. + +``` +make distclean +``` + +It removes the configuration of the previous board and makes it available for the user to select another board or another configuration of the same board. + +``` +./tools/configure.sh boardname:configname +``` + +It selects the board (in this example it was esp32-devkitc) and the configuration to be used (in this example it was nsh config, which includes only the nuttx shell). There are other configurations that include support for certain peripherals and examples. + +``` +make menuconfig +``` + +It opens the configuration screen for the user to customize what he/she wants to add or to remove on the board. For example, it allows you to add drivers for a specific device, add debug messages, examples, etc. + +``` +make clean +``` + +It removes binary files generated from the previous built. + +``` +make apps_distclean +``` + +It cleans only application binaries. Kernel and driver binaries are kept. + +``` +make +``` + +It only builds your application. + +``` +make download ESPTOOL_PORT= [ESPTOOL_BAUD=] [ ESPTOOL_BINDIR=] +``` + +It builds and downloads the application and bootloader and partition table binaries when these ones are specified. + +## Troubleshooting + +If after running the command *make menuconfig* you get the message like in the image below, it means that your terminal is too small. Just expand the screen and run it again. + +{{< figure + default=true + src="img/getting-3.webp" + >}} + +## References + +NuttX Documentation: [http://nuttx.apache.org/docs/latest/index.html](http://nuttx.apache.org/docs/latest/index.html) + +ESP32: [https://docs.espressif.com/projects/esp-idf/en/stable/get-started/index.html](https://docs.espressif.com/projects/esp-idf/en/stable/get-started/index.html) + +Linux’s Build System: [https://www.kernel.org/doc/html/latest/kbuild/index.html](https://www.kernel.org/doc/html/latest/kbuild/index.html) + +Simulator: [http://nuttx.apache.org/docs/latest/guides/simulator.html](http://nuttx.apache.org/docs/latest/guides/simulator.html) diff --git a/content/blog/getting-started-with-wifi-on-esp-idf/index.md b/content/blog/getting-started-with-wifi-on-esp-idf/index.md index 89b3eab89..b057f738c 100644 --- a/content/blog/getting-started-with-wifi-on-esp-idf/index.md +++ b/content/blog/getting-started-with-wifi-on-esp-idf/index.md @@ -2,6 +2,7 @@ title: "Getting Started with Wi-Fi on ESP-IDF" date: "2024-07-31" showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" authors: - "cheah-hao-yi" tags: ["ESP32", "ESP-IDF", "Wi-Fi", "Tutorial"] diff --git a/content/blog/hand-gesture-recognition-on-esp32-s3-with-esp-deep-learning/index.md b/content/blog/hand-gesture-recognition-on-esp32-s3-with-esp-deep-learning/index.md new file mode 100644 index 000000000..1e304e373 --- /dev/null +++ b/content/blog/hand-gesture-recognition-on-esp32-s3-with-esp-deep-learning/index.md @@ -0,0 +1,517 @@ +--- +title: "Hand Gesture Recognition on ESP32-S3 with ESP-Deep Learning" +date: 2022-12-02 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - ali-hassan-shah +tags: + - Deep Learning + - AI + - Espressif + - ESP-ID + - ESP32 +--- +Artificial intelligence transforms the way computers interact with the real world. Decisions are carried by getting data from Tiny low-powered devices and sensors into the cloud. Connectivity, high cost and data privacy are some of the demerits of this method. [Edge artificial intelligence](https://www.youtube.com/watch?v=DAPgDuw1uZM) is another way to process the data right on the physical device without sending data back and forth improving the latency and security and reducing the bandwidth and power. + +Espressif System provides a framework [ESP-DL](https://github.com/espressif/esp-dl) that can be used to deploy your high-performance deep learning models on Espressif chip ESP32-S3. + +In this article, we will understand how to use [ESP-DL](https://github.com/espressif/esp-dl) and [deploy](https://github.com/espressif/esp-dl/tree/master/tutorial/quantization_tool_example) a deep-learning model on [ESP32-S3](https://www.espressif.com/en/products/socs/esp32-s3). + + +## Prerequisite for using ESP-DL + +Before getting a deep dive into ESP-DL, we assume that readers have; + +1. Knowledge about building and training neural networks. (Check out basics of deep-learning) +2. Configure the ESP-IDF release 4.4 environment. (Follow setting-up ESP-IDF environment or tool chain for ESP-IDF for more details) +3. Working knowledge of basic C and C++ language.’ + +Note: Please use ESP-IDF release/v4.4 on the commit “cc71308e2fdce1d6d27fc52d39943f5d0fb83f35” to reproduce the same results + +## Model Development +For the sake of simplicity, a classification problem is selected and developed a simple deep-learning model to classify 6 different hand gestures. Many open-source pre trained [models](https://github.com/filipefborba/HandRecognition) are available however for this demonstration we prefer to build a model from scratch to get a better understanding of each layer of the model. +* we are using Google [Co-lab](https://colab.research.google.com/) for model development + +### Dataset +For this classification problem, We are using an open-source dataset from the Kaggle [Hand Gesture recognition Dataset](https://www.kaggle.com/datasets/gti-upm/leapgestrecog). The original dataset includes 10 classes however we are using only 6 classes that are easy to recognize and more useful in daily life. The hand gesture classes are represented in the table below. One more difference is related to the image size, the original dataset has an image size of (240 , 640) however for the sake of simplicity resized the dataset to (96 , 96). The dataset used in this article can be found at [ESP-DL repo](https://github.com/alibukharai/Blogs/tree/main/ESP-DL). + +### Test/Train Split + +We need to divide our dataset into test, train and calibration datasets. These datasets are nothing but the subsets of our original [dataset](https://github.com/alibukharai/Blogs/blob/main/ESP-DL/building_with_espdl.md#11-dataset). The training dataset is used to train the model while the testing dataset is to test the model performance similarly calibration dataset is used during the [model quantization](https://github.com/alibukharai/Blogs/blob/main/ESP-DL/building_with_espdl.md#22-optimization-and-quantization) stage for calibration purposes. The procedure to generate all these datasets is the same. We used train_test_split for this purpose. + +```python +from sklearn.model_selection import train_test_split + +ts = 0.3 # Percentage of images that we want to use for testing. +X_train, X_test1, y_train, y_test1 = train_test_split(X, y, test_size=ts, random_state=42) +X_test, X_cal, y_test, y_cal = train_test_split(X_test1, y_test1, test_size=ts, random_state=42) +``` + +*For more details about how train_test_split works please check out [scikit-learn.org](https://scikit-learn.org/). + +For the reproduction of this tutorial you can find the data from (GitHub) and open data in your working environment. + +```python +import pickle + +with open('X_test.pkl', 'rb') as file: + X_test = pickle.load(file) + +with open('y_test.pkl', 'rb') as file: + y_test = pickle.load(file) + +with open('X_train.pkl', 'rb') as file: + X_train = pickle.load(file) + +with open('y_train.pkl', 'rb') as file: + y_train = pickle.load(file) +``` + +### Building a Model + +```python +import tensorflow as tf +from tensorflow import keras +from keras.models import Sequential +from keras.layers.convolutional import Conv2D, MaxPooling2D +from keras.layers import Dense, Flatten, Dropout + +print(tf.__version__) + +model = Sequential() +model.add(Conv2D(32, (5, 5), activation='relu', input_shape=(96, 96, 1))) +model.add(MaxPooling2D((2, 2))) +model.add(Dropout(0.2)) +model.add(Conv2D(64, (3, 3), activation='relu')) +model.add(MaxPooling2D((2, 2))) +model.add(Dropout(0.2)) +model.add(Conv2D(64, (3, 3), activation='relu')) +model.add(MaxPooling2D((2, 2))) +model.add(Flatten()) +model.add(Dense(128, activation='relu')) +model.add(Dense(6, activation='softmax')) + +model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy']) + +model.summary() +``` + +### Training a Model + +The model is running for 5 epochs, with a final accuracy of around 99%. + +```python +history=model.fit(X_train, y_train, epochs=5, batch_size=64, verbose=1, validation_data=(X_test, y_test)) +``` + +### Saving a Model + +The trained model is saved in Hierarchical Data format (.h5). For more details on how the Keras model be saved check out click [tensorflow.org](https://www.tensorflow.org/guide/keras/save_and_serialize#how_to_save_and_load_a_model). + +```python +model.save('handrecognition_model.h5') +``` + +### Model Conversion + +ESP-DL uses model in Open Neural Network Exchange (ONXX) format. For more details on how ONNX is working click here. To be compatible with ESP-DL convert the trained .h5 format of the model into ONXX format by using the below lines of code. + +```shell +model = tf.keras.models.load_model("/content/handrecognition_model.h5") +tf.saved_model.save(model, "tmp_model") +!python -m tf2onnx.convert --saved-model tmp_model --output "handrecognition_model.onnx" +!zip -r /content/tmp_model.zip /content/tmp_model +``` + +In the end, H5 format model, ONNX format model and model checkpoints are downloaded for future use. + +```pythonn +from google.colab import files +files.download("/content/handrecognition_model.h5") +files.download("/content/handrecognition_model.onnx") +files.download("/content/tmp_model.zip") +``` + +## ESP-DL format + +Once the ONNX format of the model is ready, follow the steps below to convert the model into ESP-DL format. + +* We are using [Pychram](https://www.jetbrains.com/pycharm/) IDE for ESP-DL format conversion. + +### Requirements + +Setting up an environment and installing the correct version of the modules is always a key to start with. If the modules are not installed in the correct version it gives an error. + +Next, need to download ESP-DL. clone the ESP-DL from the GitHub repository. + +```shell +git clone --recursive https://github.com/espressif/esp-dl.git +``` + +### Optimization and Quantization + +To run the optimizer provided by ESP-DL, we need to find and + +- calibrator.pyd +- calibrator_acc.pyd +- evaluator.pyd +- optimizer.py + +place these files into the working directory of pychram — IDE. Furthermore, also place the calibration dataset generated in the previous section 1.2 and ONNX format model saved in previous section 1.5 . + +Follow the below steps for generating optimized and quantize model. + + +```python +from optimizer import * +from calibrator import * +from evaluator import * + +# Load the ONNX model +onnx_model = onnx.load("handrecognition_model.onnx") +optimized_model_path = optimize_fp_model("handrecognition_model.onnx") + +# Load Calibration dataset +with open('X_cal.pkl', 'rb') as f: + (test_images) = pickle.load(f) +with open('y_cal.pkl', 'rb') as f: + (test_labels) = pickle.load(f) + +calib_dataset = test_images[0:1800:20] +pickle_file_path = 'handrecognition_calib.pickle' + +# Calibration +model_proto = onnx.load(optimized_model_path) +print('Generating the quantization table:') + +calib = Calibrator('int16', 'per-tensor', 'minmax') +# calib = Calibrator('int8', 'per-channel', 'minmax') + +calib.set_providers(['CPUExecutionProvider']) + +# Obtain the quantization parameter +calib.generate_quantization_table(model_proto,calib_dataset, pickle_file_path) +# Generate the coefficient files for esp32s3 +calib.export_coefficient_to_cpp(model_proto, pickle_file_path, 'esp32s3', '.', 'handrecognition_coefficient', True) +``` + +If everything is alright, at this stage two files with an extension .cpp and .hpp is generated in the path, and the output should look like this. + +### Evaluate + +This step is not necessary however if you want to evaluate the performance of the optimized model the following code can be used. + +```python +print('Evaluating the performance on esp32s3:') +eva = Evaluator('int16', 'per-tensor', 'esp32s3') +eva.set_providers(['CPUExecutionProvider']) +eva.generate_quantized_model(model_proto, pickle_file_path) + +output_names = [n.name for n in model_proto.graph.output] +providers = ['CPUExecutionProvider'] +m = rt.InferenceSession(optimized_model_path, providers=providers) + +batch_size = 64 +batch_num = int(len(test_images) / batch_size) +res = 0 +fp_res = 0 +input_name = m.get_inputs()[0].name +for i in range(batch_num): + # int8_model + [outputs, _] = eva.evalaute_quantized_model(test_images[i * batch_size:(i + 1) * batch_size], False) + res = res + sum(np.argmax(outputs[0], axis=1) == test_labels[i * batch_size:(i + 1) * batch_size]) + + # floating-point model + fp_outputs = m.run(output_names, {input_name: test_images[i * batch_size:(i + 1) * batch_size].astype(np.float32)}) + fp_res = fp_res + sum(np.argmax(fp_outputs[0], axis=1) == test_labels[i * batch_size:(i + 1) * batch_size]) +print('accuracy of int8 model is: %f' % (res / len(test_images))) +print('accuracy of fp32 model is: %f' % (fp_res / len(test_images) +``` + +## Model Deployment + +Model deployment is the final and crucial step. In this step, we will implement our model in C-language to run on the top of ESP32-S3 micro-controller and gets the results. + +### ESP-IDF Project Hierarchy +The first step is to create a new project in VS-Code based on ESP-IDF standards. For more details about how to create a VS-Code project for ESP32 please click here or here + +Copy the files.cpp and .hpp generated in the previous section 2.2 to your current working directory. + +Add all the dependent components to the components folder of your working directory. +sdkconfig files are default files from ESP-WHO example. These files are also provided in linked GitHub repository. + +The Project directory should look like this; +``` +├── CMakeLists.txt +├── components +│ ├── esp-dl +│ └── esp-who +├── dependencies.lock +├── main +│ ├── app_main.cpp +│ └── CMakeLists.txt +├── model +│ ├── handrecognition_coefficient.cpp +│ ├── handrecognition_coefficient.hpp +│ └── model_define.hpp +├── partitions.csv +├── sdkconfig +├── sdkconfig.defaults +├── sdkconfig.defaults.esp32 +├── sdkconfig.defaults.esp32s2 +└── sdkconfig.defaults.esp32s3 +``` + +### Model define + +We will define our model in the ‘model_define.hpp’ file. Follow the below steps for a details explanation of defining the model. + +#### Import libraries + +Firstly import all the relevant libraries. Based on our model design or another way to know which particular libraries need to use an open source tool Netron and open your optimized ONNX model generated at the end of previous section 2.2 . Please check here for all the currently supported libraries by ESP-DL. + +```cpp +#pragma once +#include +#include "dl_layer_model.hpp" +#include "dl_layer_base.hpp" +#include "dl_layer_max_pool2d.hpp" +#include "dl_layer_conv2d.hpp" +#include "dl_layer_reshape.hpp" +#include "dl_layer_softmax.hpp" +#include "handrecognition_coefficient.hpp" + +using namespace dl; +using namespace layer; +using namespace handrecognition_coefficient; +``` + +#### Declare layers + +The next is to declare each layer. + +Input is not considered a layer so not defined here. + +Except for the output layer, all the layers are declared as private layers. + +Remember to place each layer in order as defined in previous section 1.3 while building the model. + +```cpp +class HANDRECOGNITION : public Model +{ +private: + Reshape l1; + Conv2D l2; + MaxPool2D l3; + Conv2D l4; + MaxPool2D l5; + Conv2D l6; + MaxPool2D l7; + Reshape l8; + Conv2D l9; + Conv2D l10; +public: + Softmax l11; // output layer +``` + +#### Initialize layers + +After declaring the layers, we need to initialize each layer with its weight, biases activation functions and shape. let us check each layer in detail. + +Before getting into details, let us look into how our model looks like when opening in Netron that is somehow imported to get some parameters for initializing. + +The first layer is reshaped layer (note that the input is not considered as a layer) and gives an output shape of (96 , 96, 1) for this layer. These parameters must be the same as you used during model training see section 1.3. Another way to know the parameter and layer is to use an open source tool Netron and open your optimized ONNX model generated at the end of previous section 2.2. + +For the convolution 2D layer we can get the name of this layer for the filter, bias and activation function from the .hpp file generated at the end of the previous section 2.2, However for the exponents, we need to check the output generated in section 2.2.5. + +For the max-pooling layer, we can use the same parameters as we use during building our model see section 1.3. or another way to know the parameter and layer is to use an open-source tool Netron and open your optimized ONNX model generated at the end of the previous section 2.2. + +For the dense layer or fully connected layer, conv2D block is used and we can get the name of this layer for the filter, bias and activation function from the .hpp file generated at the end of previous section 2.2, However for the exponents, we need to check the output generated in section 2.2.5. + +The output layer is a SoftMax layer weight and the name can be taken from the output generated in section 2.2.5. + +```cpp +HANDRECOGNITION () : l1(Reshape({96,96,1})), + l2(Conv2D(-8, get_statefulpartitionedcall_sequential_1_conv2d_3_biasadd_filter(), get_statefulpartitionedcall_sequential_1_conv2d_3_biasadd_bias(), get_statefulpartitionedcall_sequential_1_conv2d_3_biasadd_activation(), PADDING_VALID, {}, 1,1, "l1")), + l3(MaxPool2D({2,2},PADDING_VALID, {}, 2, 2, "l2")), + l4(Conv2D(-9, get_statefulpartitionedcall_sequential_1_conv2d_4_biasadd_filter(), get_statefulpartitionedcall_sequential_1_conv2d_4_biasadd_bias(), get_statefulpartitionedcall_sequential_1_conv2d_4_biasadd_activation(), PADDING_VALID,{}, 1,1, "l3")), + l5(MaxPool2D({2,2},PADDING_VALID,{}, 2, 2, "l4")), + l6(Conv2D(-9, get_statefulpartitionedcall_sequential_1_conv2d_5_biasadd_filter(), get_statefulpartitionedcall_sequential_1_conv2d_5_biasadd_bias(), get_statefulpartitionedcall_sequential_1_conv2d_5_biasadd_activation(), PADDING_VALID,{}, 1,1, "l5")), + l7(MaxPool2D({2,2},PADDING_VALID,{}, 2, 2, "l6")), + l8(Reshape({1,1,6400},"l7_reshape")), + l9(Conv2D(-9, get_fused_gemm_0_filter(), get_fused_gemm_0_bias(), get_fused_gemm_0_activation(), PADDING_VALID, {}, 1, 1, "l8")), + l10(Conv2D(-9, get_fused_gemm_1_filter(), get_fused_gemm_1_bias(), NULL, PADDING_VALID,{}, 1,1, "l9")), + l11(Softmax(-14,"l10")){} +``` + +#### Build layers + +The next step is to build each layer. + +```cpp +void build(Tensor &input) + { + this->l1.build(input); + this->l2.build(this->l1.get_output()); + this->l3.build(this->l2.get_output()); + this->l4.build(this->l3.get_output()); + this->l5.build(this->l4.get_output()); + this->l6.build(this->l5.get_output()); + this->l7.build(this->l6.get_output()); + this->l8.build(this->l7.get_output()); + this->l9.build(this->l8.get_output()); + this->l10.build(this->l9.get_output()); + this->l11.build(this->l10.get_output()); + } +``` + +#### Call layers + +In the end, we need to connect these layers and call them one by one by using a call function. + +```cpp +oid call(Tensor &input) + { + this->l1.call(input); + input.free_element(); + + this->l2.call(this->l1.get_output()); + this->l1.get_output().free_element(); + + this->l3.call(this->l2.get_output()); + this->l2.get_output().free_element(); + + this->l4.call(this->l3.get_output()); + this->l3.get_output().free_element(); + + this->l5.call(this->l4.get_output()); + this->l4.get_output().free_element(); + + this->l6.call(this->l5.get_output()); + this->l5.get_output().free_element(); + + this->l7.call(this->l6.get_output()); + this->l6.get_output().free_element(); + + this->l8.call(this->l7.get_output()); + this->l7.get_output().free_element(); + + this->l9.call(this->l8.get_output()); + this->l8.get_output().free_element(); + + this->l10.call(this->l9.get_output()); + this->l9.get_output().free_element(); + + this->l11.call(this->l10.get_output()); + this->l10.get_output().free_element(); + } +}; +``` + +### Model Run + +#### Import Libraries + +After building our Model need to run and give input to our model. ‘app_main.cpp’ file is used to generate the input and run our model on ESP32-S3. + +```cpp +#include +#include +#include "esp_system.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "dl_tool.hpp" +#include "model_define.hpp" +``` + +#### Declare Input + +We trained our model by giving an input of size (96, 96, 1) see section 1.3. However, the input_exponent can get its exponent value from the output generated in section 2.2.5. Another thing is to write the pixels of the input/test picture here. + +```cpp +int input_height = 96; +int input_width = 96; +int input_channel = 1; +int input_exponent = -7; + +__attribute__((aligned(16))) int16_t example_element[] = { + + //add your input/test image pixels +}; +``` + +#### Set Input Shape + +Each pixel of the input is adjusted based on the input_exponent declared above. + +```cpp +extern "C" void app_main(void) +{ +Tensor input; + input.set_element((int16_t *)example_element).set_exponent(input_exponent).set_shape({input_height,input_width,input_channel}).set_auto_free(false); +``` + +#### Call a Model + +Call the model by calling the method forward and passing input to it. Latency is used to calculate the time taken by ESP32-S3 to run the neural network. + +```cpp +HANDRECOGNITION model; + dl::tool::Latency latency; + latency.start(); + model.forward(input); + latency.end(); + latency.print("\nSIGN", "forward"); +``` + +#### Monitor Output + +The output is taken out from the public layer i.e. l11. and you can print the result in the terminal. + +```cpp +float *score = model.l11.get_output().get_element_ptr(); +float max_score = score[0]; +int max_index = 0; +for (size_t i = 0; i < 6; i++) +{ + printf("%f, ", score[i]*100); + if (score[i] > max_score) + { + max_score = score[i]; + max_index = i; + } +} +printf("\n"); + +switch (max_index) +{ + case 0: + printf("Palm: 0"); + break; + case 1: + printf("I: 1"); + break; + case 2: + printf("Thumb: 2"); + break; + case 3: + printf("Index: 3"); + break; + case 4: + printf("ok: 4"); + break; + case 5: + printf("C: 5"); + break; + default: + printf("No result"); +} +printf("\n"); +``` + +The model latency is around 0.7 Seconds on ESP32-S3, whereas each neuron output and finally the predicted result is shown. + +## Future Work + +In future, we will design a model for [ESP32-S3 EYE](https://www.espressif.com/en/products/devkits/esp-eye/resourceswww.espressif.com2) devkit which could capture images in real time and performs hand gesture recognition. Check out the [GitHub](https://github.com/alibukharai/Blogs/tree/main/ESP-DL) repository for source code. diff --git a/content/blog/homekit-on-espressifs-esp32/index.md b/content/blog/homekit-on-espressifs-esp32/index.md new file mode 100644 index 000000000..597f0c9e5 --- /dev/null +++ b/content/blog/homekit-on-espressifs-esp32/index.md @@ -0,0 +1,65 @@ +--- +title: "HomeKit on Espressif’s ESP32" +date: 2019-02-10 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Internet Of Things + - Esp32 + +--- +IoT is not one thing, it means different things to different people. So also, there are so many ways of building connected products. And that means there are so many questions for every aspect of your connected product: + +- What communication protocols do we use? +- Which network configuration mechanism should we use? +- What do we use for remote communication? +- What’s the most secure method for doing this? +- Do we offer low-latency control options through local network access? +- How do we expose this in the app so that it offers the smoothest user experience? +- How do we participate in the broader smart-home ecosystem? + +Every question is additional time spent researching about a topic and identifying the best (and secure) solution for the problem. + +When the Apple HomeKit ecosystem came along, it came with a set of defined solutions for most of these questions, such that they are secure, easy to use and part of a larger ecosystem. + +In the same spirit, we decided to build a HomeKit SDK that is extremely easy and intuitive to build with. And at the same time make it quite extensible, for developers that want to do off-beat things with it. + +So far, we have a large number of customers developing with our HomeKit SDK (HomeKit requires developers to have Apple’s MFi license), and given the feedback that I have seen, the SDK has helped them shave off significant development time, reaching to production faster. The SDK has been a significant product management win. Let’s look at some key highlights. + +## API + +Let’s say, I have been a manufacturer of electric switches. I think this consumer interest in the smart-home is exciting and I want to build a smart electric switch. What I really want to do is enable the on/off toggle of this switch through a phone or tablet. All I want is a way to say that these are the __attributes__ I have (in this case: *the power state*), and this is what happens when I __read__ the attributes or __update__ them (in this case: assert/deassert a GPIO that controls a relay). All these questions above, about network configuration, discovery, cloud servers and interoperability are a needless hindrance. Should I really have to answer all these questions, and if so who do I seek out for a more informed decision? + +For the HomeKit SDK, we have spent a significant amount of time on the API design, keeping this in mind. We have structured the API in such a way that for all the common scenarios, customers only have to do the bare minimal things. They declare what the device __attributes__ are (heating/cooling state and temperature for the thermostat), and how to __read/update__ them (perform a SPI transaction that sets the temperature). Everything else about connectivity, comformance, state management, is handled by the SDK. + +And by creating the right layers of advanced APIs underneath these simplified APIs, we can also accommodate the diverging use cases that don’t necessarily fit in this simplified model. This allows us to support a wide range of end-product scenarios. + +## End-Product Features + +We keep putting ourselves into our customers’ shoes, trying to understand the typical additional features that developers would want to have in their product. And try to provide better support for these up-front. + +For example, developers building HomeKit-enabled products, may also want to have support for Android-initiated configuration or Android/Cloud initiated access. The SDK includes software components that let you do this without affecting the HomeKit workflows. And it is structured so that it is an optional component, (a) you could use it in your product, (b) you could completely not have it, or (c) use a completely different method for supporting Android access. + +Similar is the case for supporting common features such as over-the-air (OTA) firmware upgrades, using secure storage, or handling per-device unique manufacturing data. Appropriate abstractions ensure that these common tasks are made as smooth as possible, at the same time, provide flexibility to diverge. + +## Developer Workflows + +For an SDK, optimising for developer workflows directly implies getting faster to that production-ready firmware. As developers start using the HomeKit SDK, they are at various stages of HomeKit expertise. Some have done it before, some are just starting anew. Some may have all the hardware components required for building HomeKit products, while others may have to wait for the hardware lead time before they get started. + +The SDK provides multiple start points such that evaluation or development doesn’t have to block on one particular aspect. As you progress through the stages of evaluation to manufacturing, you can incrementally move components into the final production-ready state. + +## Fix-only-once + +Our mantra for support is *Fix only once*. What that means is that once a customer issue is reported, it should either lead to a documentation update, or a code commit. This ensures that that issue, or those class of issues, should never be reported again by any customer. + +Our SDK continues to evolve with every new customer that uses the SDK, and every new feature that they implement. We are excited about this journey and continue to look forward to making it even easier to build connected devices. + +## References + +- Register for HomeKit SDK access (MFi Account Number Mandatory): [https://www.espressif.com/en/company/contact/pre-sale-questions-crm?js-from=homekit](https://www.espressif.com/en/company/contact/pre-sale-questions-crm?js-from=homekit) +- Mass Manufacturing Utility: [https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/storage/mass_mfg.html](https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/storage/mass_mfg.html) +- Manufacturing Data Partitions: [https://medium.com/the-esp-journal/building-products-creating-unique-factory-data-images-3f642832a7a3](/blog/building-products-creating-unique-factory-data-images) + +All product names, trademarks and registered trademarks are property of their respective owners. diff --git a/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-1.webp b/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-1.webp new file mode 100644 index 000000000..a48f60456 Binary files /dev/null and b/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-1.webp differ diff --git a/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-2.webp b/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-2.webp new file mode 100644 index 000000000..d877f411b Binary files /dev/null and b/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-2.webp differ diff --git a/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-3.webp b/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-3.webp new file mode 100644 index 000000000..4be37e558 Binary files /dev/null and b/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-3.webp differ diff --git a/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-4.webp b/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-4.webp new file mode 100644 index 000000000..85a183580 Binary files /dev/null and b/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-4.webp differ diff --git a/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-5.webp b/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-5.webp new file mode 100644 index 000000000..3abe9242d Binary files /dev/null and b/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-5.webp differ diff --git a/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-6.webp b/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-6.webp new file mode 100644 index 000000000..4a8dac293 Binary files /dev/null and b/content/blog/how-to-use-custom-partition-tables-on-esp32/img/how-6.webp differ diff --git a/content/blog/how-to-use-custom-partition-tables-on-esp32/index.md b/content/blog/how-to-use-custom-partition-tables-on-esp32/index.md new file mode 100644 index 000000000..357c123b7 --- /dev/null +++ b/content/blog/how-to-use-custom-partition-tables-on-esp32/index.md @@ -0,0 +1,323 @@ +--- +title: "How to use custom partition tables on ESP32" +date: 2021-02-12 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - pedro-minatel +tags: + - Espressif + - Esp32 + - IoT + - Esp Idf + +--- +{{< figure + default=true + src="img/how-1.webp" + >}} + +## Introduction + +When we create a new project using __ESP32__ , sometimes we need to store data in the flash to persist even after a restart or power down. In the past, the most common way to do that was by using EEPROM, with just a few bytes of storage ability which limited it for larger amount of data. + +On the other hand, the __ESP32__ uses a flash memory to store the firmware, including the bootloader and other relevant data. The flash memory size may vary from version to version, but it’s enough for most of the application code and you still can manage to have some spare storage area. + +But not only the firmware, (your application) is stored in the flash memory. There is some other important data to keep in the flash, including the partitions map, RF calibration data, WiFi data, Bluetooth pairing information, Over-the-air updates and many other data important enough to be kept in the flash. + +To see all ESP32 family variants, see this ordering information [__link__ ](https://www.espressif.com/sites/default/files/documentation/espressif_products_ordering_information_en.pdf). + +> Important note: This article uses the [ESP-IDF v4.2](https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/) and all references use this version. + +## Understanding partition tables + +The partition tables on the ESP32 works very similarly to our computer. Just imagine that you can logically separate data according to the usage by telling the system where certain type of data will be stored on the memory, the type of this partition and, of course, the size. + +Using the partition tables, you can have your application stored in one partition and your data, like the configuration or any other data, could be stored in a different partition. This allows you to keep your app and data in a separate memory area, making it possible, for example, to update only the application with a latest version and keep all your data intact. + +The default partition scheme is defined by two different major partitions: + +## nvs + +The default NVS partition is used to store the unique device PHY calibration, WiFi data, Bluetooth pairing information, and any other value to be stored as NVS format. The default size is 24kB (0x6000 bytes). + +## factory + +The factory partition stores the application firmware itself. The bootloader uses this partition as the starting point to initialize the application. When using [__OTA__ ](https://docs.espressif.com/projects/esp-jumpstart/en/latest/firmwareupgrade.html), this partition is used only if all OTA partitions are empty, otherwise the actual OTA partition will be used, and the factory partition will be no longer used. + +Another usage for this partition is to keep the default application and use the OTA API to change the boot partition in case of factory reset (after updating the device to some OTA partition) or some failure during OTA updates. + +## Use case + +The most common usage for a custom partition table is when the firmware needs to be updated remotely by using the Over-The-Air update. This feature requires, at least three additional partitions to store the OTA data (*ota*) and two application (*ota_0* and *ota_1*). + +Another usage for this feature to add another storage area for saving files, logging data, device configuration, GPIO status or many other kinds of data. + +You can also use the extended storage area to store the cloud certificates, therefore avoiding the need to keep hardcoded in your application (not recommended at all). + +The flash memory on the [__ESP32__ ](https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf) and [__ESP32-S2__ ](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf) is limited to up to 16MB. This way, if you need a more than 16MB of flash memory for data storage, you can add a second flash memory or an SDCard to your board. + +## Creating custom partition tables + +To start creating new partitions, we need to first understand the partitions’ file structure. The custom partition tables are defined by a CSV file with the following structure: + +``` +__# ESP-IDF Partition Table +# Name, Type, SubType, Offset, Size, Flags__ +``` + +The CSV file contains 6 columns, defined in the second line in the CSV file. + +## Name + +The first column is the partition name, and it defines the label of the partition. + +The name field doesn’t have special meaning (except to the default NVS partition) but must be meaningful according to the partition usage and the name size should at maximum of 16 chars (larger names will be truncated). + +## Type + +The second column is the partition type. Currently there are two types: *data* and *app*. + +The __*data (0x01)*__ type can be used to define the partition that stores general data, not the application. + +The __*app (0x00)*__ type is used to define the partition that will store the application. + +Note: The type is defined by the [esp_partition_type_t enumeration](https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/api-reference/storage/spi_flash.html#_CPPv420esp_partition_type_t). + +## SubType + +The third column is the partition sub type and defines the usage of the __*app*__ and __*data*__ partitions. + +__SubType for data partitions:__ + +For the __*data*__ type, the subtype can be specified as: + +Note: The subtype is defined on the [__*esp_partition_subtype_t enumeration*__ ](https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/api-reference/storage/spi_flash.html#_CPPv423esp_partition_subtype_t). + +- __ota (0x00):__ The *ota* subtype is used to store the OTA information. This partition is used only when the OTA is used to select the initialization partition, otherwise no need to add it to your custom partition table.The size of this partition should be a fixed size of 8kB (0x2000 bytes). +- __nvs (0x02):__ The *nvs* partition subtype is used to define the partition to store general data, like the WiFi data, device PHY calibration data and any other data to be stored on the non-volatile memory.This kind of partition is suitable for small custom configuration data, cloud certificates, etc. Another usage for the NVS is to store sensitive data, since the NVS supports encryption.It is highly recommended to add at least one *nvs* partition, labeled with the name nvs, in your custom partition tables with size of at least 12kB (0x3000 bytes). If needed, you can increase the size of the nvs partition.The recommended size for this partition is from 12kb to 64kb. Although larger NVS partitions can be defined, we recommend using FAT or SPIFFS filesystem for storage of larger amounts of data. +- __coredump (0x03):__ The *coredump* partition subtype is used to store the [__core dump__ ](https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/api-guides/core_dump.html) on the flash. The core dump is used to analyze critical errors like crash and panic.This function must be enabled in the project configuration menu and set the data destination to flash.The recommended size for this partition is 64kB (0x10000). +- __nvs_keys (0x04):__ The *nvs_keys* partition subtype is used to store the keys when the NVS encryption is used.The size for this partition is 4kB (0x1000). +- __fat (0x81):__ The *fat* partition subtype defines the FAT filesystem usage, and it is suitable for larger data and if this data is often updated and changed. The FAT FS can be used with [__wear leveling__ ](https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/api-reference/storage/wear-levelling.html) feature to increase the erase/modification cycles per memory sector and [__encryption__ ](https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/security/flash-encryption.html) for sensitive data storage, like cloud certificates or any other data that may be protected.To use FAT FS with wear leveling see the [example](https://github.com/espressif/esp-idf/tree/release/v4.2/examples/storage/wear_levelling). +- __spiffs (0x82):__ The *spiffs* partition subtype defines the SPI flash filesystem usage, and it is also suitable for larger files and it also performs the wear leveling and file system consistency check.The SPIFFS do not support flash encryption. + +__SubType for app partitions:__ + +For the __*app*__ type it can be specified as: + +- __factory (0x00):__ The *factory* partition subtype is the default application. The bootloader will set this partition as the default application initialization if no OTA partition is found, or the OTA partitions are empty.If the OTA partition is used, the ota_0 can be used as the default application and the *factory* can be removed from the partition table to save memory space. +- __ota_0 to ota_15 (0x10–0x19):__ The *ota_x* *partition* subtype is used for the [Over-the air](https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/api-reference/system/ota.html) update. The OTA feature requires at least two *ota_x* partition (usually *ota_0* and *ota_1*) and it also requires the *ota* partition to keep the OTA information data.Up to 16 OTA partitions can be defined but only two are needed for basic OTA feature. +- __test (0x20):__ The *test* partition subtype is used for [__factory test procedures__ ](https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/api-guides/bootloader.html#bootloader-boot-from-test-firmware). + +## Offset + +The fourth column is the memory offset and it defines the partition start address. The offset is defined by the sum of the offset and the size of the earlier partition. + +Note that the first partition (nvs in our case) must start at offset 0x9000. This is mandatory due the bootloader (offset 0x1000 and size of 0x7000) and the partition table section offset (offset 0x8000 and size of 0x1000) as well. Those partitions are not listed in the CSV file. + +If the size of the bootloader needs to be increased, due any customization on it for example, you need to increase the offset in the project configuration menu (*Partition Table → Offset of partition table*) and you need to add the new offset on the first partition. + +> Offset must be multiple of 4kB (0x1000) and for *app* partitions it must be aligned by 64kB (0x10000). + +If left blank, the offset will be automatically calculated based on the end of the previous partition, including any necessary alignment. + +## Size + +The fifth column is size and defines the amount of memory to be allocated on the partition. The size can be formatted as decimal, hex numbers (0x prefix), or using unit prefix K (kilo) or M (mega) i.e: 4096 = 4K = 0x1000. + +The size is defined in number of bytes and the minimum size is 4kB. The size for larger partitions must be multiple of 4kB. The maximum size is limited by the flash memory size, including all partitions. + +## Flags + +The last column in the CSV file is the *flags* and it is currently used to define if the partition will be encrypted by the [__flash encryption__ ](https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/security/flash-encryption.html) feature. + +After creating the CSV file, we need to change the project configuration to load the new partition tables’ file. + +It is important to mention that for any changes on the partition tables structure, we need to erase the flash memory and reprogram the device including the new partitions binary file. + +There is a [__tool__ ](https://github.com/espressif/esp-idf/blob/v4.2/components/partition_table/gen_esp32part.py) to create the partition table in binary format manually from the CSV file. This conversion is done automatically during the build process. + +## Demo + +To show the usage of custom partition tables, we will create a quite simple demo with an extended NVS partition and one partition for SPIFFS alongside the default partitions and OTA. + +The code will be based on the *partition_find* example, using the [ESP-IDF v4.2](https://github.com/espressif/esp-idf/tree/release/v4.2/examples/storage/partition_api/partition_find). + +The extended NVS will be used to store the device configuration and any other small relevant data besides the other NVS partition. + +*NOTE: We highly recommend the use of NVS to store small amount of data. For larger data storage, you should move to FAT file system or SPIFFS.* + +Another partition that we will create is to store files and any other large data. For that partition, we will use the SPIFFS format. + +{{< figure + default=true + src="img/how-2.webp" + >}} + +In this demo, our [__development board is based on ESP32__ ](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/hw-reference/esp32/get-started-devkitc.html) and equipped with a 8MB flash memory. + +The custom partition table will be the following: + +``` +__*# ESP-IDF Partition Table +# Name, Type, SubType, Offset, Size, Flags*__ * +nvs,* *data, nvs, 0x9000,* *0x6000, +otadata,* *data, ota, 0xf000, 0x2000, +ota_0,* *app, ota_0, 0x20000, 0x200000, +ota_1,* *app, ota_1, 0x220000, 0x200000, +storage,* *data, spiffs, 0x420000, 0x200000, +nvs_ext,* *data, nvs, 0x620000, 0x10000,* +``` + +The graphical representation of the partition table is the following: + +{{< figure + default=true + src="img/how-3.webp" + >}} + +The *storage* will be used with SPIFFS and the *nvs_ext* for extra NVS data storage. + +It’s important to mention that the both OTA partitions should have the same size and be sure to keep in mind to allocate enough space for additional features in the future. + +If not using OTA, you don’t need to set the size of 2MB on the factory partition, if your firmware size is less than 1MB. + +Now we need to add the new CVS file, named as __*partitions_example.csv*__ and change the example to find the partition scheme: + +After flashing and running the example, the output will show all detected partitions, according to our partition table layout. + +``` +idf.py -p flash monitor +``` + +Log output on terminal: + +``` +# ESP-IDF Partition Table +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, 0x9000, 0x6000, +otadata, data, ota, 0xf000, 0x2000, +ota_0, app, ota_0, 0x20000, 0x200000, +ota_1, app, ota_1, 0x220000, 0x200000, +storage, data, spiffs, 0x420000, 0x200000, +nvs_ext, data, nvs, 0x620000, 0x10000, +I (380) example: ----------------Find partitions--------------- +I (390) example: Find partition with type ESP_PARTITION_TYPE_DATA, subtype ESP_PARTITION_SUBTYPE_DATA_NVS, label NULL (unspecified)... +I (400) example: found partition 'nvs' at offset 0x9000 with size 0x6000 +I (410) example: Find partition with type ESP_PARTITION_TYPE_DATA, subtype ESP_PARTITION_SUBTYPE_DATA_PHY, label NULL (unspecified)... +E (420) example: partition not found! +I (430) example: Find partition with type ESP_PARTITION_TYPE_APP, subtype ESP_PARTITION_SUBTYPE_APP_FACTORY, label NULL (unspecified)... +E (440) example: partition not found! +I (450) example: Find partition with type ESP_PARTITION_TYPE_DATA, subtype ESP_PARTITION_SUBTYPE_DATA_FAT, label NULL (unspecified)... +E (460) example: partition not found! +I (460) example: Find partition with type ESP_PARTITION_TYPE_DATA, subtype UNKNOWN_PARTITION_SUBTYPE, label NULL (unspecified)... +I (480) example: found partition 'storage' at offset 0x420000 with size 0x200000 +I (480) example: Find partition with type ESP_PARTITION_TYPE_DATA, subtype ESP_PARTITION_SUBTYPE_APP_FACTORY, label NULL (unspecified)... +I (500) example: found partition 'otadata' at offset 0xf000 with size 0x2000 +I (500) example: Find partition with type ESP_PARTITION_TYPE_DATA, subtype UNKNOWN_PARTITION_SUBTYPE, label NULL (unspecified)... +E (520) example: partition not found! +I (520) example: Find partition with type ESP_PARTITION_TYPE_DATA, subtype UNKNOWN_PARTITION_SUBTYPE, label NULL (unspecified)... +E (530) example: partition not found! +I (540) example: Find second FAT partition by specifying the label +I (540) example: Find partition with type ESP_PARTITION_TYPE_DATA, subtype ESP_PARTITION_SUBTYPE_DATA_NVS, label nvs_ext... +I (560) example: found partition 'nvs_ext' at offset 0x620000 with size 0x10000 +I (560) example: ----------------Iterate through partitions--------------- +I (570) example: Iterating through app partitions... +I (580) example: found partition 'ota_0' at offset 0x20000 with size 0x200000 +I (590) example: found partition 'ota_1' at offset 0x220000 with size 0x200000 +I (590) example: Iterating through data partitions... +I (600) example: found partition 'nvs' at offset 0x9000 with size 0x6000 +I (610) example: found partition 'otadata' at offset 0xf000 with size 0x2000 +I (610) example: found partition 'storage' at offset 0x420000 with size 0x200000 +I (620) example: found partition 'nvs_ext' at offset 0x620000 with size 0x10000 +I (630) example: Example end +``` + +To use the extended NVS partition (nvs_ext), you need to change the NVS initialization by using* *[*nvs_flash_init_partition_ptr*](https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/api-reference/storage/nvs_flash.html#_CPPv424nvs_flash_init_partitionPKc) by passing the NVS partition name. + +## Using ESP-IDF VS Code Extension + +There is another way to work with the partition table CSV file, instead of editing in text mode. The [ESP-IDF VS Code Extension](https://marketplace.visualstudio.com/items?itemName=espressif.esp-idf-extension) allows you to install ESP-IDF, manage and create projects directly on the Microsoft Visual Studio Code IDE. + +ESP-IDF VS Code Extension embeds various tools to aid in development. One of those tools is used to create the partition table using a GUI tool, called the ESP-IDF Partition Table Editor. + +To start the Partition Table Editor, first open the Command Palette and type *Partition Table Editor UI *to open the editor interface (to open the command menu press F1). + +{{< figure + default=true + src="img/how-4.webp" + >}} + +Now you can start creating your Partition Table structure by filling the same fields described in the last section. + +{{< figure + default=true + src="img/how-5.webp" + >}} + +After creating the partition table structure, you can save the CSV file to your project, build the binary and flash it to your board. + +{{< figure + default=true + src="img/how-6.webp" + >}} + +If you are interested, watch the get started with the ESP-IDF VS Code Extension video-tutorial: + +## Common issues (Troubleshooting) + +Some of the most common issues when dealing with partitions are about the alignment and overlapping. + +First, you need to flash erase if any modification on the partitions structure is done. This ensures that all new binary files will be flashed. + +To erase flash, use the following command: + +``` +idf.py -p erase_flash +``` + +## Failed to find X partition… + +This issue means that the partition is not found or missing in your partition tables. This could be due to some wrong value on the CSV file, like the wrong type or subtype. + +## Partition overlapping issue + +If your partition offset points into an area that belongs to another partition, you will see an error like the following: + +CSV Error: Partitions overlap. Partition at line 6 sets offset __0x210000__ . Previous partition ends __0x220000__ + +It means that your partition at line 6 on the CSV should start at __0x220000__ and not at __0x210000__ . To solve this issue, change the value on the CSV file. + +## Memory size issue + +The most common issue about the partition size stands for the size alignment. + +For the partitions type __*app*__ , the size must be aligned by 64kB (0x10000) and must be multiple of the same value. This means that the size and offset must be aligned by 64kB for any *app* partition. + +If you have a partition like this: + +``` +ota_0, app, ota_0, 0x12000, 0x200000, +``` + +Then the error should be something like this: + +Partition ota_0 invalid: Offset 0x12000 is not aligned to 0x10000 + +To solve this issue, change the offset to __0x20000__ and remember to recalculate the next offset. + +A smart solution for any alignment issue is to keep the offset blank and let the magic happen. By keeping the offset blank, the offset will be calculated *automagically.* + +For example, if you create a partition table that uses 8MB flash, be sure to change in the project configuration the right amount on the menu ‘*Serial flasher config — → Flash size’*. + +## Conclusion + +Creating custom partition tables in your project can be advantageous as you reuse available flash memory for extended data storage by customizing the partitions. This technique can avoid usage of external SDCard for extra data storage. + +When defining a custom partition table, make sure to use the right amount of data and alignment for each partition. Have in mind to allocate some free space in the application partition, especially when OTA is used, avoiding any problem if the size of the application increases and doesn't fits in the partition anymore. + +That way, you can maximize the flash usage you will not be wasting resources! + +## Reference for Partition Table + +Docs: [API Guide — Partition Tables](https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/api-guides/partition-tables.html) diff --git a/content/blog/how-to-use-wokwi-simulator-with-espressif-ide/img/how-1.webp b/content/blog/how-to-use-wokwi-simulator-with-espressif-ide/img/how-1.webp new file mode 100644 index 000000000..23d940652 Binary files /dev/null and b/content/blog/how-to-use-wokwi-simulator-with-espressif-ide/img/how-1.webp differ diff --git a/content/blog/how-to-use-wokwi-simulator-with-espressif-ide/img/how-2.webp b/content/blog/how-to-use-wokwi-simulator-with-espressif-ide/img/how-2.webp new file mode 100644 index 000000000..f2d56dfbe Binary files /dev/null and b/content/blog/how-to-use-wokwi-simulator-with-espressif-ide/img/how-2.webp differ diff --git a/content/blog/how-to-use-wokwi-simulator-with-espressif-ide/index.md b/content/blog/how-to-use-wokwi-simulator-with-espressif-ide/index.md new file mode 100644 index 000000000..be19b2bde --- /dev/null +++ b/content/blog/how-to-use-wokwi-simulator-with-espressif-ide/index.md @@ -0,0 +1,42 @@ +--- +title: "How to use Wokwi Simulator with Espressif-IDE" +date: 2023-04-16 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kondal-kolipaka +tags: + - 2.9.0 + - Espressif Ide + - Esp Idf + - Wokwi + - Espressif + +--- +The [Espressif IDE](https://github.com/espressif/idf-eclipse-plugin/blob/master/docs/Espressif-IDE.md) version [2.9.0](https://github.com/espressif/idf-eclipse-plugin/releases/tag/v2.9.0) has recently been released, introducing a new feature for the Espressif community who want to use the Wokwi simulator directly from within the IDE. + +__What is Wokwi?__ + +Wokwi is an online electronics simulator that allows users to simulate various boards, parts, and sensors, including the ESP32. With a browser-based interface, Wokwi offers a simple and intuitive way to start coding your next IoT project within seconds. + +__How does the integration work between Wokwi and Espressif-IDE?__ + +Espressif-IDE provides a development environment for building IoT applications using [ESP-IDF](https://github.com/espressif/esp-idf) with various Espressif boards. While you can build, flash, monitor, and debug your applications within the IDE, visualizing the serial output requires an esp32-based development board. This is where the Wokwi simulator comes in. + +Espressif-IDE provides a Wokwi integration plugin that allows the IDE to communicate with the [Wokwi Server](https://github.com/MabezDev/wokwi-server/) over a websocket, enabling the flashing of the .bin file of the project built in the IDE. Based on the chip target and project ID provided by the IDE, the Wokwi server launches the simulator in the system browser for the specified target. As a result, users can view the serial monitor output in the IDE console while communicating with the simulator. + +{{< figure + default=true + src="img/how-1.webp" + >}} + +__To use the Wokwi simulator from the Espressif-IDE, you need to follow these simple steps:__ + +{{< figure + default=true + src="img/how-2.webp" + >}} + +__Conclusion__ + +In summary, the integration of the Wokwi simulator into Espressif-IDE provides a seamless experience for users to build and test their IoT projects without the need for a physical development board. This integration opens up new possibilities for developers looking to streamline their workflow and experiment with new ideas in a cost-effective manner. diff --git a/content/blog/introducing-esp-insights/img/introducing-1.webp b/content/blog/introducing-esp-insights/img/introducing-1.webp new file mode 100644 index 000000000..b77ccf10f Binary files /dev/null and b/content/blog/introducing-esp-insights/img/introducing-1.webp differ diff --git a/content/blog/introducing-esp-insights/img/introducing-2.webp b/content/blog/introducing-esp-insights/img/introducing-2.webp new file mode 100644 index 000000000..f2f6f6fb4 Binary files /dev/null and b/content/blog/introducing-esp-insights/img/introducing-2.webp differ diff --git a/content/blog/introducing-esp-insights/img/introducing-3.webp b/content/blog/introducing-esp-insights/img/introducing-3.webp new file mode 100644 index 000000000..fe80199de Binary files /dev/null and b/content/blog/introducing-esp-insights/img/introducing-3.webp differ diff --git a/content/blog/introducing-esp-insights/img/introducing-4.webp b/content/blog/introducing-esp-insights/img/introducing-4.webp new file mode 100644 index 000000000..3966b5234 Binary files /dev/null and b/content/blog/introducing-esp-insights/img/introducing-4.webp differ diff --git a/content/blog/introducing-esp-insights/img/introducing-5.webp b/content/blog/introducing-esp-insights/img/introducing-5.webp new file mode 100644 index 000000000..91dff392b Binary files /dev/null and b/content/blog/introducing-esp-insights/img/introducing-5.webp differ diff --git a/content/blog/introducing-esp-insights/index.md b/content/blog/introducing-esp-insights/index.md new file mode 100644 index 000000000..a028ce05b --- /dev/null +++ b/content/blog/introducing-esp-insights/index.md @@ -0,0 +1,81 @@ +--- +title: "Introducing ESP Insights" +date: 2021-07-05 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Esp32 + - Observability + - Espinsights + +--- +{{< figure + default=true + src="img/introducing-1.webp" + >}} + +Today we are announcing ESP Insights. + +ESP Insights is a device observability framework that allows developers to remotely peek into their firmware to get rich information about the firmware execution; and analyse this to pin-point issues and bottlenecks. This observability should help organisations save valuable engineering resources, allowing them to speed up firmware development and fix issues within a shorter turn-around time. + +In the preview release that we launched today: + +- You can observe the __critical logs__ , or errors that the firmware has generated during its execution. +- If the firmware crashed, you can observe the __register dump__ and the __backtrace__ , to help you understand what may have been going on with the device. +- You can look at a __device timeline__ that shows the events of interest. +- You can add your __custom events__ to show up on this timeline. +- You can observe __firmware metrics__ like the amount of free heap over a timeline. +- You can view the current values of certain __variables__ of interest. + +{{< figure + default=true + src="img/introducing-2.webp" + >}} + +The *Insights agent* in the firmware leverages the Wi-Fi connectivity, and allows devices to post this information to the *Insights cloud*. The Insights cloud collects this information, from all the deployed devices, and compiles them into meaningful representations. Firmware developers can view this information through a web-based dashboard, the *Insights dashboard*. + +## Why ESP Insights? + +In multiple discussions with our customers, we noticed a pattern. As software development progresses and gets closer to the initial alpha, or beta runs, the observability into the firmware diminishes. What was easily visible as console logs and through CLIs to the developer, is now hidden when the firmware is packaged into the final ID. The trial or beta runs, indicate there may be issues, but there is no faster way to recreate them in a dev/QA environment. + +## 1. Launch Products Faster + +- __Beta test runs__ expose the product to a real-life uncontrolled environment: the development board is packaged into an industrial design and actually deployed in user’s home. The idea of these runs is to get information to your engineering team about firmware stability and issues as might be observed with the user’s environments. ESP Insights allows developers, sitting on their desks, to view stack back-traces and register dumps for firmware running on devices in these runs. +- __Turn-around time__ for fixing issues is much shorter for developers that have rich information about issues. Most teams spend enormous amounts of time recreating issues based on the scanty user-visible symptoms reported to them. ESP Insights captures and reports details about errors or warnings as observed on the device firmware. Of particular interest are events generated just before a crash. ESP Insights preserves these events across a device reset, so that it is reported to the cloud once the device is back up again. + +{{< figure + default=true + src="img/introducing-3.webp" + >}} + +## 2. Fix Issues Before they Snowball + +- __Monitoring Device Health__ by tracking key metrics such as available free memory, or largest free block, allow developers to understand the kind of stress the device gets under and plan for these better in their upcoming firmware versions. + +{{< figure + default=true + src="img/introducing-4.webp" + >}} + +- __Detailed Crash Backtraces__ on the ESP Insights console allow developers to start working on issues even before customers may notice them. + +{{< figure + default=true + src="img/introducing-5.webp" + >}} + +## Integration with ESP RainMaker + +Today, the preview release for ESP Insights works with ESP RainMaker. What this implies is that we leverage the ESP RainMaker platform for device-authentication and device-cloud transport. + +We will soon follow-up with another release for customers who wish to use ESP Insights by itself. + +## Getting Started + +Please refer to the [Getting Started](https://github.com/espressif/esp-insights#getting-started) section for steps on setting up esp-insights for your ESP32. + +We are excited to start this journey with ESP Insights. Our release today is but a small step towards, what we believe, will be a rich platform that assists developers in novel ways, to building more robust software faster. + +Title image picture credits: pixabay diff --git a/content/blog/introducing-esp-privilege-separation/img/introducing-1.webp b/content/blog/introducing-esp-privilege-separation/img/introducing-1.webp new file mode 100644 index 000000000..2b1402785 Binary files /dev/null and b/content/blog/introducing-esp-privilege-separation/img/introducing-1.webp differ diff --git a/content/blog/introducing-esp-privilege-separation/img/introducing-2.webp b/content/blog/introducing-esp-privilege-separation/img/introducing-2.webp new file mode 100644 index 000000000..aebc98831 Binary files /dev/null and b/content/blog/introducing-esp-privilege-separation/img/introducing-2.webp differ diff --git a/content/blog/introducing-esp-privilege-separation/img/introducing-3.webp b/content/blog/introducing-esp-privilege-separation/img/introducing-3.webp new file mode 100644 index 000000000..427b90867 Binary files /dev/null and b/content/blog/introducing-esp-privilege-separation/img/introducing-3.webp differ diff --git a/content/blog/introducing-esp-privilege-separation/img/introducing-4.webp b/content/blog/introducing-esp-privilege-separation/img/introducing-4.webp new file mode 100644 index 000000000..d31c4808f Binary files /dev/null and b/content/blog/introducing-esp-privilege-separation/img/introducing-4.webp differ diff --git a/content/blog/introducing-esp-privilege-separation/img/introducing-5.webp b/content/blog/introducing-esp-privilege-separation/img/introducing-5.webp new file mode 100644 index 000000000..156ec7365 Binary files /dev/null and b/content/blog/introducing-esp-privilege-separation/img/introducing-5.webp differ diff --git a/content/blog/introducing-esp-privilege-separation/img/introducing-6.webp b/content/blog/introducing-esp-privilege-separation/img/introducing-6.webp new file mode 100644 index 000000000..adb2e1c57 Binary files /dev/null and b/content/blog/introducing-esp-privilege-separation/img/introducing-6.webp differ diff --git a/content/blog/introducing-esp-privilege-separation/index.md b/content/blog/introducing-esp-privilege-separation/index.md new file mode 100644 index 000000000..81d25d5d5 --- /dev/null +++ b/content/blog/introducing-esp-privilege-separation/index.md @@ -0,0 +1,136 @@ +--- +title: "Introducing ESP Privilege Separation" +date: 2022-06-19 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - sachin-parekh +tags: + - Esp32 + - IoT + - Security + - Embedded Systems + +--- +Typically, applications on microcontrollers (MCU) are developed as monolithic firmware. We have been discussing on achieving “user-kernel” separation with appropriate execution privileges, like general purpose OS, on MCUs. + +The crux of this was to make the end application development easier without worrying about the underlying changes in the system, like how applications on desktop/mobile phones are developed: the underlying operating system handles the critical functionalities, and the end application can use the interface exposed by the operating system. + +We started off with a PoC on ESP32 and realized that there were limitations in it, and we would require some robust hardware support that can enforce permissions at the hardware level to achieve isolation between the user and kernel application. This led us to design our own custom peripherals (described in more details in subsequent section) in ESP32-C3. With all the brainstorming and development done till now, we are excited to release a new framework called __ESP Privilege Separation__ ! + +## Introduction + +Traditionally, any ESP-IDF application on an Espressif SoCs is built as a single monolithic firmware without any separation between the “core” components (Operating System, Networking, etc.) and the “application” or “business” logic. In the ESP Privilege Separation framework, we split the firmware image into two separate and independent binaries: protected and user application. + +{{< figure + default=true + src="img/introducing-1.webp" + >}} + +## Highlights of ESP Privilege Separation + +- Supports two isolated execution environments: Secure world and Non-secure world. +- Separation of monolithic firmware into two independent firmware: protected (secure) application and user (non-secure) application. +- Protected app is isolated from exceptions in the user app. +- Standard system call interface through which user application can request access to core services. +- Maintains consistency with ESP-IDF APIs. +- Configurable memory and peripheral access. +- Flexible memory split between protected and user application. + +## Technical Details + +## 1. Application bootup + +{{< figure + default=true + src="img/introducing-2.webp" + >}} + +In ESP Privilege Separation, the bootup flow is like ESP-IDF application bootup flow, the Boot ROM (1st stage bootloader) verifies and loads the 2nd stage ESP-IDF bootloader from the flash. The 2nd stage bootloader then verifies and loads the protected application. Protected application checks for valid user application header in flash and if found, it sets appropriate permissions and tries to verify and load the user application. + +## 2. World controller and Permission control + +The most important piece of this framework is achieving the separation of privileges and enforcing permissions. This is achieved using World controller and Permission Controller peripherals in ESP32-C3. Permission controller manages the permissions and World controller manages execution environment, where each World has its own permission configuration. Currently, we have 2 Worlds; World0 and World1.World0 is the secure (protected) environment and World1 is the non-secure (user) environment. + +{{< figure + default=true + src="img/introducing-3.webp" + >}} + +The above diagram shows that: + +- Secure World (World0) has complete access to address range A. +- Non-secure World (World1) has read only access to address range A. + +If non-secure World tries to write to any address in range A, then a violation interrupt shall be raised. Secure World handles this violation interrupt and takes appropriate actions. + +## 3. Switching between Secure and Non-secure Worlds + +- Switching from Secure to Non-Secure World:CPU can be switched to non-secure world by configuring the address in World controller register. When CPU tries to execute the configured address, it will transparently switch and execute in the non-secure world. +- Switching from Non-secure to Secure World:CPU can only switch from non-secure to secure world via interrupts or exceptions. Any interrupt in the system will cause the CPU to switch to secure world. + +## 4. Memory Layout + +With the permissions enforced, the next step is to split the memory. + +Internal SRAM: + +The following figure represents how the SRAM is split between protected and user application. SRAM is divided into IRAM and DRAM and this split is entirely configurable and dependent upon the usage of the application. + +{{< figure + default=true + src="img/introducing-4.webp" + >}} + +The DRAM region contains the .data and .bss section of the respective application and the remaining DRAM region is used as heap. In this framework, there is a dedicated heap allocator for each, protected and user application. + +This SRAM memory layout helps maintain memory compatibility when upgrading protected application. If in case IRAM consumption of the protected app increases or decreases, we can move the main IRAM-DRAM split line such that the user boundary is not affected. + +External flash: + +The following figure represents how the Flash virtual memory is split between protected and user application. Like internal memory split, flash MMU range is divided into .rodata and .text sections and is entirely configurable. + +{{< figure + default=true + src="img/introducing-5.webp" + >}} + +## 5. System call interface + +Protected application provides a standard “system call” interface through which user application can request access to core services. This uses a special CPU instruction that generates a synchronous exception that hands over the control to a protected application. The system call handler carefully checks the request and performs action accordingly. The following diagram gives an overview of how the system call interface is implemented: + +{{< figure + default=true + src="img/introducing-6.webp" + >}} + +## 6. API consistency + +We have maintained ESP-IDF API consistency, for most of the components, across protected and user app. Components which are exposed to user application through system call interface must use the system call implementation instead of the actual function implementation. We leverage the linker’s attributes to override the API’s definition with the system call definition. + +- API consistency also ensures that ESP-IDF sample applications can easily (with minimal changes) be ported to this framework. +- Consistency with ESP-IDF API ensures the same program can be built either as a protected app or as a user app. + +## 7. User space exception handling + +With the permissions and the memory split in place, there can be scenarios where the user app, either intentionally or unintentionally, tries to access the forbidden region of protected environment. In this case, the permission controller raises a violation interrupt which can be handled in the protected application. The benefits of having the permissions enforced is that the protected space memory and hence the protected application is not hampered by any (mis)behavior of the user application. In the framework, we have provision for the protected application to register a handler for cases where any exception occurs in the user application. In this handler, we can gather some vital information and handle the exception accordingly. + +## 8. Device drivers + +The user application might need access to peripherals (SPI, I2C, etc.) to communicate with external devices and sensors. In this framework, we have implemented device drivers in protected application and exposed it to user application through standard I/O system calls (open, read, write, etc.). This allows us to implement multiple device drivers through a common set of system calls. + +It is also possible to provide a peripheral’s register access to the user application and let the user application write its own driver. + +## Advantages + +With the ESP Privilege Separation framework, we envision various use cases and scenarios that usually cannot be achieved in the traditional monolithic approach; a few of which we have listed below: + +## Getting Started + +> This project is still in __beta__ phase and active development is being done. There are certain limitations and bottlenecks which are constantly being addressed. Please report any issues and bugs you may encounter. + +The framework is entirely open-sourced and can be found in our [__ESP Privilege Separation repository__ ](https://github.com/espressif/esp-privilege-separation). For detailed technical documentation and walkthroughs please refer [__here__ ](https://docs.espressif.com//projects/esp-privilege-separation/en/latest/esp32c3/index.html). + +Please feel free to report any issues or feedback by raising an issue tracker on the GitHub repository. We also welcome contributions to this framework through PRs. + +We hope this novel approach in application development will open various avenues for you. We are eager to hear your thoughts about this. diff --git a/content/blog/introducing-esp-rainmaker/img/introducing-1.webp b/content/blog/introducing-esp-rainmaker/img/introducing-1.webp new file mode 100644 index 000000000..5432ad9b0 Binary files /dev/null and b/content/blog/introducing-esp-rainmaker/img/introducing-1.webp differ diff --git a/content/blog/introducing-esp-rainmaker/img/introducing-2.webp b/content/blog/introducing-esp-rainmaker/img/introducing-2.webp new file mode 100644 index 000000000..34ba4d06d Binary files /dev/null and b/content/blog/introducing-esp-rainmaker/img/introducing-2.webp differ diff --git a/content/blog/introducing-esp-rainmaker/img/introducing-3.webp b/content/blog/introducing-esp-rainmaker/img/introducing-3.webp new file mode 100644 index 000000000..908192413 Binary files /dev/null and b/content/blog/introducing-esp-rainmaker/img/introducing-3.webp differ diff --git a/content/blog/introducing-esp-rainmaker/img/introducing-4.webp b/content/blog/introducing-esp-rainmaker/img/introducing-4.webp new file mode 100644 index 000000000..a0acad851 Binary files /dev/null and b/content/blog/introducing-esp-rainmaker/img/introducing-4.webp differ diff --git a/content/blog/introducing-esp-rainmaker/index.md b/content/blog/introducing-esp-rainmaker/index.md new file mode 100644 index 000000000..77eb641a6 --- /dev/null +++ b/content/blog/introducing-esp-rainmaker/index.md @@ -0,0 +1,132 @@ +--- +title: "Introducing ESP RainMaker" +date: 2020-04-15 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Rainmaker + - Announcements + - Esp32 + +--- + +{{< figure + default=true + src="img/introducing-1.webp" + >}} + +Today we announced [ESP RainMaker](https://rainmaker.espressif.com). This is another step forward for Espressif to enable makers to build connected devices and access them through phone apps, 3rd party services or voice assistants, quickly, without having to manage the infrastructure. + +The ESP RainMaker is a collection of [device-agent SDK](https://github.com/espressif/esp-rainmaker), a transparent cloud application and [iOS](https://apps.apple.com/us/app/esp-rainmaker/id1497491540)/[Android](https://play.google.com/store/apps/details?id=com.espressif.rainmaker&hl=en_IN) phone apps. This lets developers write the firmware and instantaneously interact with it through the phone-apps, or through other services. + +{{< figure + default=true + src="img/introducing-2.webp" + >}} + +## Developer Workflow + +We are excited about this launch as it gives more power to firmware developers. And I want to talk about this a bit. + +As a firmware developer working with RainMaker this is how the workflow looks like: + +- You build applications using the goodness of Espressif’s ESP-IDF open-source SDK and the RainMaker Agent. +- You choose to expose any parameters of your device in the application’s firmware that you wish to control externally. +- The RainMaker agent syncs these attributes with the RainMaker cloud. The RainMaker cloud transparently makes the device parameters available to the phone applications and other services. This does not require you to write any code in the cloud. The cloud application is built with AWS Serverless services. +- The RainMaker phone applications then redraw themselves to present the parameters of the devices to the user. Reading or changing these attributes is as easy as toggling a button on the phone. +- The availability of a Python client library lets you access the same parameters through a command-line or through python programs, that you could then link with any other services. + +And all of this, without any configuration of the cloud interfaces, or phone apps. All you can continue to focus on is the device firmware. + +## Examples + +Let’s quickly look at some examples that will make things clearer. + +## GPIO + +The simplest example is GPIOs. Let’s say you wish to expose some GPIO controls from your device. Your RainMaker code for this will look like: + +```c +/* Create a device and add the relevant parameters to it */ +esp_rmaker_create_device("ESP32-S2-Saola-1", NULL, gpio_callback, NULL); + +esp_rmaker_device_add_param("ESP32-S2-Saola-1", "Red", + esp_rmaker_bool(false), PROP_FLAG_READ | PROP_FLAG_WRITE); +esp_rmaker_param_add_ui_type("ESP32-S2-Saola-1", "Red", ESP_RMAKER_UI_TOGGLE); + +esp_rmaker_device_add_param("ESP32-S2-Saola-1", "Green", + esp_rmaker_bool(false), PROP_FLAG_READ | PROP_FLAG_WRITE); +esp_rmaker_param_add_ui_type("ESP32-S2-Saola-1", "Green", ESP_RMAKER_UI_TOGGLE); + +esp_rmaker_device_add_param("ESP32-S2-Saola-1", "Blue", + esp_rmaker_bool(false), PROP_FLAG_READ | PROP_FLAG_WRITE); +esp_rmaker_param_add_ui_type("ESP32-S2-Saola-1", "Blue", ESP_RMAKER_UI_TOGGLE); +``` + +Basically, + +- __esp_rmaker_create_device:__ You define a name for a device and a callback (in this case* gpio_callback*) that will handle the requests when the parameter is modified externally. +- __esp_rmaker_device_add_param:__ You add parameters (or attributes) of the device that you wish to expose. Here we add 3 GPIOs (Red, Green, Blue). We mention that this parameter is of type *bool*. We can create parameters of other data types as well. +- __esp_rmaker_param_add_ui_type:__ Each parameter also includes a UI type that the phone application should use for displaying that parameter. In this case we mention that a UI type “toggle” element should be used. + +Correspondingly the phone apps will show the following while accessing the device: + +{{< figure + default=true + src="img/introducing-3.webp" + >}} + +## Light + +You can also use other parameter types, for example let’s look at the light example. + +```c +/* Create a device and add the relevant parameters to it */ +esp_rmaker_create_lightbulb_device("Light", common_callback, NULL, DEFAULT_POWER); + +esp_rmaker_device_add_brightness_param("Light", "brightness", DEFAULT_BRIGHTNESS); +esp_rmaker_device_add_hue_param("Light", "hue", DEFAULT_HUE); +esp_rmaker_device_add_saturation_param("Light", "saturation", DEFAULT_SATURATION); +``` + +In the GPIOs example earlier, we had used a “raw” datatype as *bool*. The RainMaker agent also provides some pre-defined higher level datatypes (standard types). This example uses these higher level APIs for creating the parameters. Note that we could also have written this code using the raw datatype instead, but this is a short-hand utility API. + +A list of these standard types is available here: [https://rainmaker.espressif.com/docs/standard-types.html](https://rainmaker.espressif.com/docs/standard-types.html). It also has the corresponding [Standard Types C API](https://docs.espressif.com/projects/esp-rainmaker/en/latest/c-api-reference/rainmaker_standard_types.html#standard-devices) that is used in the code above. We will continue to update this list of standard types as we go along. + +The phone apps then redraw themselves to match what is written in the firmware: + +{{< figure + default=true + src="img/introducing-4.webp" + >}} + +## Bridges + +You can also easily export multiple “logical devices” within the same ESP32 node. This makes it convenient in cases where your ESP32 acts as a bridge and allows the RainMaker phone apps to interact with these bridged devices. + +## More Examples + +You can find many other samples in the [esp-rainmaker/examples/](https://github.com/espressif/esp-rainmaker) directory of the ESP RainMaker project. + +## Specifications + +While we make this infrastructure available, we want to be as transparent as possible about the architecture and the data exchange that flows through the ESP RainMaker infrastructure. + +- The ESP32-S2/ESP32 to RainMaker cloud communication details are captured here: [https://rainmaker.espressif.com/docs/node-cloud-comm.html](https://rainmaker.espressif.com/docs/node-cloud-comm.html) +- The RainMaker agent that implements (in the C language) the above protocol is available at: [https://github.com/espressif/esp-rainmaker](https://github.com/espressif/esp-rainmaker) +- The REST APIs exposed by the RainMaker cloud are captured in this swagger documentation: [https://swaggerapis.rainmaker.espressif.com](https://swaggerapis.rainmaker.espressif.com). These APIs are used by the phone apps and the Python library to interact with the RainMaker cloud. +- The Python CLI that uses these APIs is available here: [https://github.com/espressif/esp-rainmaker/tree/master/cli](https://github.com/espressif/esp-rainmaker/tree/master/cli) + +Feel free to [reach out to us](https://github.com/espressif/esp-rainmaker/issues) if you have any feedback, requests or suggestions for ESP RainMaker. + +## Get started using the ESP RainMaker + +Support for ESP-RainMaker is currently enabled for ESP32-S2 SoCs. If you have an ESP32-S2 based development board with you, you can get started with using ESP RainMaker from here: [https://rainmaker.espressif.com/docs/get-started.html](https://rainmaker.espressif.com/docs/get-started.html) + +You can also head over to the [ESP RainMaker](https://github.com/espressif/esp-rainmaker) GitHub repository. + +We are excited about releasing this, and we hope you find it helpful. We really look forward to what you will do! + +{{< youtube Heo18HLgh9g >}} diff --git a/content/blog/jan-2021/img/jan-1.webp b/content/blog/jan-2021/img/jan-1.webp new file mode 100644 index 000000000..262f23440 Binary files /dev/null and b/content/blog/jan-2021/img/jan-1.webp differ diff --git a/content/blog/jan-2021/img/jan-2.webp b/content/blog/jan-2021/img/jan-2.webp new file mode 100644 index 000000000..2e79b844e Binary files /dev/null and b/content/blog/jan-2021/img/jan-2.webp differ diff --git a/content/blog/jan-2021/img/jan-3.webp b/content/blog/jan-2021/img/jan-3.webp new file mode 100644 index 000000000..85e0ea6e5 Binary files /dev/null and b/content/blog/jan-2021/img/jan-3.webp differ diff --git a/content/blog/jan-2021/img/jan-4.webp b/content/blog/jan-2021/img/jan-4.webp new file mode 100644 index 000000000..a7eb175ce Binary files /dev/null and b/content/blog/jan-2021/img/jan-4.webp differ diff --git a/content/blog/jan-2021/index.md b/content/blog/jan-2021/index.md new file mode 100644 index 000000000..5f28897db --- /dev/null +++ b/content/blog/jan-2021/index.md @@ -0,0 +1,62 @@ +--- +title: "Jan 2021" +date: 2021-01-26 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Newsletter + +--- +Hi everyone, + +Espressif’s Founder and CEO, Teo Swee Ann, [recently gave an interview to EEWeb](https://www.eeweb.com/esp32-solutions-enable-ai-for-iot-interview-with-espressif-systems-ceo/), the go-to website for users of electronic design tools. Discussing Espressif’s plans for Artificial Intelligence, Teo Swee Ann said: “We will be introducing our low-cost AI-enabled line of products early in 2021, based on the ESP32-S series of chips, starting with [ESP32-S3](https://www.espressif.com/en/products/socs/esp32-s3). For AI chips, it is not enough to build the hardware; the algorithm is equally important because we do not expect average Makers to collect enough training samples and roll their own AI networks now. So, we will be populating our GitHub repositories with more AI code. We have been internally testing ESP32-S3 and we are able to achieve state-of-the-art performance for tasks such as beam forming, wake-word recognition and offline command recognition.” + +[Espressif’s official announcement about ESP32-S3](https://www.espressif.com/en/news/ESP32_S3) has already made the rounds on the internet. ESP32 has become a mainstream IoT microcontroller since its release in 2016, so it is only natural that a new member in this series of MCUs causes sensation. Espressif is always committed to innovating its AIoT solutions; hence, ESP32-S3 is the result of an overall optimization in terms of connectivity, AI computing power, security, IO availability, and peripheral interfaces. + +Furthermore, Teo Swee Ann announced in his EEWeb interview that “ESP32-S3 has also been tested on some image-related applications, but a more powerful version will come with ESP32-S4”. So, fans of the ESP32-S series should be waiting for more from Espressif in the near future! + +Other topics you can read about in this month’s newsletter include: + +[__ESP32-Powered PDP-11 Minicomputer__ ](https://www.espressif.com/en/news/news/ESP32-Powered_PDP-11) + +{{< figure + default=true + src="img/jan-1.webp" + >}} + +Espressif’s Software and Technical Marketing Manager, Jeroen Domburg, otherwise known as Sprite_tm, has just built an [ESP32-powered](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-wrover-kit.html), ultra-compact replica of a Digital DEC VT-102 terminal emulating a PDP-11 running 2.11BSD. + +[__Line-us: An ESP8266-Based Drawing Robot__ ](https://www.espressif.com/en/news/Line-us) + +{{< figure + default=true + src="img/jan-2.webp" + >}} + +[Line-us](http://www.line-us.com/) is a small, portable, [ESP8266-based](https://www.espressif.com/en/products/socs/esp8266) robot which draws using a real pen on paper. The free app that goes with Line-us lets you draw, send messages, share sketchbooks or collect artworks from others! + +[__Agromon: Smart Agriculture Using ESP32-WROOM-32U__ ](https://www.espressif.com/en/news/Agromon) + +{{< figure + default=true + src="img/jan-3.webp" + >}} + +Agromon is a wireless transmitter based on [ESP32-WROOM-32U](https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32d_esp32-wroom-32u_datasheet_en.pdf) and designed for agricultural IoT applications. As a plug-and-play device, Agromon can be easily installed and used. By simply plugging in the sensors included in the package, the device is ready for use. + +[__MorphESP 240: A New ESP32-S2 Board by Morpheans__ ](https://www.espressif.com/en/news/MorphESP_240) + +{{< figure + default=true + src="img/jan-4.webp" + >}} + +[Morpheans](http://www.morpheans.com/), a French startup, are introducing MorphESP 240, an easy-to-use dev board that is compatible with Arduino and CircuitPython. MorphESP 240 is based on [ESP32-S2](https://www.espressif.com/en/products/socs/esp32-s2) and comes with a built-in, high-resolution, IPS-color display. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=ea3d9a8d59&e=309e9b0452), [Twitter](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=6ea0dcc790&e=309e9b0452), [GitHub](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=0a95dfea49&e=309e9b0452), [Instagram](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=c8d96c4826&e=309e9b0452), [LinkedIn](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=e377c4048b&e=309e9b0452), and [YouTube](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=dc2c18b045&e=309e9b0452). + +You can also contact us through our [website](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=f1dff01f8c&e=309e9b0452) or you can [email us](mailto://newsletter@espressif.com)! We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer diff --git a/content/blog/january-2019/img/january-1.webp b/content/blog/january-2019/img/january-1.webp new file mode 100644 index 000000000..b40efc39e Binary files /dev/null and b/content/blog/january-2019/img/january-1.webp differ diff --git a/content/blog/january-2019/img/january-2.webp b/content/blog/january-2019/img/january-2.webp new file mode 100644 index 000000000..5c4c1e2db Binary files /dev/null and b/content/blog/january-2019/img/january-2.webp differ diff --git a/content/blog/january-2019/img/january-3.webp b/content/blog/january-2019/img/january-3.webp new file mode 100644 index 000000000..006c26159 Binary files /dev/null and b/content/blog/january-2019/img/january-3.webp differ diff --git a/content/blog/january-2019/img/january-4.webp b/content/blog/january-2019/img/january-4.webp new file mode 100644 index 000000000..6fe82f809 Binary files /dev/null and b/content/blog/january-2019/img/january-4.webp differ diff --git a/content/blog/january-2019/img/january-5.webp b/content/blog/january-2019/img/january-5.webp new file mode 100644 index 000000000..1cdf9c117 Binary files /dev/null and b/content/blog/january-2019/img/january-5.webp differ diff --git a/content/blog/january-2019/index.md b/content/blog/january-2019/index.md new file mode 100644 index 000000000..0369870bf --- /dev/null +++ b/content/blog/january-2019/index.md @@ -0,0 +1,84 @@ +--- +title: "January 2019" +date: 2019-02-04 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Esp32 + - Newsletter + +--- +Welcome to our January Newsletter__*Our News. Our World*__ + +{{< figure + default=true + src="img/january-1.webp" + >}} + +Happy New Year everyone! + +Warmest wishes from all of us here at Espressif. May the new year bring you health, happiness and creativity! In 2019 Espressif will continue its expansion in the field of Artificial Intelligence, while also taking its IoT solutions to the next level. Our intention is to continue working hard and remain at the forefront of technological evolution. + +We said goodbye to 2018 in the best possible way, having received a technological-breakthrough award in December, as a top-10 startup company in Shanghai. The award ceremony took place during a conference about technological achievements in 2018, which was organized by the Shanghai Science & Technology Innovation Center with the support of the local government. + +So, we’re welcoming 2019 full of energy and hope, as we’re heading to Las Vegas for this year’s [Consumer Electronics Show (CES)](https://www.ces.tech/), the world’s biggest event for companies conducting business in the consumer technologies sector. At the 2019 CES we’ll showcase, among others, the Amazon FreeRTOS-qualified ESP32, the Espressif HomeKit SDK, ESP-Mesh, ESP-ADF, Conversational User Interfaces and Alexa on ESP32. At the same time, we’ll be holding several business meetings with clients and potential partners, aiming to familiarize them with our latest solutions in the fields of Artificial Intelligence and the Internet of Things. + +Other news you can read about in + +this month’s newsletter include: + +We hope these topics can convey a sense of the variety of products and services that Espressif intends to deliver during 2019. Our company aims to expand the range of its products even further, reach new and bigger markets, and deliver innovative solutions to more people across the world. At the core of these strategic goals are always our customers, our partners and our supporters. + +Nothing would be possible without your continuing support. + +Season’s greetings, + +John Lee. Senior Customer Support Officer + +## ESP-ADF v1.0 Released + +{{< figure + default=true + src="img/january-2.webp" + >}} + +Espressif is resolutely expanding in the field of AI solutions, introducing [ESP-ADF v1.0](https://github.com/espressif/esp-adf) (Espressif’s Audio Development Framework). ESP-ADF is an open-source platform that can be used for developing a variety of audio applications, ranging from connected speakers to story-telling toys. ESP-ADF works on top of ESP-IDF, the commonly-used base SDK for ESP32. ESP-ADF provides flexible and reusable components that allow users to build their own audio-enabled products of varying complexity levels. + +[Keep Reading](https://www.espressif.com/en/news/ESP_ADF_v1.0_Released) + +## ESP32 Modules Support LittlevGL and μGFX + +{{< figure + default=true + src="img/january-3.webp" + >}} + +[ESP32 modules](https://www.espressif.com/en/products/hardware/modules) of the WROOM and WROVER series have incorporated two new libraries, LittlevGL and *μ*GFX. [LittlevGL](https://littlevgl.com/) is an open-source graphics library providing various features for creating an embedded Graphical User Interface (GUI), with beautiful visual effects and a low memory footprint. [*μ*GFX](https://ugfx.io/index) is a lightweight embedded library for displays and touchscreens, providing everything required to build a fully-featured embedded GUI. + +[Keep reading](https://www.espressif.com/en/news/ESP32_Modules_Now_Support_LittlevGL_and_μGFX) + +## ESP32 Internet Radio Player + +{{< figure + default=true + src="img/january-4.webp" + >}} + +Believe it or not, you can now build an Internet radio player in less than ten minutes and with approximately $30! Nick Koumaris and his popular educational platform, [educ8s](https://educ8s.tv/), have come up with this cool project which is based on [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview). Educ8s consists of a [website ](https://educ8s.tv/about/)and a [YouTube channel](https://www.youtube.com/channel/UCxqx59koIGfGRRGeEm5qzjQ) which is dedicated to developing high-quality videos about DIY hardware and software projects. + +[Keep Reading](https://www.espressif.com/en/news/ESP32_Internet_Radio_Player) + +## “U Cup”: The ESP32-Based Smart Water Bottle + +{{< figure + default=true + src="img/january-5.webp" + >}} + +Most people think that water contain-ers provide only a good way of keep-ing people hydrated when they are not close to a source of drinking wa-ter. But “Leiyue”, a Shanghai-based startup, has taken water bottles to a whole other level. They have just launched an [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview)-based gadget that combines water bottles with artificial intelligence. + +[Keep Reading](https://www.espressif.com/en/news/U_Cup_The_ESP32_based_Smart_Water_Bottle) + +*Originally published at *[*us15.campaign-archive.com*](https://us15.campaign-archive.com/?u=40830afd8eb6f70ab5e47b7a4&id=5097d79b07)*.* diff --git a/content/blog/january-2020/img/january-1.webp b/content/blog/january-2020/img/january-1.webp new file mode 100644 index 000000000..15e9aa29b Binary files /dev/null and b/content/blog/january-2020/img/january-1.webp differ diff --git a/content/blog/january-2020/img/january-2.webp b/content/blog/january-2020/img/january-2.webp new file mode 100644 index 000000000..ac3709c9f Binary files /dev/null and b/content/blog/january-2020/img/january-2.webp differ diff --git a/content/blog/january-2020/img/january-3.webp b/content/blog/january-2020/img/january-3.webp new file mode 100644 index 000000000..22443a196 Binary files /dev/null and b/content/blog/january-2020/img/january-3.webp differ diff --git a/content/blog/january-2020/img/january-4.webp b/content/blog/january-2020/img/january-4.webp new file mode 100644 index 000000000..36c9eeac7 Binary files /dev/null and b/content/blog/january-2020/img/january-4.webp differ diff --git a/content/blog/january-2020/index.md b/content/blog/january-2020/index.md new file mode 100644 index 000000000..e95d959a6 --- /dev/null +++ b/content/blog/january-2020/index.md @@ -0,0 +1,73 @@ +--- +title: "January 2020" +date: 2020-01-23 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +{{< figure + default=true + src="img/january-1.webp" + >}} + +Happy New Year to all! + +Everyone here at Espressif would like to wish you health, happiness and creativity for 2020! As ever, we shall continue working hard in trying to give you the best in the field of AIoT. The outgoing year has been an incredible one for our company. In 2019 we released [ESP-WHO](https://github.com/espressif/esp-who), our AI development framework, along with its accompanying development board, [ESP-EYE](https://www.espressif.com/en/products/hardware/esp-eye/overview). We also launched the [ESP-Jumpstart](https://docs.espressif.com/projects/esp-jumpstart/en/latest/introduction.html) framework to help developers convert their ideas into actual products as quickly as possible. And we also put [ESP-Skainet](https://www.espressif.com/en/products/software/esp-skainet/overview), Espressif’s voice assistant, on the market. At the same time, we consolidated our collaboration with the [Google Cloud IoT platform](https://www.espressif.com/en/products/hardware/esp32-devkitc-googlecloud-iot/overview), [Tencent Cloud IoT platform](https://www.espressif.com/en/news/ESP8266_Listed_on_Tencent_Cloud) and [Microsoft Azure IoT solutions](https://www.espressif.com/en/products/hardware/esp32-azure-kit). + +Furthermore, we made an [impressive debut](https://www.espressif.com/en/news/Espressif_IPO) in a field of 25 companies that launched their initial public offering on the Sci-Tech Innovation Board (STAR) of Shanghai’s Stock Exchange in July 2019. Last, but not least, ESP-BLE-MESH, our implementation of the SIG Bluetooth Mesh got [fully certified by Bluetooth-SIG](https://www.espressif.com/en/news/ESP_BLE_MESH_SIG_Certified) and at the same time other Espressif chips advanced their certification credentials, as shown below: + +- [ESP-WROOM-02D](https://www.espressif.com/sites/default/files/documentation/esp-wroom-02u_esp-wroom-02d_datasheet_en.pdf): ANATEL / IFETEL +- [ESP32-S2-WROVER](https://www.espressif.com/en/products/hardware/modules): SRRC / CE / FCC +- [ESP32-WROVER-B](https://www.espressif.com/sites/default/files/documentation/esp32-wrover-b_datasheet_en.pdf): Wi-Fi Alliance + +These are only a few of our achievements in 2019, but they are the basis of why we look into 2020 with a sense of hope and optimism. Our positivity is based on our work ethos, our passion for innovation and our openness to sharing our technological know-how with the rest of the world. In 2020 we shall continue working hard to take Espressif’s AIoT solutions to the next level. Our intention is to remain at the forefront of technological evolution. + +Other topics you can read in this month’s newsletter include: + +- an impact analysis of a recent fault injection attack on ESP32 and the immediate action Espressif took to secure its SoCs even further; +- the recent Bluetooth LE 5.0 certification of ESP32, which has given our chip greater stability and compatibility; +- the recent qualification of ESP-EYE, ESP32-WROOM-32S and ESP32-SOLO-1 for Amazon:FreeRTOS. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog). We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer + +## ESP32 Fault Injection Vulnerability — Impact Analysis + +{{< figure + default=true + src="img/january-2.webp" + >}} + +Security researchers have recently described a fault injection attack on ESP32, which may result in some security compromise and unintended disclosure of information. However, [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview)’s security design remains safe for the vast majority of our products. Click on the link below to learn how. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP32_FIA_Analysis) + +## ESP32 Is Now Bluetooth LE 5.0-Certified + +{{< figure + default=true + src="img/january-3.webp" + >}} + +Espressif’s flagship chip, ESP32, has recently passed the SIG [Bluetooth LE 5.0 certification](https://launchstudio.bluetooth.com/ListingDetails/98048). This affirms that the protocol version supported by the ESP32 microcontroller has been upgraded from Bluetooth LE 4.2 to Bluetooth LE 5.0, which has higher stability and compatibility. + +[*Keep Reading*](https://www.espressif.com/en/news/BLE_5.0_Certification) + +## More Espressif Products Get Qualified for Amazon:FreeRTOS + +{{< figure + default=true + src="img/january-4.webp" + >}} + +An increasing number of Espressif products are being qualified for Amazon:FreeRTOS. It was only yesterday (30th Dec.) that our AI dev board, [ESP-EYE](https://www.espressif.com/en/products/hardware/esp-eye/overview), as well as our [ESP32-WROOM-32SE](https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32e_esp32-wroom-32ue_datasheet_en.pdf)module got qualified, while last month our [ESP32-SOLO-1](https://www.espressif.com/sites/default/files/documentation/esp32-solo-1_datasheet_en.pdf) module got qualified as well. + +[*Keep Reading*](https://www.espressif.com/en/news/aFreeRTOS_qualified_ESP) + +*Originally published at *[*https://us15.campaign-archive.com*](https://us15.campaign-archive.com/?u=40830afd8eb6f70ab5e47b7a4&id=8633bf578d)*.* diff --git a/content/blog/july-2018/img/july-1.webp b/content/blog/july-2018/img/july-1.webp new file mode 100644 index 000000000..0809f6f35 Binary files /dev/null and b/content/blog/july-2018/img/july-1.webp differ diff --git a/content/blog/july-2018/img/july-2.webp b/content/blog/july-2018/img/july-2.webp new file mode 100644 index 000000000..bc1f09005 Binary files /dev/null and b/content/blog/july-2018/img/july-2.webp differ diff --git a/content/blog/july-2018/img/july-3.webp b/content/blog/july-2018/img/july-3.webp new file mode 100644 index 000000000..7eba9131e Binary files /dev/null and b/content/blog/july-2018/img/july-3.webp differ diff --git a/content/blog/july-2018/img/july-4.webp b/content/blog/july-2018/img/july-4.webp new file mode 100644 index 000000000..bf02921e1 Binary files /dev/null and b/content/blog/july-2018/img/july-4.webp differ diff --git a/content/blog/july-2018/img/july-5.webp b/content/blog/july-2018/img/july-5.webp new file mode 100644 index 000000000..d4594d1c2 Binary files /dev/null and b/content/blog/july-2018/img/july-5.webp differ diff --git a/content/blog/july-2018/index.md b/content/blog/july-2018/index.md new file mode 100644 index 000000000..4bce8856a --- /dev/null +++ b/content/blog/july-2018/index.md @@ -0,0 +1,56 @@ +--- +title: "July 2018" +date: 2018-07-04 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Newsletter +--- +{{< figure + default=true + src="img/july-1.webp" + >}} + +## Espressif Mentioned in Gartner’s Report for the Third Consecutive Year + +It was with great delight that we received the news about Espressif being mentioned in [Gartner](https://www.gartner.com/en)’s 2018 IoT “Thingification” [report](https://www.gartner.com/doc/3874295/cool-vendors-iot-thingification), authored by analysts [Amy Teng](https://www.gartner.com/analyst/17745), [Bill Ray](https://www.gartner.com/analyst/61747), [George Brocklehurst](https://www.gartner.com/analyst/62346) and [Jon Erensen](https://www.gartner.com/analyst/18692). Gartner’s expert-led, practitioner-sourced and data-driven research is trusted as an objective resource in the IoT industry and beyond. Gartner awarded Espressif the “Cool Vendor” title in 2016 and for each of the subsequent two years our company has been included in the follow-up report “Where Are They Now?” + +## New Espressif Module ESP32-SOLO-1 + +{{< figure + default=true + src="img/july-2.webp" + >}} + +We are delighted to announce that a new module from Espressif Systems, [ESP32-SOLO-1](https://www.espressif.com/sites/default/files/documentation/esp32-solo-1_datasheet_en.pdf), is now at the stage of mass production. Releasing this module is part of Espressif’s strategic plan to continue developing new capabilities for its IoT solutions. Our goal is to stay competitive and attractive within the growing IoT ecosystem, while keeping our prices as low as possible, so that the Internet of Things becomes accessible to everyone. + +## Great Success for the AWS Workshop with ESP Dev Boards + +{{< figure + default=true + src="img/july-3.webp" + >}} + +At the end of last month, Amazon Web Services (AWS) partnered with Espressif to host a one-day IoT Workshop in San Francisco. The event was focused on using Amazon FreeRTOS with Espressif’s [ESP32-DevKitC](https://www.espressif.com/en/products/hardware/esp32-devkitc/overview). The event attracted the interest of many embedded engineers who managed to successfully complete hands-on activities, such as running the a:FreeRTOS Sample Code, using the AWS IoT Core and Device Shadows, as well as interacting with devices through a web interface. + +## Espressif Sponsors Prizes for iBHub’s IoT Bootcamps in India + +{{< figure + default=true + src="img/july-4.webp" + >}} + +Espressif Systems is renowned not only for its fast, secure and green IoT solutions. Our technology-oriented development strategy is coupled with out commitment to young people’s [electronics education](https://www.espressif.com/en/support/iot-college/courses#). We also sponsor hackathons, workshops and bootcamps through which we are reaching out to graduates and young makers in China and beyond. A recent example is our [product sponsorship](https://www.facebook.com/iBHubs/photos/pcb.2103222323328656/2103221646662057/?type=3&theater=) of India’s [iBHub](https://ibhubs.co/), which organizes IoT bootcamps and other events aiming to develop a culture of innovation and entrepreneurship across India. + +## ESP8266-Spotify Remote Control + +{{< figure + default=true + src="img/july-5.webp" + >}} + +In the European Union’s 2018 Innovation Scoreboard, Luxembourg ranked among the “Innovation Leaders” for the first time, along with such countries as Sweden, the Netherlands and the United Kingdom. One recent example of Luxembourg’s research innovation is “Kniwwelino”, an ESP8266-based development kit for young children. + +*Originally published at *[*mailchi.mp*](https://mailchi.mp/86fa7c95befa/espressif-esp-news-july-2018)*.* diff --git a/content/blog/july-2019/img/july-1.webp b/content/blog/july-2019/img/july-1.webp new file mode 100644 index 000000000..c15483491 Binary files /dev/null and b/content/blog/july-2019/img/july-1.webp differ diff --git a/content/blog/july-2019/img/july-2.webp b/content/blog/july-2019/img/july-2.webp new file mode 100644 index 000000000..a20db96d8 Binary files /dev/null and b/content/blog/july-2019/img/july-2.webp differ diff --git a/content/blog/july-2019/img/july-3.webp b/content/blog/july-2019/img/july-3.webp new file mode 100644 index 000000000..5d85f4810 Binary files /dev/null and b/content/blog/july-2019/img/july-3.webp differ diff --git a/content/blog/july-2019/img/july-4.webp b/content/blog/july-2019/img/july-4.webp new file mode 100644 index 000000000..379a11fc2 Binary files /dev/null and b/content/blog/july-2019/img/july-4.webp differ diff --git a/content/blog/july-2019/index.md b/content/blog/july-2019/index.md new file mode 100644 index 000000000..0ba9c79f1 --- /dev/null +++ b/content/blog/july-2019/index.md @@ -0,0 +1,77 @@ +--- +title: "July 2019" +date: 2019-07-28 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - IoT + - Newsletter + +--- +Hi everyone, + +Summer is getting hotter by the day here in Shanghai, but it seems that the only effect it is having is our steaming ahead with __a new series of chips based on ESP8285__ . The already existing version of ESP8285 features complete and self-contained Wi-Fi networking capabilities, fast switching between sleep and wakeup modes, adaptive radio biasing, advance signal processing, spur cancelation and RF co-existence, to mention only a few of its sophisticated characteristics. + +In addition to these, the two new variants in the ESP8285 series will have different memory capacities and operating temperatures, in order to cater for as many application scenarios as possible. The first variant to be released in late August 2019 is __ESP8285H16__ , with a __2 MB__ memory and an operating temperature that ranges from __-40°C to +105°C__ . The other variant is __ESP8285H08__ , with a __1 MB__ memory, operating from __-40°C to +105°C__ . Stay tuned to get all the details about our new ESP8285 variants in August! + +On a different note, as many of you probably know already, [ESP-Jumpstart](https://www.espressif.com/en/news/ESP_Jumpstart) is Espressif’s reference guide that is based on the [IoT Development Framework, ESP-IDF](https://github.com/espressif/esp-idf). The aim of this guide is to help developers convert their ideas into actual products as quickly as possible. The guide itself was released in April 2019, but last month the first [ESP-Jumpstart training](https://docs.espressif.com/projects/esp-jumpstart/en/latest/introduction.html)____ for University students took place in Espressif’s headquarters in Shanghai, at Zhangjiang Hi-Tech Park. + +This training was part of Espressif’s outreach program which aims to disseminate knowledge of AIoT technologies to top University students from across China. Led by Espressif engineers, this 16-hour training was offered to 9 students from __Shanghai JiaoTong University, Shanghai University, East China Normal University__ and __ESIGELEC ROUEN University__ . + +The participants used [ESP32-DevKitC](https://www.espressif.com/en/products/hardware/esp32-devkitc/overview) to build their own IoT demos and WeChat mini-programs for controlling smart devices. After due deliberation the Espressif engineers who led this training program awarded the best student of the cohort a prize which consisted of a __CNY 5,000 stipend and an internship at Espressif Systems__ . That said, the benefits of this program were not restricted only to the prize winner. The knowledge that all participants acquired and the skills they honed during this training has helped them to significantly improve their graduation projects. Other news you can read in this month’s newsletter include: + +- Espressif’s impressive debut on the Sci-Tech Innovation Board of Shanghai’s Stock Exchange, on July 22nd, which was celebrated with a glorious gala later on the same day; +- Espressif’s new Module Pre-provisioning Services (MPS), which will enable customers to reduce manufacturing complexities and time to market; +- Espressif’s partner, DFRobot, which -offering several products based on ESP32 and ESP8266- has become a world-leading provider of robotics and open-source hardware; +- ESPcopter, which is a unique ESP8266-based, small-sized drone that is wirelessly networkable, interactive and programmable. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog). We respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer + +## Espressif Celebrates Its IPO and Presents a New Series of Chips + +{{< figure + default=true + src="img/july-1.webp" + >}} + +[Espressif](https://www.espressif.com/) was one of the 25 companies that traded on the day when Shanghai Stock Exchange’s (SSE) STAR Market, the NASDAQ-style technology board, made its debut. Hence, July 22 has been a day of historical significance for the development of Espressif. We celebrated our successful Initial Public Offering in a glorious event at Kerry Hotel, in Pudong, Shanghai, where we also officially presented a new series of chips, ESP32-S2, which will be released shortly. + +[*Keep Reading*](https://www.espressif.com/en/news/Espressif_IPO) + +## Espressif Now Offers Module Pre-Provisioning Services + +{{< figure + default=true + src="img/july-2.webp" + >}} + +[Espressif](https://www.espressif.com/) customers can now take advantage of a new service that will enable them to reduce manufacturing complexities and time to market. Espressif modules are adequately prepared and equipped with Public Key Infrastructure (PKI) at the manufacturing level, so they can provide out-of-the-box secure communication with IoT cloud services. Espressif’s pre-provisioned modules enable users to connect their products to their cloud of choice quickly, easily and securely. + +[*Keep Reading*](https://www.espressif.com/en/news/Espressif_preprovisioning) + +## DFRobot’s Espressif-based Products Foster IoT Learning Community + +{{< figure + default=true + src="img/july-3.webp" + >}} + +[DFRobot](https://www.dfrobot.com/index.php?route=information%2Finformation&information_id=4) is an [Espressif](https://www.espressif.com/) partner that specializes in robotics and open-source hardware. They have a product catalog that includes more than a thousand components and widgets, such as sensors, robotic platforms, communication modules, and 3D printers. They have modeled several of their products around [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview) and [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview), fostering a strong community of IoT learning. + +## ESPcopter: An ESP8266-based Programmable Mini Drone + +{{< figure + default=true + src="img/july-4.webp" + >}} + +Are you interested in learning programming, but have no such background and are skeptical about taking the plunge? Are you a programmer already, wishing to specialize in IoT applications? Do you want to learn how to fly a drone? If you’ve given at least one “yes” to the above-mentioned questions, then you have to check out ESPcopter, an [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview)-based programmable mini drone like no other! + +[*Keep Reading*](https://www.espressif.com/en/news/ESPcopter_ESP8266) + +As imported on 26 July 2019 from [here](https://mailchi.mp/d16d12b0e004/espressif-esp-news-july-2019?e=f9593a0e62). diff --git a/content/blog/july-2020/img/july-1.webp b/content/blog/july-2020/img/july-1.webp new file mode 100644 index 000000000..8053ab326 Binary files /dev/null and b/content/blog/july-2020/img/july-1.webp differ diff --git a/content/blog/july-2020/img/july-2.webp b/content/blog/july-2020/img/july-2.webp new file mode 100644 index 000000000..6a4114043 Binary files /dev/null and b/content/blog/july-2020/img/july-2.webp differ diff --git a/content/blog/july-2020/img/july-3.webp b/content/blog/july-2020/img/july-3.webp new file mode 100644 index 000000000..a560067d9 Binary files /dev/null and b/content/blog/july-2020/img/july-3.webp differ diff --git a/content/blog/july-2020/img/july-4.webp b/content/blog/july-2020/img/july-4.webp new file mode 100644 index 000000000..9c0f364d0 Binary files /dev/null and b/content/blog/july-2020/img/july-4.webp differ diff --git a/content/blog/july-2020/index.md b/content/blog/july-2020/index.md new file mode 100644 index 000000000..b289b5e87 --- /dev/null +++ b/content/blog/july-2020/index.md @@ -0,0 +1,80 @@ +--- +title: "July 2020" +date: 2020-07-27 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +You might remember that a rather short while ago we launched [ESP RainMaker](https://www.espressif.com/en/news/ESP-RainMaker), Espressif’s end-to-end platform which enables makers to realize their IoT ideas faster and without the hassle of managing the infrastructure involved in this process. Today, we are pleased to announce that we have recently added a number of features to this platform. So, ESP RainMaker now supports ESP32 too, on top of ESP32-S2, with which our end-to-end platform was initially launched. It also supports BLE-based Wi-Fi provisioning for ESP32. Another new feature is the recently-released, third-party voice integrations with Alexa and Google Voice Assistant skills, which enable your ESP RainMaker-based devices to be controlled with voice commands. + +Furthermore, the newly-introduced support for [OTA firmware upgrades](https://rainmaker.espressif.com/docs/ota.html) will allow you to remotely upgrade the firmware of your devices by using the ESP RainMaker command line interface. We have also released resources for [Android](https://github.com/espressif/esp-rainmaker-android) and [iOS](https://github.com/espressif/esp-rainmaker-ios) smartphone applications, so that you can customize your projects as per your requirements. Finally, a VSCode extension with which you can control ESP RainMaker-based devices is also available now. Stay tuned for more ESP RainMaker features that are [coming up](https://rainmaker.espressif.com/docs/what-next.html) shortly! + +Another piece of news I would like to highlight is Espressif’s first quarterly donation to The IUCN Red List of Threatened Species™. This year we started a [wildlife protection program](https://www.espressif.com/en/company/corporate-responsibility/wildlife-protection-program), in an effort to raise public awareness of the current climate crisis and the natural habitat’s encroachment by humans in recent decades. In July 2020, we donated to The IUCN Red List of Threatened Species™ the proceeds from the three development boards included in this initiative so far: + +[ESP32-Vaquita-DSPG](https://github.com/espressif/esp-va-sdk/blob/master/docs/en/hw-reference/esp32/user-guide-esp32-vaquita-dspg.md), [ESP32-S2-Saola-1](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-saola-1-v1.2.html), and [ESP32-S2-Kaluga-1](https://www.espressif.com/en/products/devkits). + +So, we would like to extend a heartfelt “thank you” to all the developers who have purchased the above-mentioned products and made our first donation possible. We greatly appreciate your contribution to our wildlife protection program and we look forward to welcoming more and more supporters in the future! + +Other topics you can read about in this month’s newsletter include: + +- ESP32-PICO-V3-ZERO, also known as the “Alexa Connect Kit (ACK) module with Espressif”, which provides an easy way for customers to build Alexa-compatible devices; +- TDK SmartBug™ (MD-42688-P), which is a multi-sensor wireless module that leverages Espressif’s powerful ESP32 SoC, as well as TDK’s MEMS sensors and algorithms for a wide range of IoT applications; +- WT-32-SC01, which is an ESP32-based development board with a colour display that has recently been launched by Wireless-Tag Technology Co. Ltd; +- A fantastic offer by the ESP32-powered obniz platform, which gives the relevant operating system for free to one device per obniz account. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog). We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer + +## Alexa Connect Kit Module with Espressif Released + +{{< figure + default=true + src="img/july-1.webp" + >}} + +ESP32-PICO-V3-ZERO, which is also known as the “Alexa Connect Kit (ACK) module with Espressif”, provides an easy way for developers to build Alexa-compatible devices, without worrying about managing cloud services, writing an Alexa Skill, phone applications or complex device firmware. It provides Alexa connectivity and supports features like Frustration-Free Setup and Amazon Dash Replenishment. + +[*Keep Reading*](https://www.espressif.com/en/news/ACK_with_ESP) + +## SmartBug: ESP32-based All-in-One Wireless Sensor Module + +{{< figure + default=true + src="img/july-2.webp" + >}} + +[TDK SmartBug™](https://invensense.tdk.com/smartbug/) (MD-42688-P) is a module that leverages the power of Espressif’s flagship SoC, [ESP32](https://www.espressif.com/en/products/socs/esp32), while also combining six sensors, a powerful wireless (BLE) MCU, seven algorithm-driven features and a rechargeable battery, all in a small enclosure. Furthermore, SmartBug comes with the option of an Add-On board that includes a Wi-Fi module, an SD card slot and an ultrasonic sensor from TDK. + +[*Keep Reading*](https://www.espressif.com/en/news/SmartBug) + +## New Color Display for ESP32 by Wireless-Tag Technology Co. Ltd + +{{< figure + default=true + src="img/july-3.webp" + >}} + +[WT-32-SC01](https://mp.weixin.qq.com/s/Oq2TgxFJRqzn_oM21GVGaA) is an ESP32-based development board with a touch screen, which has recently been launched by Wireless-Tag Technology Co. Ltd. Leveraging the power of [ESP32](https://www.espressif.com/en/products/socs/esp32), the WT-32-SC01 development board is capable of processing full-colour high-resolution images and JPEG decoding. + +[*Keep Reading*](https://www.espressif.com/en/news/WT_32_SC01) + +## Fantastic Offer by ESP32-based Platform Obniz + +{{< figure + default=true + src="img/july-4.webp" + >}} + +Nearly a year ago, Japanese IoT company Cambrian Robotics Inc. released the obniz development board, operating system and cloud services, all of which are based on Espressif’s [ESP32-WROOM-32](https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_en.pdf). ObnizOS is the specific software that runs on the obniz development board, enabling its operation via APIs over the obniz cloud. ObnizOS is now available to one device per account for free! + +[*Keep Reading*](https://www.espressif.com/en/news/obniz_offer) + +*Originally published at *[*https://mailchi.mp*](https://mailchi.mp/02e2c3d6e72d/espressif-esp-news-july-2020?e=309e9b0452)*.* diff --git a/content/blog/july-2022/img/july-1.webp b/content/blog/july-2022/img/july-1.webp new file mode 100644 index 000000000..7faed9480 Binary files /dev/null and b/content/blog/july-2022/img/july-1.webp differ diff --git a/content/blog/july-2022/img/july-2.webp b/content/blog/july-2022/img/july-2.webp new file mode 100644 index 000000000..6954e5dcd Binary files /dev/null and b/content/blog/july-2022/img/july-2.webp differ diff --git a/content/blog/july-2022/img/july-3.webp b/content/blog/july-2022/img/july-3.webp new file mode 100644 index 000000000..bbce3575b Binary files /dev/null and b/content/blog/july-2022/img/july-3.webp differ diff --git a/content/blog/july-2022/img/july-4.webp b/content/blog/july-2022/img/july-4.webp new file mode 100644 index 000000000..a8e117bd0 Binary files /dev/null and b/content/blog/july-2022/img/july-4.webp differ diff --git a/content/blog/july-2022/img/july-5.webp b/content/blog/july-2022/img/july-5.webp new file mode 100644 index 000000000..7e9269d7c Binary files /dev/null and b/content/blog/july-2022/img/july-5.webp differ diff --git a/content/blog/july-2022/index.md b/content/blog/july-2022/index.md new file mode 100644 index 000000000..84626f72e --- /dev/null +++ b/content/blog/july-2022/index.md @@ -0,0 +1,78 @@ +--- +title: "July 2022" +date: 2022-08-07 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +From 3 until 6 August 2022, Espressif is taking part in the [Guangzhou International Lighting Exhibition (GILE)](https://guangzhou-international-lighting-exhibition.hk.messefrankfurt.com/guangzhou/en/planning-preparation/exhibitors.html), which is the most highly regarded platform for the LED and lighting industry, as it provides a unique chance for all industry players to communicate, cooperate and create valuable business opportunities. You can find Espressif’s delegation in Zone B, Hall 10.2, booth D48. Please scan the QR code in the picture below, to register and get your ticket. + +{{< figure + default=true + src="img/july-1.webp" + >}} + +By embracing the digital transformation, the lighting industry faces new opportunities in intelligent lighting controls, predictive management, space and occupancy analytics, beacon networking among many other applications that have created additional value to basic lighting fixtures. With this in mind, the theme chosen for the 27th edition of GILE is ‘New Era, New Opportunity’ along with the theme of the fringe programme ‘Turning Ideas Into Action’, which promises to share different ways of thinking about lighting in the new era, as well as how to put those ideas into practice. + +Espressif Systems’ participation in the Guangzhou International Lighting Exhibition aims to showcase two cost-effective, wireless-communication SoCs, [ESP32-C2](https://www.espressif.com/en/products/socs) and [ESP32-C3](https://www.espressif.com/en/products/socs/esp32-c3), which are especially suitable for smart-lighting applications. Both of these SoCs combine 2.4 GHz Wi-Fi 4 and Bluetooth 5 (LE), while being built around RISC-V MCUs which provide stable and secure wireless connectivity. + +We are also highlighting [ESP RainMaker](https://rainmaker.espressif.com/), our complete system for building Cloud-connected AIoT products, which is a private Cloud solution based on the AWS serverless architecture. Its many advantages include a pay-as-you-grow economic plan, easy adoption and deployment, best-in-class data security, voice-integration support, as well as full ownership and platform control. ESP RainMaker reduces the building time for your solutions to a single week, while it covers all Espressif chips and modules, device firmware, voice-assistant integrations, phone apps, and Cloud backend. This helps you minimize your R&D costs, gain independence, and focus on innovating your core-value offering. + +Additionally, we are demonstrating Espressif’s [one-stop Matter solution](https://youtu.be/zni27UOoMIg), which can simplify and accelerate the development of Matter devices significantly. This solution marks the culmination of our ongoing contribution to the Matter standard in various areas, including protocol formulation, core stack implementation and certification test events. + +Furthermore, we are exhibiting Espressif’s [ESP32-C3-based smart switch](https://www.espressif.com/en/news/ESP-Smart-Switch), which upgrades traditional switches to smart switches, without rewiring, or configuring a gateway. It also combines low power-consumption with reliable and secure Wi-Fi connectivity. In our GILE booth visitors may also see [ESP32-S3-BOX](https://www.espressif.com/en/news/ESP32-S3-BOX_video), Espressif’s AI voice-development kit, which provides a platform for developing the control of smart devices with offline and online voice assistants. ESP32-S3-BOX is ideal for developing not only smart speakers, but also IoT devices that achieve an excellent human-machine interaction. To this end, ESP32-S3-BOX integrates a touch screen controller, various sensors, an infrared controller and a smart gateway. Finally, we are demonstrating Espressif’s new human-detection solution, [ESP-WIFI-CSI](https://youtu.be/tFxKUzEDSdw). + +So, those of you who happen to be in Guangzhou from 3 to 6 August 2022 do come to Espressif’s stall and say “hi” to our representatives there. They will be more than happy to explain all about our innovative AIoT solutions. + +Other topics you can read about in this month’s newsletter include: + +{{< figure + default=true + src="img/july-2.webp" + >}} + +[__Launching ESP-RTC__ ](https://www.espressif.com/en/news/ESP-RTC) + +ESP-RTC achieves stable, smooth, ultra-low-latency voice-and-video transmission in real time, providing an ideal solution for users who want to build low-cost and low-power audio-and-video products. + +{{< figure + default=true + src="img/july-3.webp" + >}} + +[__Announcing the Golioth ESP-IDF SDK__ ](https://www.espressif.com/en/news/Golioth_ESP-IDF_SDK) + +Golioth has just released an open-source SDK for the Espressif ESP-IDF, making it easier for Espressif-based projects to securely connect to the Golioth Cloud. + +{{< figure + default=true + src="img/july-4.webp" + >}} + +[__Launching the ESP Privilege Separation__ ](https://www.espressif.com/en/news/ESP-Privilege-Separation) + +ESP Privilege Separation is designed to prevent user-facing applications from interfering with protected applications and code. + +{{< figure + default=true + src="img/july-5.webp" + >}} + +[__ESP RainMaker: Accelerate Your AIoT Business with a Platform You Own__ ](https://www.espressif.com/en/news/ESP-RainMaker_video) + +Espressif’s ESP RainMaker® provides a complete, yet customizable, end-to-end solution to building AIoT products. With ESP RainMaker, it should take you only a week to fully build your own AIoT solution. + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/jumpstart-iot-product-development-on-esp32/img/jumpstart-1.webp b/content/blog/jumpstart-iot-product-development-on-esp32/img/jumpstart-1.webp new file mode 100644 index 000000000..2c017ff92 Binary files /dev/null and b/content/blog/jumpstart-iot-product-development-on-esp32/img/jumpstart-1.webp differ diff --git a/content/blog/jumpstart-iot-product-development-on-esp32/img/jumpstart-2.webp b/content/blog/jumpstart-iot-product-development-on-esp32/img/jumpstart-2.webp new file mode 100644 index 000000000..893a44ef1 Binary files /dev/null and b/content/blog/jumpstart-iot-product-development-on-esp32/img/jumpstart-2.webp differ diff --git a/content/blog/jumpstart-iot-product-development-on-esp32/index.md b/content/blog/jumpstart-iot-product-development-on-esp32/index.md new file mode 100644 index 000000000..0d97e6219 --- /dev/null +++ b/content/blog/jumpstart-iot-product-development-on-esp32/index.md @@ -0,0 +1,38 @@ +--- +title: "ESP-Jumpstart" +date: 2019-05-12 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Product Development + - IoT + - ESP32 +--- + +[ESP-Jumpstart](https://docs.espressif.com/projects/esp-jumpstart/en/latest/index.html) (GitHub [repository](https://github.com/espressif/esp-jumpstart)) is a production-ready, easy-to-customise firmware template that you can use to jumpstart your product development with ESP32 / ESP8266. ESP-Jumpstart builds a fully functional, ready to deploy “Smart Power Outlet” in a sequence of incremental tutorial steps. + +Along with the ESP32 / ESP8266 firmware, ESP-Jumpstart includes phone applications(iOS/Android) for network configuration, and integrated with cloud agents (currently AWS IoT) to synchronise device state with the cloud. + +ESP-Jumpstart implements a power outlet with the following functionality: +- Allows and end-user to configure their home Wi-Fi network through phone applications (iOS/Android) +- Switch on or off the GPIO output +- Use a push-button to physically toggle this output +- Allow remote control of this output through a cloud +- Implement over-the-air (OTA) firmware upgrade +- Perform Reset to Factory settings on long-press of the push-button + +{{< figure + default=true + src="img/jumpstart-1.webp" + >}} + +You can easily customise ESP-Jumpstart to convert it into your particular product by only writing your device drivers, and adapting the cloud agent accordingly. Everything else is already included. + +{{< figure + default=true + src="img/jumpstart-1.webp" + >}} + +Head over to the [ESP-Jumpstart](https://docs.espressif.com/projects/esp-jumpstart/en/latest/index.html) documentation and get started. \ No newline at end of file diff --git a/content/blog/june-2018/img/june-1.webp b/content/blog/june-2018/img/june-1.webp new file mode 100644 index 000000000..ffd860f8d Binary files /dev/null and b/content/blog/june-2018/img/june-1.webp differ diff --git a/content/blog/june-2018/img/june-2.webp b/content/blog/june-2018/img/june-2.webp new file mode 100644 index 000000000..019732489 Binary files /dev/null and b/content/blog/june-2018/img/june-2.webp differ diff --git a/content/blog/june-2018/img/june-3.webp b/content/blog/june-2018/img/june-3.webp new file mode 100644 index 000000000..b261f4ee2 Binary files /dev/null and b/content/blog/june-2018/img/june-3.webp differ diff --git a/content/blog/june-2018/img/june-4.webp b/content/blog/june-2018/img/june-4.webp new file mode 100644 index 000000000..433982cff Binary files /dev/null and b/content/blog/june-2018/img/june-4.webp differ diff --git a/content/blog/june-2018/img/june-5.webp b/content/blog/june-2018/img/june-5.webp new file mode 100644 index 000000000..433982cff Binary files /dev/null and b/content/blog/june-2018/img/june-5.webp differ diff --git a/content/blog/june-2018/index.md b/content/blog/june-2018/index.md new file mode 100644 index 000000000..e96e0a3e1 --- /dev/null +++ b/content/blog/june-2018/index.md @@ -0,0 +1,73 @@ +--- +title: "June 2018" +date: 2018-06-05 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - IoT + - Newsletter + +--- +{{< figure + default=true + src="img/june-1.webp" + >}} + +Welcome to our June Newsletter! + +Hi everyone, + +Our campus recruitment program for 2019 has already started, while we also accept university graduates and experienced professionals during summer 2018. We are delighted to be able to offer several [job opportunities](https://www.espressif.com/en/company/job-opportunities/job-search?title=&field_classification_value=Corporate) to applicants interested in working for our Research and Development, Engineering, Information Technology, Marketing, Business Operation, Documentation, and Human Resources Departments in our Chinese offices and abroad (Pune and Brno branches). + +Successful candidates will join teams of specialists in chip design, software/ firmware development, business development and marketing. At Espressif Systems we are passionate about creating state-of-the-art chipsets and enabling our customers to deliver innovative products. Espressif Systems is a multi-national IoT company with a growing business cycle both in China and abroad. This allows us to offer competitive salaries, annual bonuses, comprehensive medical care and health insurance packages, continuing professional development + +programs and many more benefits. All this happens in a positive work environment that encourages collaboration, communication and technological innovation. + +Furthermore, Espressif Systems is an equal opportunities employer and considers all applicants on the basis of individual merit, regardless of their race, national and ethnic origin, color, religion, age, disability, marital and pregnancy status, gender identity, sexual orientation and any other legally-protected status. + +Based on our recent funding from Intel Capital and the Beijing Singularity Power Investment Fund L.P. (SPC), our aim for 2018 is to expand the range of our products, reach new and bigger markets, and deliver our innovative IoT solutions to more people across the world. Our customers, our partners and our supporters are always at the core of our strategic goals. Nothing would be possible without them. + +Best wishes, John Lee + +Senior Customer Support Officer + +## IoT Seminars by Espressif India in Pune + +{{< figure + default=true + src="img/june-2.webp" + >}} + +The Indian branch of Espressif Systems is only a few months old, but it is already highly active, organizing IoT seminars for the local community of developers in Pune. The last session was held at the end of May and it focused on FreeRTOS. Due to popular demand, there will be a complementary session on __Saturday__ , __June 9th__ , __from 10:00am to 1:00pm__ , which aims to cover the wide range of questions that could not be tackled during the first two-hour session. Places are limited, so [register now](https://www.meetup.com/Internet-Of-Things-Pune-IoTPune/events/251196679/) to make sure you can attend this seminar. + +## ESP8266-based DIY Model Airplane + +{{< figure + default=true + src="img/june-3.webp" + >}} + +Imagine you are an aviation enthusiast and you have less than 15 US dollars to spend on your hobby. What can you do? Well, an [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview)-based IoT solution might be just right for you! [Ravi Butani](http://www.instructables.com/member/RAVI_BUTANI/), an electronics engineer from India, has devised a [remote-controlled light-weight DIY aircraft](http://www.instructables.com/id/WIFI-CONTROLLED-RC-PLANE/), combining his passion about electronics and aviation. What’s more, his project relies on the power of ESP8266. + + +## “La Cool Co.” Wins 2nd Prize at VivaTech 2018 + +{{< figure + default=true + src="img/june-4.webp" + >}} + +There is considerable media hype surrounding cryptocurrencies nowadays, not least due to the volatility of their value. Those who have invested in them need to instantly get the latest updates on their value, so that they can plan their next moves accordingly. In response to this reality, [Igor Fonseca Albuquerque](https://www.hackster.io/igorF2) has created a highly versatile gadget that is based on [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview). + +## ESP32-based Smart Wallet + +{{< figure + default=true + src="img/june-5.webp" + >}} + +There is considerable media hype surrounding cryptocurrencies nowadays, not least due to the volatility of their value. Those who have invested in them need to instantly get the latest updates on their value, so that they can plan their next moves accordingly. In response to this reality, [Igor Fonseca Albuquerque](https://www.hackster.io/igorF2) has created a highly versatile gadget that is based on[ESP32](https://www.espressif.com/en/products/hardware/esp32/overview). + +*Originally published at *[*mailchi.mp*](https://mailchi.mp/f500229dfb77/espressif-esp-news-june-2018)*.* diff --git a/content/blog/june-2019/img/june-1.webp b/content/blog/june-2019/img/june-1.webp new file mode 100644 index 000000000..60de1ec9e Binary files /dev/null and b/content/blog/june-2019/img/june-1.webp differ diff --git a/content/blog/june-2019/img/june-2.webp b/content/blog/june-2019/img/june-2.webp new file mode 100644 index 000000000..280f5bd74 Binary files /dev/null and b/content/blog/june-2019/img/june-2.webp differ diff --git a/content/blog/june-2019/img/june-3.webp b/content/blog/june-2019/img/june-3.webp new file mode 100644 index 000000000..aeda7eade Binary files /dev/null and b/content/blog/june-2019/img/june-3.webp differ diff --git a/content/blog/june-2019/img/june-4.webp b/content/blog/june-2019/img/june-4.webp new file mode 100644 index 000000000..463a3d9f9 Binary files /dev/null and b/content/blog/june-2019/img/june-4.webp differ diff --git a/content/blog/june-2019/index.md b/content/blog/june-2019/index.md new file mode 100644 index 000000000..64562fc8e --- /dev/null +++ b/content/blog/june-2019/index.md @@ -0,0 +1,77 @@ +--- +title: "June 2019" +date: 2019-06-11 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Internet Of Things + - Newsletter + +--- +Hi everyone, + +Celebrating the [Dragon Boat Festival](https://en.wikipedia.org/wiki/Dragon_Boat_Festival) on 7–9 June is not the only reason we feel energetic and refreshed this week. More importantly, our new chip, ESP32-S2, will soon come out, as we have [recently announced](https://www.espressif.com/en/news/espressif-announces-%E2%80%A8esp32-s2-secure-wi-fi-mcu). + +ESP32-S2 is a highly integrated, low-power microcontroller supporting 2.4 GHz Wi-Fi HT40 and having 43 GPIOs. Our new chip is based on an Xtensa single-core 32-bit LX7 processor that can be clocked up to 240MHz. With state-of-the-art power management, RF performance, IO capabilities and security features, ESP32-S2 is an ideal choice for smart-home applications, wearables and a wide variety of other IoT applications. In fact, the 240 MHz Xtensa core makes ESP32-S2 an optimal solution for building the most demanding IoT projects without requiring external MCUs. + +By leveraging Espressif’s mature and production-ready IoT development framework (ESP-IDF), ESP32-S2 achieves excellent value for money, thus bringing faster and more secure IoT solutions to the market. + +Engineering samples of the beta version of ESP32-S2 will become available towards the end of June 2019. For more information, please contact Espressif’s [Business Support Department](https://www.espressif.com/en/company/contact/pre-sale-questions-crm). + +Other news you can read in this month’s newsletter include: + +- the official inclusion of our ESP32-Azure IoT Kit in Microsoft’s Plug-and-Play program, which aims to bring extra ease to connecting IoT devices. +- a great event that AWS and Espressif put together on 4 June for the IoT community in the USA, which was about the development of IoT solutions. +- Espressif’s sponsorship of Pycom’s #GOINVENT worldwide series of workshops. +- a really cool project posted on hackster.io, which shows how you can create 8-bit tunes, using an ESP8266 development board. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog). We respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer + +## Microsoft’s Plug-and-Play with the ESP32-Azure IoT Kit + +{{< figure + default=true + src="img/june-1.webp" + >}} + +Espressif’s [ESP32-Azure IoT Kit](https://www.espressif.com/en/products/hardware/esp32-azure-kit) has been granted a certification that makes it an integral part of [Microsoft’s Plug-and-Play program](https://azure.microsoft.com/en-us/blog/azure-iot-at-build-making-iot-solutions-easier-to-develop-more-powerful-to-use/), which has been designed to bring the ease of “Plug and Play” to IoT devices. With Microsoft’s Plug and Play, developers can plug virtually any peripheral into a Windows PC without having to worry about drivers. + +[*Keep Reading*](https://www.espressif.com/en/news/Microsoft_Plug-and-Play_with_ESP32-Azure_IoT_Kit) + +## AWS and Espressif’s Workshop in the USA + +{{< figure + default=true + src="img/june-2.webp" + >}} + +On 4 June, Espressif and AWS co-hosted a hands-on workshop focused on developing IoT solutions using Amazon FreeRTOS and ESP32 development boards, such as [ESP32-DevKitC](https://www.espressif.com/en/products/hardware/esp32-devkitc/overview) and [ESP-WROVER-KIT-VB](https://www.espressif.com/en/products/hardware/esp-wrover-kit/overview). Embedded developers learned about the AWS IoT suite of services and built firmware for the management of typical IoT appliances. + +[*Keep Reading*](https://www.espressif.com/en/news/AWS_and_Espressif_Workshop) + +## Espressif Sponsors Pycom’s #GOINVENT World Series of Workshops + +{{< figure + default=true + src="img/june-3.webp" + >}} + +[Pycom](https://pycom.io/) has been an Espressif partner since 2017. They provide IoT platforms with end-to-end solutions that can fit any project. Pycom has recently started a series of workshops aiming to engage with the worldwide community of IoT makers. Espressif could not but support them in this fantastic initiative. + +[*Keep Reading*](https://www.espressif.com/en/Espressif_Sponsors_Pycom_GOINVENT) + +## Create 8-bit Tunes with ESP8266! + +{{< figure + default=true + src="img/june-4.webp" + >}} + +[Chiptune](https://en.wikipedia.org/wiki/Chiptune), also known as chip music or 8-bit music, is a style of synthesized electronic music made using the programmable sound generator (PSG) sound chips in vintage arcade machines, computers and video game consoles. However, you can now create cool [8-bit tunes](https://www.hackster.io/ericBcreator/a-m-p-arduino-music-player-8013b6?utm_campaign=new_projects&utm_content=2&utm_medium=email&utm_source=hackster&utm_term=project_name), using an [ESP8266 dev board](https://www.espressif.com/en/products/hardware/esp8266ex/overview). + +[*Keep Reading*](https://www.espressif.com/en/news/Create_8-bit_Tunes_with_ESP8266) diff --git a/content/blog/june-2020/img/june-1.webp b/content/blog/june-2020/img/june-1.webp new file mode 100644 index 000000000..4d43270df Binary files /dev/null and b/content/blog/june-2020/img/june-1.webp differ diff --git a/content/blog/june-2020/img/june-2.webp b/content/blog/june-2020/img/june-2.webp new file mode 100644 index 000000000..1fedebc30 Binary files /dev/null and b/content/blog/june-2020/img/june-2.webp differ diff --git a/content/blog/june-2020/img/june-3.webp b/content/blog/june-2020/img/june-3.webp new file mode 100644 index 000000000..8a3730bf0 Binary files /dev/null and b/content/blog/june-2020/img/june-3.webp differ diff --git a/content/blog/june-2020/index.md b/content/blog/june-2020/index.md new file mode 100644 index 000000000..03b0601b2 --- /dev/null +++ b/content/blog/june-2020/index.md @@ -0,0 +1,63 @@ +--- +title: "June 2020" +date: 2020-07-27 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Embedded Club + - Newsletter + +--- +Hi everyone, + +We’ve got some exciting news for you this month! In response to our customers’ requests, we have just launched [ESP-Hosted](https://github.com/espressif/esp-hosted). This is a project which addresses our customers’ requirement to use ESP32 as a connectivity module with Linux-based host controllers. + +More specifically, the ESP-Hosted project offers a way of using ESP32 as a communication processor that provides Wi-Fi and Bluetooth/BLE connectivity to the host MCU. In this context, [ESP32](https://www.espressif.com/en/products/socs/esp32/overview) provides a standard network-interface implementation for the host to receive and transmit 802.3 frames. The host can use its own TCP/IP and TLS stack above the network interface that the application uses. For Bluetooth connectivity, ESP32 provides a standard host controller interface (HCI), on which the host can run a Bluetooth host stack. Although this project does not provide a standard 802.11 interface to the host, it does provide the control path with a custom command implementation, based on Protobufs, both on the host-side and the ESP32-side. + +[On our GitHub webpage](https://github.com/espressif/esp-hosted), you can get all the information about ESP-Hosted, along with the relevant diagrams and getting-started instructions. Other topics you can read about in this month’s newsletter include: + +- ATOM Echo, an ESP32-based miniature programmable smart speaker by M5Stack. With ATOM Echo, you and your friends can now enjoy your favorite music everywhere! +- An ESP32-based Wi-Fi-connected espresso machine, with which you can make the most elaborate tasting coffee in the “Blynk” of an eye! +- A cool project by the Embedded Club founder, Ashok, who used ESP8266 for hacking the IR remote control of his air cooler. This project shows that you can hack pretty much any infrared remote control in the same way! + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog). We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer + +## ATOM Echo: ESP32-based Miniature Programmable Smart Speaker by M5Stack + +{{< figure + default=true + src="img/june-1.webp" + >}} + +[M5Stack’s ATOM Echo](https://m5stack.com/collections/m5-atom/products/atom-echo-smart-speaker-dev-kit) is a tiny programmable smart speaker. It makes full use of [ESP32](https://www.espressif.com/en/products/socs/esp32/overview)’s IoT power, while the design of ATOM Echo is based on the M5ATOM series of products. Its slim design measures only 24x24x17mm, so the gadget itself can be easily carried anywhere. At the same time, its premium finish gives it a sleek appearance. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP32_ATOM_Echo) + +## ESP32-based Wi-Fi-connected Espresso Machine + +{{< figure + default=true + src="img/june-2.webp" + >}} + +[Fracino](https://www.fracino.com/index.html), an award-winning UK manufacturer of cappuccino and espresso machines, chose an [ESP32](https://www.espressif.com/en/products/socs/esp32/overview)-powered mobile app for building an efficient and aesthetically pleasing solution for their client, Londinium espresso. The ESP32-based app, which was created by [Blynk IoT](https://blynk.io/clients/londinium-fracino-iot-connected-wifi-espresso-machine-case-study-blynk), controls all the main parameters of the espresso machine effortlessly. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP32_Espresso_Machine) + +## Alexa-controlled Air Cooler with ESP8266 + +{{< figure + default=true + src="img/june-3.webp" + >}} + +[Ashok](https://ashokr.com/), the founder of [Embedded Club](https://www.instagram.com/embeddedclub/), a community of makers in India, focused on embedded programming / design, STEM trainings, application development and 2D/3D animations, has come up with really cool project. He hacked the remote control of an air cooler, using [ESP8266](https://www.espressif.com/en/products/socs/esp8266/overview). More importantly, though, this project demonstrates that any infrared remote control can be hacked in the same way! + +[*Keep Reading*](https://www.espressif.com/en/news/ESP8266_hack) + +*Originally published at *[*https://mailchi.mp*](https://mailchi.mp/75befa5646ab/espressif-esp-news-june-2020)*.* diff --git a/content/blog/june-2021/img/june-1.webp b/content/blog/june-2021/img/june-1.webp new file mode 100644 index 000000000..ff8c2c4b2 Binary files /dev/null and b/content/blog/june-2021/img/june-1.webp differ diff --git a/content/blog/june-2021/img/june-2.webp b/content/blog/june-2021/img/june-2.webp new file mode 100644 index 000000000..fb32505fc Binary files /dev/null and b/content/blog/june-2021/img/june-2.webp differ diff --git a/content/blog/june-2021/img/june-3.webp b/content/blog/june-2021/img/june-3.webp new file mode 100644 index 000000000..2bc93a0ce Binary files /dev/null and b/content/blog/june-2021/img/june-3.webp differ diff --git a/content/blog/june-2021/img/june-4.webp b/content/blog/june-2021/img/june-4.webp new file mode 100644 index 000000000..13e109979 Binary files /dev/null and b/content/blog/june-2021/img/june-4.webp differ diff --git a/content/blog/june-2021/index.md b/content/blog/june-2021/index.md new file mode 100644 index 000000000..ac7874b3e --- /dev/null +++ b/content/blog/june-2021/index.md @@ -0,0 +1,55 @@ +--- +title: "June 2021" +date: 2021-07-21 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Newsletter + - Esp32 + +--- +{{< figure + default=true + src="img/june-1.webp" + >}} + +Hi everyone, + +An exciting IoT contest has just been launched by [Amazon Web Services (AWS) on hackster.io](https://www.hackster.io/contests/Healthy-Spaces-with-AWS). It is entitled “Reinventing Health Spaces” and the challenge for developers across the world is to build an open-source, healthy-spaces solution using M5Stack Core2 for the AWS IoT EduKit reference hardware, AWS IoT Core, and at least one other cloud service. We, at Espressif, are particularly happy about this event, because the AWS IoT EduKit is based on [ESP32](https://www.espressif.com/en/products/socs/esp32). AWS IoT EduKit also works seamlessly with [ESP RainMaker](https://rainmaker.espressif.com/), as is mentioned in the EduKit’s [Getting-Started guide](https://edukit.workshop.aws/en/getting-started/run-rainmaker.html). + +As the contest organizers have put it: “The COVID-19 pandemic has placed a spotlight on the importance of public health and safety. […] As cities begin to open back up and people can gather once again in homes, businesses, and public spaces, it’s more important than ever to have strong safety protocols and continue innovating new solutions that keep us safe. These may include temperature screenings, physical distancing guidelines, face-covering requirements, occupancy limits, and enhanced cleaning and air flow. Technology can clearly play a role in reinventing how we keep people healthy by making it easier to follow safety protocols and best practices”. + +So, we can’t wait to see what the community will invent! + +All submissions must include an article on the Hackster website about your entry for the competition, open-source code, and either images or a short video demonstrating your solution. The deadline for submitting it to the contest is August 15, 2021, at 8:00pm Pacific Time. Winners will be announced on August 31, 2021. To get all the details about the “Reinventing Healthy Spaces” contest, you can check out the [relevant article on hackster.io](https://www.hackster.io/contests/Healthy-Spaces-with-AWS). + +Other topics you can read about in this month’s newsletter include: + +[__New ESP RainMaker Features__ ](https://www.espressif.com/en/news/new_ESPRainMaker_features) + +{{< figure + default=true + src="img/june-2.webp" + >}} + +The [latest additions](/blog/new-features-in-esp-rainmaker) to [ESP RainMaker](https://rainmaker.espressif.com/)’s feature set include node sharing, timezone setting, Arduino support, and node grouping. + +[__ESP-HMI: Smart Interaction — Boundless Communication__ ](https://www.espressif.com/en/news/esp-hmi) + +{{< figure + default=true + src="img/june-3.webp" + >}} + +[ESP-HMI](https://www.espressif.com/en/solutions/hmi/esp-hmi) is Espressif’s high-performance and low-cost solution for enabling smart interaction between people and AIoT devices. + +[__ESPGateway: A Powerful ESP32-based Device by ThingPulse__ ](https://www.espressif.com/en/news/ESPGateway) + +{{< figure + default=true + src="img/june-4.webp" + >}} + +Connecting two [ESP32 SoCs](https://www.espressif.com/en/products/socs/esp32) via a serial connection, attaching an external (Wi-Fi) antenna to each of them, and tucking them away in a pretty enclosure opens up a number of [interesting opportunities](https://thingpulse.com/product/espgateway/). diff --git a/content/blog/june-2022/img/june-1.webp b/content/blog/june-2022/img/june-1.webp new file mode 100644 index 000000000..6641e71f9 Binary files /dev/null and b/content/blog/june-2022/img/june-1.webp differ diff --git a/content/blog/june-2022/img/june-2.webp b/content/blog/june-2022/img/june-2.webp new file mode 100644 index 000000000..29ed8b7b4 Binary files /dev/null and b/content/blog/june-2022/img/june-2.webp differ diff --git a/content/blog/june-2022/img/june-3.webp b/content/blog/june-2022/img/june-3.webp new file mode 100644 index 000000000..3376a63c2 Binary files /dev/null and b/content/blog/june-2022/img/june-3.webp differ diff --git a/content/blog/june-2022/img/june-4.webp b/content/blog/june-2022/img/june-4.webp new file mode 100644 index 000000000..5c7866766 Binary files /dev/null and b/content/blog/june-2022/img/june-4.webp differ diff --git a/content/blog/june-2022/img/june-5.webp b/content/blog/june-2022/img/june-5.webp new file mode 100644 index 000000000..e38e4fb98 Binary files /dev/null and b/content/blog/june-2022/img/june-5.webp differ diff --git a/content/blog/june-2022/img/june-6.webp b/content/blog/june-2022/img/june-6.webp new file mode 100644 index 000000000..c60db153e Binary files /dev/null and b/content/blog/june-2022/img/june-6.webp differ diff --git a/content/blog/june-2022/index.md b/content/blog/june-2022/index.md new file mode 100644 index 000000000..39b0b4739 --- /dev/null +++ b/content/blog/june-2022/index.md @@ -0,0 +1,84 @@ +--- +title: "June 2022" +date: 2022-07-10 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +Last month (21–23 June), Espressif Systems was delighted to participate in the [20th edition of embedded world](https://www.embedded-world.de/en/news/press-releases/2022-embedded-closing-report-jp1ycrjfx7_pireport). With over 3,900 online and onsite attendees *embedded world* proved that it is the leading trade fair of the international embedded community. More than 720 exhibitors from 39 countries presented their latest developments in embedded technologies, ranging from components, modules and complete development boards to operating systems and software tools, as well as services for embedded systems. + +In this major event, Espressif unveiled ESP32-C5, the world’s first RISC-V SoC with a dual-band Wi-Fi 6 and Bluetooth 5 (LE) connectivity. We also presented the most recent achievements in our SoC portfolio. Here are some more details about them: + +- [ESP32-C5](https://www.espressif.com/en/news/ESP32-C5): a RISC-V SoC with 2.4 & 5 GHz Wi-Fi 6 and Bluetooth 5 (LE), which is designed for IoT applications requiring high-efficiency wireless transmissions; +- [ESP32-H2](https://www.espressif.com/en/news/ESP32_H2): a RiSC-V SoC that combines IEEE 802.15.4 (Thread and Zigbee) and Bluetooth 5 (LE) with support for the Matter protocol, which enables interconnectivity for home-automation projects from different providers; +- [ESP32-C2](https://www.espressif.com/en/products/socs) and [ESP32-C3](https://www.espressif.com/en/products/socs/esp32-c3): RISC-V SoCs with 2.4 GHz Wi-Fi 4 and Bluetooth 5 (LE) connectivity, designed for a wide range of common IoT products; +- [ESP32-S3](https://www.espressif.com/en/products/socs/esp32-s3): An AI SoC built specifically for the AIoT market. It combines 2.4 GHz Wi-Fi 4 and Bluetooth 5 (LE) with powerful AI acceleration and reliable security features for high-performance applications of voice and face recognition. + +Below you can watch the relevant video we presented at *embedded world *2022: + +[*Introducing Espressif’s Latest SoCs and Solutions*](https://youtu.be/j9IOdgxVcE0) + +Furthermore, from 20 to 23 June 2022, the CSA Connectivity Standards Alliance held [a members’ meeting](https://csa-iot.org/event/alliance-member-meeting/) in San Diego, USA, where professionals from across the globe came together to develop Alliance standards, through networking and collaboration across multiple working groups. Espressif, as an active member of the CSA Alliance and among the first contributors to the Matter project, was there showcasing its [one-stop Matter solution](https://www.espressif.com/en/news/ESP_Matter_Solution). This is based on a whole range of Espressif SoC series, a production-ready [ESP-Matter SDK](https://github.com/espressif/esp-matter), and ESP RainMaker’s Matter integration, which enables Cloud-based management for Matter devices. Please [click here](https://docs.espressif.com/projects/esp-matter/en/latest/esp32/) to get all the details on Espressif’s one-stop Matter solution. + +{{< figure + default=true + src="img/june-1.webp" + >}} + +{{< figure + default=true + src="img/june-2.webp" + >}} + +Other topics you can read about in this month’s newsletter include: + +{{< figure + default=true + src="img/june-3.webp" + >}} + +[__Introducing ESP32-C5__ ](https://www.espressif.com/en/news/ESP32-C5) + +Espressif’s ESP32-C5 is the industry’s first RISC-V SoC solution that supports a 2.4 and 5 GHz dual-band Wi-Fi 6, along with Bluetooth LE, for high-efficiency wireless transmissions. + +{{< figure + default=true + src="img/june-4.webp" + >}} + +[__Espressif’s One-Stop Matter Solution__ ](https://www.espressif.com/en/news/ESP_Matter_Solution) + +Espressif’s one-stop Matter solution can simplify and accelerate the development process of Matter products significantly. + +{{< figure + default=true + src="img/june-5.webp" + >}} + +[__Espressif’s AWS IoT ExpressLink Module__ ](https://www.espressif.com/en/news/Espressif_AWS_IoT_ExpressLink_Module_GA) + +Espressif, in partnership with Amazon Web Services, is proud to announce the general availability of its new connectivity module with built-in support for the [AWS IoT ExpressLink](https://aws.amazon.com/iot-expresslink/) specification. + +{{< figure + default=true + src="img/june-6.webp" + >}} + +[__Espressif Collaborates with PlatformIO Labs__ ](https://www.espressif.com/en/news/PlatformIO_ESP_collaboration) + +The two companies begin a wide-ranging partnership in providing a next-generation development ecosystem for IoT solutions. + +[Read More >](https://www.espressif.com/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-1.webp b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-1.webp new file mode 100644 index 000000000..87736673d Binary files /dev/null and b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-1.webp differ diff --git a/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-2.webp b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-2.webp new file mode 100644 index 000000000..f1ed67343 Binary files /dev/null and b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-2.webp differ diff --git a/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-3.webp b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-3.webp new file mode 100644 index 000000000..e1832d378 Binary files /dev/null and b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-3.webp differ diff --git a/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-4.webp b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-4.webp new file mode 100644 index 000000000..16954edc8 Binary files /dev/null and b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-4.webp differ diff --git a/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-5.webp b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-5.webp new file mode 100644 index 000000000..73f40dbbc Binary files /dev/null and b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-5.webp differ diff --git a/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-6.webp b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-6.webp new file mode 100644 index 000000000..72ed2d529 Binary files /dev/null and b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-6.webp differ diff --git a/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-7.webp b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-7.webp new file mode 100644 index 000000000..1c53acdb8 Binary files /dev/null and b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/img/leveraging-7.webp differ diff --git a/content/blog/leveraging-wi-fi-6-features-for-iot-applications/index.md b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/index.md new file mode 100644 index 000000000..9e7d57e99 --- /dev/null +++ b/content/blog/leveraging-wi-fi-6-features-for-iot-applications/index.md @@ -0,0 +1,107 @@ +--- +title: "Leveraging Wi-Fi 6 Features for IoT Applications" +date: 2023-06-13 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - anant-raj-gupta +tags: + - IoT + - Wi Fi 6 + - Wi Fi + - Low Latency + - Low Power + +--- +In recent years, connected devices have become increasingly prevalent in our daily lives. From smart home devices to industrial automation systems, IoT technology is transforming the way we interact with the world around us. As IoT devices continue to proliferate, the need for reliable, high-capacity, and low-power wireless connectivity has become paramount. This is where Wi-Fi 6 (also known as 802.11ax) comes in, and its adoption in residential and enterprise settings reflects this need. + +According to a report by the __Wi-Fi Alliance__ , Wi-Fi 6 reached 50% market adoption more rapidly than any of the previous Wi-Fi generations. This was fuelled by the demand for high-quality Wi-Fi and more efficient, reliable connectivity [1]. Global tech market advisory firm __ABI Research__ expects Wi-Fi 6 access points to increase from 9% of total Wi-Fi consumer premise equipment (CPE) shipments in 2020 to account for nearly 81% of the entire total Wi-Fi market in 2026 [2]. + +{{< figure + default=true + src="img/leveraging-1.webp" + >}} + +It is clear that the adoption rate for Wi-Fi 6 is on the rise, and it is the right time for new products to start utilizing the various features of 802.11ax that are incorporated into the specifications for various IoT applications. + +To explain the impact of Wi-Fi 6 on IoT applications, it is essential to understand the different features introduced by Wi-Fi 6 and how they enhance network reliability, stability, and performance, enabling IoT applications to benefit from them. + +## Target Wake Time (TWT) + +Target Wake Time (TWT) is a feature of Wi-Fi 6 that allows devices to schedule when they will communicate with the wireless network. TWT lets a device turn on its radio interface only when it needs to communicate with the network, thereby reducing power consumption and extending the battery life of IoT devices.TWT works by allowing devices to negotiate a time slot with the access point for communication. This means that devices can plan when they need to wake up to communicate with the network, and the access point can plan its resources to accommodate the communication. TWT thus allows devices to stay in low-power modes for most of the time, which is especially important for battery-operated IoT devices that may not have access to a power source. + +{{< figure + default=true + src="img/leveraging-2.webp" + >}} + +For IoT applications, TWT can enable the development of battery-operated Wi-Fi devices or sensors for certain applications that do not require fast response times. This feature can also be beneficial for IoT devices that only need to send small amounts of data at infrequent intervals. With TWT, these devices can operate with minimal power consumption, extending their battery life and reducing maintenance requirements. + +## Wi-Fi Protected Access 3 (WPA3) + +WPA3 is the latest security protocol for Wi-Fi networks, designed to address security weaknesses in WPA2. While it is available as an option for Wi-Fi 5 and earlier devices and routers, it is a mandatory requirement for Wi-Fi 6 certification by the Wi-Fi Alliance. This means that all Wi-Fi 6 devices must have WPA3 compatibility to obtain certification, ensuring that they meet the industry standard for security. + +{{< figure + default=true + src="img/leveraging-3.webp" + >}} + +For IoT applications, the adoption of WPA3 provides several benefits. One is the ability to use QR codes for easy connection to Wi-Fi networks. With WPA3, devices can generate a QR code that can be scanned by a smartphone or tablet to easily connect to a Wi-Fi network. This simplifies the setup process and reduces the risk of errors or security vulnerabilities that can arise from manually entering network credentials.In addition to easy-connect features, WPA3 provides stronger security measures than previous protocols, including protection against offline password-guessing attacks, stronger encryption, and enhanced protection for public Wi-Fi networks. This is particularly important for IoT applications, where security is crucial to prevent unauthorized access or malicious attacks that can compromise the integrity of the system. Overall, the adoption of WPA3 in Wi-Fi 6 devices provides a more robust and secure platform for IoT applications to operate on. + +## MU-MIMO Downlink and Uplink (multi-user multiple input multiple output) + +MU-MIMO is a wireless technology that allows multiple devices to communicate simultaneously with a single access point (AP). MU-MIMO takes advantage of spatial separation to enable simultaneous communication with multiple devices. By using multiple antennas, the AP can create separate “beam-forming” paths toward different devices, enhancing signal strength and reducing interference. This is a significant improvement over SU-MIMO, which could communicate with only one device at a time. In a congested network where devices have to wait for their turn to communicate with the AP, there can be increased latency and potential timeouts. With MU-MIMO, the wait time is significantly reduced as devices can transmit and receive data concurrently, leading to improved responsiveness. With the support of MU-MIMO on 20MHz Channels as well as for 1SS devices, in Wi-Fi 6, IoT devices can also take advantage of this useful feature. + +{{< figure + default=true + src="img/leveraging-4.webp" + >}} + +MU-MIMO can provide considerable benefits to IoT applications. MU-MIMO impacts the number of devices connected to a single AP by enabling simultaneous communication, utilizing spatial separation, and optimizing resource allocation. These factors collectively increase the network capacity, reduce delays, and enhance overall efficiency, allowing for a larger number of devices to stay connected while maintaining satisfactory performance. This is particularly important in residential and commercial environments with a good number of smart devices connected to the Wi-Fi network. In addition, MU-MIMO can help to reduce latency, which is important for applications that require real-time data transmission, such as industrial automation, security monitoring, and healthcare. With reduced latency, the overall performance and responsiveness of the network can be improved. + +## OFDMA (Orthogonal Frequency Division Multiple Access) + +OFDMA is a key feature of Wi-Fi 6 that improves the way data is transmitted between access points and multiple IoT devices. OFDMA divides the Wi-Fi channel into smaller sub-channels, known as resource units (RUs), and assigns each RU to a specific device or group of devices. This way, an AP can communicate with multiple devices simultaneously, and each device gets a fair share of the channel’s capacity. + +{{< figure + default=true + src="img/leveraging-5.webp" + >}} + +With OFDMA, IoT devices can enjoy more consistent attention from the AP, as the resources are allocated more efficiently and predictably. This reduces the chances of packet loss and improves the throughput and overall performance of the network.Furthermore, OFDMA reduces the reliance on the contention methodology that was used in previous Wi-Fi standards, where devices would have to compete with each other for access to the channel. In contrast, OFDMA allows devices to receive their data without waiting for the transmission to other devices to finish. This results in less latency and better responsiveness for time-sensitive IoT applications, such as smart home devices, industrial automation, and healthcare applications.In summary, with this technology, IoT devices can enjoy a more stable and consistent connection, a higher density of device connections, and lower latency of communication. + +## BSS Coloring + +BSS coloring is a feature introduced in the 802.11ax Wi-Fi standard that helps reduce interference from neighboring access points (APs) and improve coexistence between multiple APs. The basic idea behind BSS coloring is that each BSS or AP uses a unique color (6-bit code) which is carried by the signal preamble or SIG field. The color allows client devices to differentiate between the signals of neighboring APs and avoid interference.In more technical terms, BSS coloring helps reduce co-channel interference (CCI) and adjacent-channel interference (ACI) between neighboring APs. With BSS coloring, each AP is assigned a unique color, which is added to the preamble of each transmitted packet. When a client device receives a packet, it can check the color of the received preamble and use this information to distinguish between the signals of different APs. + +{{< figure + default=true + src="img/leveraging-6.webp" + >}} + +In dense IoT deployments or environments with a high concentration of devices and interfering Access Points, BSS coloring can be particularly beneficial. It helps prevent unnecessary retransmissions and collisions caused by neighboring networks, thus improving the overall network efficiency and potentially extending the usable range for IoT devices. Overall, BSS coloring is a useful feature in Wi-Fi 6 that helps improve network performance and reliability, particularly in environments with high AP density. + +## 1024 QAM, 8 SS, 160MHz Band + +Other important features introduced in Wi-Fi 6 are focused on increasing the network bandwidth. For example, Wi-Fi 6 uses a higher modulation scheme of 1024 QAM compared to 256 QAM as used in previous generations. This translates to an encoding of 10-bit instead of 8-bit data thus increasing the overall bandwidth by 25%. Similarly, support for up to 8 parallel spacial streams and the addition of 160MHz channel bandwidth also increases the overall physical bandwidth of the network significantly. In general, such high data rates typically are not required for IoT applications. By increasing the available bandwidth and improving the efficiency of data transmission, these features can help ensure that the network can handle high traffic from multiple clients, including IoT devices, without experiencing slowdowns or congestion. This can be particularly important in dense IoT deployments or environments with high levels of network activity. + +## Espressif’s ESP32-C6 with Wi-Fi 6 + +[ESP32-C6](https://www.espressif.com/en/products/socs/esp32-c6) is Espressif’s first Wi-Fi 6 SoC integrating 2.4 GHz Wi-Fi 6, Bluetooth 5 (LE), and the 802.15.4 protocol. ESP32-C6 achieves an industry-leading RF performance, with reliable security features and multiple memory resources for IoT products. ESP32-C6 consists of a high-performance 32-bit RISC-V processor which can be clocked up to 160 MHz, and a low-power 32-bit RISC-V processor which can be clocked up to 20 MHz. ESP32-C6 has a 320KB ROM, and a 512KB SRAM, and works with external flash. + +{{< figure + default=true + src="img/leveraging-7.webp" + >}} + +ESP32-C6 has an integrated 2.4 GHz Wi-Fi 6 (802.11ax) radio, which is backward compatible with the 802.11b/g/n standard. ESP32-C6 supports the OFDMA mechanism for both uplink and downlink communications, while also supporting MU-MIMO for downlink traffic. Both of these techniques allow working with high efficiency and low latency, even in congested wireless environments. Additionally, the Target Wake Time (TWT) feature of the 802.11ax standard enables ESP32-C6 customers to build battery-operated connected devices that can last for years, while staying connected throughout. + +--- + +In conclusion, Wi-Fi 6 technology offers a range of features and capabilities that can help maximize IoT performance in various settings, from residential homes to large-scale enterprises. The improved capacity, range, and efficiency of Wi-Fi 6 can support the growing number of IoT devices and advanced applications that are increasingly common in today’s connected world. With the use of the Target Wake Time feature, it is now possible to build battery-operated Wi-Fi devices that are always connected. + +Furthermore, the enhanced security features of Wi-Fi 6, including WPA3 certification, can help protect against potential security threats and ensure that sensitive data remains secure. As the adoption rate of Wi-Fi 6 technology continues to grow, more and more IoT devices and applications will likely rely on Wi-Fi 6 to deliver optimal performance and security. + +Overall, understanding the implications of Wi-Fi 6 features and how they can impact IoT performance is crucial for anyone looking to maximize the potential of IoT technology. By staying up to date with the latest developments in Wi-Fi technology and adopting best practices for IoT connectivity, businesses and consumers alike can ensure that their IoT devices and applications perform at their best, both now and in the future. + +## References: diff --git a/content/blog/local-network-access-via-http-server/index.md b/content/blog/local-network-access-via-http-server/index.md new file mode 100644 index 000000000..5a1ac0b0a --- /dev/null +++ b/content/blog/local-network-access-via-http-server/index.md @@ -0,0 +1,105 @@ +--- +title: "Local Network Access via HTTP Server" +date: 2018-10-13 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Esp32 + - Building Products + - Wifi + +--- +So you have your smart device on your end-user’s home network. Now you would want your user to access your device over the local network. That’s what we will look at in this post. + +Let’s say you are building a smart plug, and you want to toggle the power on or off on your plug. We will create a HTTP URI */power *on your device. + +- An HTTP GET on this URI will give us the current state of the output of the plug. +- An HTTP POST on this URI will update the output state of the plug. + +We will create this URI with the following code: + +``` +httpd_uri_t power_get = { + .uri = "/power", + .method = HTTP_GET, + .handler = power_get_handler +};httpd_uri_t power_post = { + .uri = "/power", + .method = HTTP_POST, + .handler = power_post_handler +}; +``` + +The *power_get_handler() *and the *power_post_handler()* are the functions that will get called respectively, whenever an HTTP GET or HTTP POST will happen on the /power URI on the device. + +Then in our application, we can start the web server and register these URIs with the web server as: + +``` +httpd_handle_t server = NULL; +httpd_config_t config = HTTPD_DEFAULT_CONFIG(); // Start the httpd server +ESP_LOGI(TAG, "Starting server on port: '%d'", config.server_port); if (httpd_start(&server, &config) == ESP_OK) { + // Set URI handlers + httpd_register_uri_handler(server, &power_get); + httpd_register_uri_handler(server, &power_post); +} +``` + +Now the power_get_handler() and the power_post_handler() functions could be implemented as: + +``` +esp_err_t power_get_handler(httpd_req_t *req) +{ + char resp_str[100]; + snprintf(resp_str, sizeof(resp_str), "{\"state\": %s}", + driver_get_output_state() ? "true" : "false"); httpd_resp_send(req, resp_str, strlen(resp_str)); return ESP_OK; +} +#define RESP_SUCCESS "{\"status\": \"success\"}" +#define RESP_FAIL "{\"status\": \"fail\"}" +esp_err_t power_post_handler(httpd_req_t *req) +{ + char buffer[100]; + char *resp_str = RESP_SUCCESS; + int remaining = req->content_len; while (remaining > 0) { + /* Read the data for the request */ + if ((ret = httpd_req_recv(req, buffer, + MIN(remaining, sizeof(buffer)))) < 0) { + return ESP_FAIL; + } + remaining -= ret; + } /* Parse input */ + target_state = my_parse_user_request(buffer); + if (target_state < 0) { + resp_str = RESP_FAIL; + } else { + /* Change the output */ + driver_set_output_state(target_state); + } /* Send back status */ + httpd_resp_send(req, resp_str, strlen(resp_str)); + return ESP_OK; +} +``` + +In the *power_get_handler() *routine above, we just fetch the current output state from the driver, and return it in the HTTP GET response. + +In the *power_post_handler()* routine above, we fetch the user’s request, and modify the driver’s state as the user requested it. + +## Using the API + +For my testing purposes, I could use the following *Curl* commands to test this implementation: + +``` +$ curl http://192.168.1.113/power +{"state": true} +$ curl -d '{"state": false}' http://192.168.1.113/power +{"status": "success"} +``` + +For my production scenario, my phone app will make these API calls to query/modify the state of my device. + +## Security + +Using the API as defined above, relies on the Wi-Fi network’s security to secure the data exchange between your phone and the device. So as long as the user has a secured Wi-Fi network, these exchanges will not be visible to entities outside of the user’s network. + +In case of Wi-Fi networks with Open security, the data will be exchanged in plain-text. You could also use a security layer for exchanging these commands. That is a topic for another article. diff --git a/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/img/making-1.webp b/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/img/making-1.webp new file mode 100644 index 000000000..af6f3daa1 Binary files /dev/null and b/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/img/making-1.webp differ diff --git a/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/img/making-2.webp b/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/img/making-2.webp new file mode 100644 index 000000000..aab7ec92a Binary files /dev/null and b/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/img/making-2.webp differ diff --git a/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/img/making-3.webp b/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/img/making-3.webp new file mode 100644 index 000000000..b403d5e76 Binary files /dev/null and b/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/img/making-3.webp differ diff --git a/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/img/making-4.webp b/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/img/making-4.webp new file mode 100644 index 000000000..705265e0f Binary files /dev/null and b/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/img/making-4.webp differ diff --git a/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/index.md b/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/index.md new file mode 100644 index 000000000..97d6066b9 --- /dev/null +++ b/content/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier/index.md @@ -0,0 +1,69 @@ +--- +title: "Making the Fancy User Interface on ESP Has Never Been Easier!" +date: 2022-09-11 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - vilem-zavodny +tags: + - LVGL + - Squareline + - ESP32 + - Embedded + - User Interface +--- +If you tried to make some fancy UI without any graphic library, you know, how hard it is. Fortunately, there are lot of graphical libraries for making fancy UI on our screens. One of the often used is [LVGL](http://lvgl.io), which is supported on ESP microcontrollers. Usually, when we wanted to use graphical library like [LVGL](http://lvgl.io), we had to know API functions and how to combine it to reach fancy UI. It isn’t true anymore! + +There is a tool called [SquareLine Studio](https://squareline.io/), which can help making better and fancy UI without any other knowledge of the [LVGL API](https://docs.lvgl.io/master/index.html). + +## SquareLine Studio + +The [SquareLine Studio](https://squareline.io/) is a visual multiplatform (Mac OS, Windows and Linux) tool for creating beautiful graphical user interface with [LVGL](http://lvgl.io) graphical library. You can use drag-and-drop for adding and moving widgets on the screen. Working with images or fonts is very simple too. + +After launching the SquareLine Studio and creating a new project (or open example project), there is main editor view (Figure 1). In the middle of the screen is one or more screens in the size of the output LCD display. On the left side is a list of widgets added on the screen in well-arranged __hierarchy__ . Under the hierarchy is list of __available widgets__ but there aren’t all of widgets from LVGL, only most of them. On the right side are three tabs. The important is __Inspector__ and very helpful can be __Font manager__ too. Inspector is changing for each selected widget on the screen and allows make appearance changing of the widget. There is __Events__ part too, where can be added an event for selected widget. There are lot of events for selection from click to gestures. Font manager can make LVGL font from any TTF font file and there can be selected only some characters for spare the memory. On the bottom of the application, there are two tabs, __Assets__ for all media files in the project and __Console__ , where is the whole history of info, warning and error messages. + +{{< figure + default=true + src="img/making-1.webp" + >}} + +The play button on top right corner on the main screen enables simulator - all widgets actions and animations. You can try there, how yours UI will be react. + +For create the code files, there is __Export__ in the top menu and __Export UI Files__ . + +SquareLine studio version 1.1 introduce new feature — __board templates__ . There are pre-prepared boards from some companies, so you can generate complete project with the UI code for selected hardware. This complete project can be created by __Export->Create Template Project__ and then __Export->Export UI Files__ (UI files must be exported again after any change). + +## ESP Boards in SquareLine Studio + +Espressif has prepared two boards in SquareLine Studio for you: [__ESP-BOX__ ](https://github.com/espressif/esp-bsp/tree/master/esp-box) and [__ESP-WROVER-KIT__ ](https://github.com/espressif/esp-bsp/tree/master/esp_wrover_kit). You can select the board after launch the application in Create tab and then in Espressif tab (Figure 2). Each board has pre-filled size of screen, rotation and color depth, which is corresponding with [ESP-BSP](https://github.com/espressif/esp-bsp) which is used in generated code. + +{{< figure + default=true + src="img/making-2.webp" + >}} + +When you select the board, you can see empty screen on the main view of the application. This empty screen has same size like the display on the selected board. Now, you can drag-and-drop some widgets, put the texts and set events. For example something like in the figure 3. + +{{< figure + default=true + src="img/making-3.webp" + >}} + +After creating the template files (Export->Create Template Project) and exporting UI files (Export->Export UI Files), you can compile and flash the project by following the same steps, as you are used to with another Espressif’s examples (if you are using ESP-IDF). On the ESP-BOX it will look like in the figure 4. + +{{< figure + default=true + src="img/making-4.webp" + >}} + +## Is SquareLine Studio for free? + +This tool is __free for personal use with some limitations__ . The free use is limited by 5 screens only and 50 widgets for one project. Other pricing plans can be found on [SquareLine website](https://squareline.io/pricing/licenses). + +## Conclusion + +In my opinion, that’s really helpful tool for making fancy user interfaces on your displays and after the board templates added, it is really easy to use. Sometimes, it can be helpful only for edit some UI or it helps with position of the new widgets. It is very fast for use and easy. + +Unfortunately, there is still missing some minor things, which can make this tool better. For example, I am missing some widgets like tabview or copy style to another widget. The compile and flash the Espressif’s microcontrollers would be nice too. + +Indeed it is a new tool and we can hope, that some of these things will be added in next updates. diff --git a/content/blog/march-2019/img/march-1.webp b/content/blog/march-2019/img/march-1.webp new file mode 100644 index 000000000..e98cd76a3 Binary files /dev/null and b/content/blog/march-2019/img/march-1.webp differ diff --git a/content/blog/march-2019/img/march-2.webp b/content/blog/march-2019/img/march-2.webp new file mode 100644 index 000000000..67488d0f7 Binary files /dev/null and b/content/blog/march-2019/img/march-2.webp differ diff --git a/content/blog/march-2019/img/march-3.webp b/content/blog/march-2019/img/march-3.webp new file mode 100644 index 000000000..e08237094 Binary files /dev/null and b/content/blog/march-2019/img/march-3.webp differ diff --git a/content/blog/march-2019/img/march-4.webp b/content/blog/march-2019/img/march-4.webp new file mode 100644 index 000000000..1f8ed31df Binary files /dev/null and b/content/blog/march-2019/img/march-4.webp differ diff --git a/content/blog/march-2019/img/march-5.webp b/content/blog/march-2019/img/march-5.webp new file mode 100644 index 000000000..9cc5df472 Binary files /dev/null and b/content/blog/march-2019/img/march-5.webp differ diff --git a/content/blog/march-2019/index.md b/content/blog/march-2019/index.md new file mode 100644 index 000000000..197c3dd30 --- /dev/null +++ b/content/blog/march-2019/index.md @@ -0,0 +1,88 @@ +--- +title: "March 2019" +date: 2019-03-11 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Internet Of Things + - Newsletter + +--- +Welcome to our March Newsletter + +__*Our News. Our World Join Us!*__ + +{{< figure + default=true + src="img/march-1.webp" + >}} + +Hi everyone, + +At the end of last month Google announced its partnership with Espressif Systems in a [blogpost introducing the Google Cloud IoT Device SDK](https://cloud.google.com/blog/products/iot-devices/introducing-cloud-iot-device-sdk-a-new-way-for-embedded-iot-devices-to-connect-to-google-cloud-iot-core). This consists of libraries written in Embedded C that enable developers to securely connect, provision, and manage all of their devices with the Google Cloud IoT Core. On this occasion, Teo Swee Ann, the founder and CEO of Espressif Systems, said: “Our collaboration allows for the easy integration of two of our most widely-used products, ESP32 and ESP8266. We are committed to working with Google Cloud, supporting updates to the SDK and enabling our customers to easily make use of current and future designs with Cloud IoT Core.” + +From a value perspective, the Google Cloud IoT Device SDK allows embedded engineers to rapidly prototype, profile, and test in a standard desktop environment before porting to an embedded target, which allows for shorter time to market. So, Espressif is excited to be an integral part of this ecosystem. + +Espressif’s increasing market penetration is further evidenced by the growing number of companies that are looking for ESP32 specialists. After searching a number of overseas recruitment websites (e.g. Guru, Freelancer, Upwork, Monster, CareerBuilder, SimpleHired, LinkedIn, etc.), we found that ESP32 developers are now widely sought after! The latest example is derived from a London-based company with the evocative + +name, “[Tech Will Save Us](https://twsu.workable.com/j/911641EB1A)”. They are looking for engineers with proven experience in embedded development with ESP32 / ESP-IDF. Compensation would depend on the successful candidate’s actual knowledge, but could range up to £500/day. + +Other topics you can find in this month’s newsletter include: + +- “Empathy Swarm”, an Espressif-sponsored project which examines how non-anthropomorphic robots can learn, but also instigate, feelings of empathy and compassion; +- Espressif’s energy-saving smart-lighting solution that is based on ESP-MESH; +- MoonBot, a do-it-yourself kit for tinkering with modern robotics and artificial intelligence projects, which has been based on Espressif’s ESP32-WROOM-32 module; +- An ESP32-based remote-controlled car, which enables video-streaming over Wi-Fi, while running on a small LiPo battery and being controlled accurately from any web browser. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog/featured). We respond to all of your messages as quickly as possible! + +Best wishes, John Lee. Senior Customer Support Officer + +## “Empathy Swarm”: An Art-and-Science Project Sponsored by Espressif + +{{< figure + default=true + src="img/march-2.webp" + >}} + +Espressif has sponsored a project that is on the verge between arts and sciences. It is named “[Empathy Swarm](http://hochschuh-donovan.com/portfolio/empathy-swarm/)” and it examines the ways in which non-anthropomorphic robots can learn, but also instigate, feelings of empathy and compassion. The people behind the project are [Katrin Hochschuh](http://k.hochschuh.de/) and [Adam Donovan](http://adamdonovan.net/). Espressif’s contribution has taken the form of a hardware sponsorship based on the [ESP32-WROVER-B (IPEX)](https://www.espressif.com/sites/default/files/documentation/esp32-wrover-b_datasheet_en.pdf) and the [ESP32-PICO-D4](https://www.espressif.com/sites/default/files/documentation/esp32-pico-d4_datasheet_en.pdf) modules. + +[*Keep Reading*](https://www.espressif.com/en/news/Empathy_Swarm_A_Science_and_Art_Project_Sponsored_by_Espressif) + +## Energy-Efficient Lighting Solution with ESP Mesh + +{{< figure + default=true + src="img/march-3.webp" + >}} + +Have you ever wondered how wasteful it is to leave the office without turning the lights off or have only few employees working during the night and yet keep the lights on across the entire company? Likewise, is it not very inefficient to use big meeting rooms day and night without a system adjusting the lights to users’ actual needs? Automation is the key concept here and [ESP Mesh](https://www.espressif.com/en/products/software/esp-mesh/overview) is Espressif’s technology for energy-efficient lighting systems that respond automatically to users’ needs. + +[*Keep reading*](https://www.espressif.com/en/news/Energy_Efficient_Lighting_Solution_with_ESP_Mesh) + +## “MoonBot Kit” Based on ESP32-WROOM-32 + +{{< figure + default=true + src="img/march-4.webp" + >}} + +MoonBot is a do-it-yourself kit for tinkering with modern robotics and artificial intelligence projects. Its vision processor is Espressif’s [ESP32-WROOM-32 module](https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_en.pdf). Whether you are just getting started, or have worked with robots in the past, the MoonBot kit will help you create professional-looking robots with advanced autonomy. + +[*Keep Reading*](https://www.espressif.com/en/news/MoonBot_Kit_Based_on_ESP32_WROOM_32) + +## ESP32-Powered FPV Car + +{{< figure + default=true + src="img/march-5.webp" + >}} + +“Simplicity is the key to brilliance”, some people say, and it seems that the [remote-controlled car](https://hackaday.io/project/163542-esp32-wifi-robot) made by the German engineer Maximilian Kern (also known as [Max.K](https://hackaday.io/Max.K)) is a concrete example of this principle. Despite the current trends of producing fairly complicated high-tech gadgets, there is plenty to to be said about simple ones, too, such as Maximilian’s adorable ESP32-driven bot. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP32_Powered_FPV_Car) + +*Originally published at *[*mailchi.mp*](https://mailchi.mp/8d0d8ec6dc58/espressif-esp-news-march-2019?e=f9593a0e62)*.* diff --git a/content/blog/march-2020/img/march-1.webp b/content/blog/march-2020/img/march-1.webp new file mode 100644 index 000000000..20ff759ed Binary files /dev/null and b/content/blog/march-2020/img/march-1.webp differ diff --git a/content/blog/march-2020/img/march-2.webp b/content/blog/march-2020/img/march-2.webp new file mode 100644 index 000000000..2ae6a829a Binary files /dev/null and b/content/blog/march-2020/img/march-2.webp differ diff --git a/content/blog/march-2020/img/march-3.webp b/content/blog/march-2020/img/march-3.webp new file mode 100644 index 000000000..08185b6f6 Binary files /dev/null and b/content/blog/march-2020/img/march-3.webp differ diff --git a/content/blog/march-2020/img/march-4.webp b/content/blog/march-2020/img/march-4.webp new file mode 100644 index 000000000..c56192fec Binary files /dev/null and b/content/blog/march-2020/img/march-4.webp differ diff --git a/content/blog/march-2020/img/march-5.webp b/content/blog/march-2020/img/march-5.webp new file mode 100644 index 000000000..d8f8a3c86 Binary files /dev/null and b/content/blog/march-2020/img/march-5.webp differ diff --git a/content/blog/march-2020/index.md b/content/blog/march-2020/index.md new file mode 100644 index 000000000..4a0b367e4 --- /dev/null +++ b/content/blog/march-2020/index.md @@ -0,0 +1,88 @@ +--- +title: "March 2020" +date: 2020-04-06 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +As the COVID-19 crisis spreads rapidly all around the world our thoughts are with those who keep fighting the global pandemic. Now that the epicenter of infections has moved westward, we want to send a message of hope from China to all our partners, our customers and our international community of supporters. __Things will get better!__ + +In China, life is gradually getting back to normal. Further to what Espressif’s __CEO and Founder, Teo Swee Ann__ , said in a recent [blog post](/blog/a-ceos-experience-during-the-covid-19-crisis-part-iii-looking-ahead), we are now happy to confirm that Espressif in China functions normally and at full capacity. But we have more reasons to be excited about. As we mentioned last month, __ESP32-S2 is in mass production now__ . [We have been working for this moment for many years](/blog/esp32-s2-is-here), as we wanted to offer a Wi-Fi-enabled MCU targeting connected, low-cost, low-power, interactive sensors with numerous [advantageous features](https://www.espressif.com/sites/default/files/documentation/esp32-s2_technical_reference_manual_en.pdf). + +Additionally, we are particularly moved to witness members of __the international maker community__ using their creativity and technical skills to __respond to the COVID-19 crisis__ . __Many of the solutions they suggest are based on our SoCs and this makes us even happier!__ Hence, we decided to dedicate most of this month’s newsletter to presenting their solutions. + +So, the topics you can read about in this month’s newsletter include: + +- Espressif’s new ESP32-Vaquita-DSPG development kit and its accompanying SDK, both of which support AVS integration with the AWS IoT Core; +- An ESP8266-based, low-cost, contactless, do-it-yourself, infrared thermometer which can contribute to the fight against the spread of the novel coronavirus; +- An ESP8266-based, distance monitor that can help you properly maintain the official guidelines for social distancing during the COVID-19 crisis; +- ESP8266-based gadgets that can track the development of COVID-19 in different countries; +- In Italy, Gabriele Merlonghi, a maker and Espressif supporter, turned to the power of ESP8266, in order to fuel his creativity and uplift his young son’s spirits during the global pandemic. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog). We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer + +## ESP32-Vaquita-DSPG Development Kit and SDK Support AVS Integration with AWS IoT Core + +{{< figure + default=true + src="img/march-1.webp" + >}} + +Espressif announces the availability of ESP32-Vaquita-DSPG and its accompanying [SDK](https://www.espressif.com/en/products/software/esp-alexa/avs-for-aws-iot/overview), both of which support AVS integration with the AWS IoT Core. Espressif’s new ESP32-Vaquita-DSPG development kit provides a turnkey solution for easily creating Alexa built-in connected devices that provide voice enablement and AWS-IoT cloud connectivity out of the box. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP32-Vaquita-DSPG_and_SDK) + +## ESP8266-based Contactless Thermometer + +{{< figure + default=true + src="img/march-2.webp" + >}} + +An [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview)-based, low-cost, contactless, do-it-yourself, infrared thermometer contributes to the fight against the spread of the novel coronavirus that has been haunting the world for the past three months. An Indian engineer, Abhijit Mukherjee, has come up with this [gadget](https://www.hackster.io/abhimuk18/diy-ir-contact-less-thermometer-an-iot-device-885c8f). + +[*Keep Reading*](https://www.espressif.com/en/news/ESP8266_Thermometer) + +## ESP8266-based Wearable Corona Distance Monitor + +{{< figure + default=true + src="img/march-3.webp" + >}} + +Indian engineer [Sahil Rastogi](https://www.hackster.io/sahilrastogi94) and his Delhi-based team, who call themselves [Random Stuff We Make!](https://www.hackster.io/rswm), have responded to the COVID-19 pandemic by creating a wearable distance-monitoring gadget that is based on Espressif’s [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview). + +[*Keep Reading*](https://www.espressif.com/en/news/wearable_distance_monitor) + +## Pandemic Development Monitors Based on ESP8266 + +{{< figure + default=true + src="img/march-4.webp" + >}} + +The rapid development of COVID-19 into a full-blown global pandemic has generated the need for regular updates regarding the status of this crisis. People want to be regularly informed about the number of infections, deaths and recoveries in their countries. The maker community has responded to this need by creating a number of monitors for this purpose. Here are a few based on [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview). + +[*Keep Reading*](https://www.espressif.com/en/news/pandemic_monitors) + +## ESPminecraft Lamp + +{{< figure + default=true + src="img/march-5.webp" + >}} + +In Italy, Gabriele Merlonghi, a maker and Espressif supporter, turned to the power of [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview) in order to fuel his creativity and uplift his young son’s spirits during the global pandemic! Here’s how he did this: + +[*Keep Reading*](https://www.espressif.com/en/news/ESPminecraft_Lamp) + +*Originally published at *[*https://mailchi.mp*](https://mailchi.mp/4fda3a972336/espressif-esp-news-march-2020?e=309e9b0452)*.* diff --git a/content/blog/march-2021/img/march-1.webp b/content/blog/march-2021/img/march-1.webp new file mode 100644 index 000000000..11c5f63cf Binary files /dev/null and b/content/blog/march-2021/img/march-1.webp differ diff --git a/content/blog/march-2021/img/march-2.webp b/content/blog/march-2021/img/march-2.webp new file mode 100644 index 000000000..e4c733d0b Binary files /dev/null and b/content/blog/march-2021/img/march-2.webp differ diff --git a/content/blog/march-2021/img/march-3.webp b/content/blog/march-2021/img/march-3.webp new file mode 100644 index 000000000..abfe40547 Binary files /dev/null and b/content/blog/march-2021/img/march-3.webp differ diff --git a/content/blog/march-2021/img/march-4.webp b/content/blog/march-2021/img/march-4.webp new file mode 100644 index 000000000..977ac8b9c Binary files /dev/null and b/content/blog/march-2021/img/march-4.webp differ diff --git a/content/blog/march-2021/img/march-5.webp b/content/blog/march-2021/img/march-5.webp new file mode 100644 index 000000000..a0f03f570 Binary files /dev/null and b/content/blog/march-2021/img/march-5.webp differ diff --git a/content/blog/march-2021/index.md b/content/blog/march-2021/index.md new file mode 100644 index 000000000..82ee304da --- /dev/null +++ b/content/blog/march-2021/index.md @@ -0,0 +1,67 @@ +--- +title: "March 2021" +date: 2021-04-06 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Newsletter + +--- +Hi everyone, + +Have you noticed the newest addition to our services? We are very excited about enriching our set of customer services with *free-of-charge* reviewing services for circuit diagrams and PCB designs of products powered by Espressif’s chips and modules. We have added this to our existing customer services, in order to ensure the technical accuracy of Espressif-powered products and their conformity to our high-quality standards. + +So, if you would like us to make sure that your self-designed, Espressif-based product achieves optimal performance, please provide us with its circuit schematic and PCB design for a technical review. Together with this, you should also [fill in and submit the relevant online form](https://www.espressif.com/en/contact-us/circuit-schematic-pcb-design-review). Then, our experienced team of engineers will carry out this review. Rest assured they will come up with suggestions specifically tailored to your product, while also paying particular attention to the confidentiality that this process entails. + +{{< figure + default=true + src="img/march-1.webp" + >}} + +Other topics you can read about in this month’s newsletter include: + +[__ESP32-C3-DevKitM-1 Available Soon__ ](https://www.espressif.com/en/news/ESP32-C3-DevKitM-1) + +{{< figure + default=true + src="img/march-2.webp" + >}} + +[ESP32-C3-DevKitM-1](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/hw-reference/esp32c3/user-guide-devkitm-1.html) is an entry-level development board based on [ESP32-C3-MINI-1](https://www.espressif.com/sites/default/files/documentation/esp32-c3-mini-1_datasheet_en.pdf), a module named like this because of its small size. This board provides a full range of Wi-Fi and Bluetooth LE functions. It is expected to hit the stores in the second half of April 2021. + +[__NebuLink NLC1242: An ESP32-Powered Data Acquisition System by SLS__ ](https://www.espressif.com/en/news/NebuLink) + +{{< figure + default=true + src="img/march-3.webp" + >}} + +NLC1242 is an [ESP32-based](https://www.espressif.com/en/products/modules/esp32) advanced data acquisition system designed to bridge the gap between end-user applications and sensors. Functioning both wirelessly and seamlessly, NLC1242 drives the exchange of data between sensors and the cloud. + +[__ESP32-Powered Heart Rate and Pulse Oximetry Monitoring with MAX30102__ ](https://www.espressif.com/en/news/ESP32_and_MAX30102) + +{{< figure + default=true + src="img/march-4.webp" + >}} + +Francesco Azzola, from a blog entitled "Surviving with Android", has just posted a really interesting tutorial which demonstrates the way in which we can use [ESP32](https://www.espressif.com/en/products/socs/esp32) to monitor someone’s heart rate and pulse oximetry. + +[__Fibonacci256: A Mesmerizing ESP8266-based Piece of Art__ ](https://www.espressif.com/en/news/Fibonacci256) + +{{< figure + default=true + src="img/march-5.webp" + >}} + +Jason Coon from the [Evil Genius Labs LLC](https://www.tindie.com/stores/jasoncoon/) has created several LED art pieces in a Fibonacci pattern. Jason’s latest work, Fibonacci256, is an [ESP8266-powered](https://www.espressif.com/en/products/socs/esp8266), 166mm disc, with 256 RGB LEDs that are surface-mounted in a flower-like Fibonacci layout. + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=c4a255994f&e=309e9b0452), [Twitter](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=65227f5ce9&e=309e9b0452), [GitHub](https://github.com/espressif), [Instagram](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=7a5d88fa55&e=309e9b0452), [LinkedIn](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=4a49c35eb3&e=309e9b0452), and [YouTube](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=60d3d0280a&e=309e9b0452). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto://newsletter@espressif.com)! We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer diff --git a/content/blog/march-2022/img/march-1.webp b/content/blog/march-2022/img/march-1.webp new file mode 100644 index 000000000..f8827d1be Binary files /dev/null and b/content/blog/march-2022/img/march-1.webp differ diff --git a/content/blog/march-2022/img/march-2.webp b/content/blog/march-2022/img/march-2.webp new file mode 100644 index 000000000..b93df2f0c Binary files /dev/null and b/content/blog/march-2022/img/march-2.webp differ diff --git a/content/blog/march-2022/img/march-3.webp b/content/blog/march-2022/img/march-3.webp new file mode 100644 index 000000000..e0ca5f111 Binary files /dev/null and b/content/blog/march-2022/img/march-3.webp differ diff --git a/content/blog/march-2022/img/march-4.webp b/content/blog/march-2022/img/march-4.webp new file mode 100644 index 000000000..c8fa5aacc Binary files /dev/null and b/content/blog/march-2022/img/march-4.webp differ diff --git a/content/blog/march-2022/index.md b/content/blog/march-2022/index.md new file mode 100644 index 000000000..2fee0d182 --- /dev/null +++ b/content/blog/march-2022/index.md @@ -0,0 +1,64 @@ +--- +title: "March 2022" +date: 2022-04-03 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Esp32 + - Newsletter + +--- +Hi everyone, + +Espressif is taking part in the [Smart Home Expo](https://www.smarthomeexpo.in/why-smart-home-expo.php) next month in Mumbai, India, which will take place at the Jio World Convention Centre, on 20–21 April 2022. The Smart Home Expo is India’s largest comprehensive trade show and conference that demonstrates the best smart-home technology from across the globe. With over 100+ brands, the exhibition is bound to be an action-packed event featuring the latest market trends, game-changing smart-home technology, live demos, new product launches, technical seminars, as well as exciting new opportunities. The Smart Home Expo in 2022 will also showcase automation technology for offices and hotels. + +{{< figure + default=true + src="img/march-1.webp" + >}} + +Espressif Systems’ participation in the Smart Home Expo will showcase our brand as a one-stop, AIoT solution-provider of not just innovative hardware evidenced by our various series of SoCs, but also of SDKs, Firmware, Cloud backend, phone apps, and voice integrations. The main products we want to highlight in this exhibition are [ESP32-C3](https://www.espressif.com/en/products/socs/esp32-c3) (our single-core Wi-Fi-and-Bluetooth 5 LE SoC based on the open-source RISC-V architecture), [ESP32-S3](https://www.espressif.com/en/products/socs/esp32-s3) (our dual-core XTensa LX7 MCU with AI capabilities), and [ESP RainMaker](https://rainmaker.espressif.com/) (our complete system for building AIoT products). + +More specifically, through our participation in the Smart World Expo we want to address customers who are aware of our ESP32 series of SoCs but use third-party Cloud services. We want these people to know more about ESP RainMaker, our own Cloud offering, and its many advantages including the use of customers’ own private cloud with a pay-as-you-grow economic plan, with easy adoption and deployment, best-in-class data security, voice-integration support, as well as full ownership and platform control. + +So, those of you who will be in Mumbai on 20–21 April 2022 do come to Espressif’s stall and say “hi” to our representatives there. They will be more than happy to explain all about our innovative AIoT solutions. + +Other topics you can read about in this month’s newsletter include: + +{{< figure + default=true + src="img/march-2.webp" + >}} + +[__Smarten Up Your Life with ESP32-S3-BOX!__ ](https://www.espressif.com/en/news/ESP32-S3-BOX_video) + +To address our customers’ diverse needs, [Espressif’s AI voice-development kit](https://www.espressif.com/en/news/ESP32-S3-BOX) now comes in two versions: ESP32-S3-BOX and ESP32-S3-BOX-Lite, a rather simplified variant of the former, but with three additional customizable function buttons. Furthermore, the latest version of [ESP-Skainet](https://www.espressif.com/en/solutions/audio-solutions/esp-skainet/overview) supports two new functions____ which can materialize a more efficient interactive experience tailored to users’ needs. + +{{< figure + default=true + src="img/march-3.webp" + >}} + +[__Ferrous Systems and Espressif’s Rust Training on ESP32__ ](https://www.espressif.com/en/news/ESP_RUST_training) + +To consolidate the rising popularity of Rust, Espressif and [Ferrous Systems](https://ferrous-systems.com/) are preparing a complete training program for developers using [ESP32](https://www.espressif.com/en/products/socs/esp32). This Rust [training](https://github.com/ferrous-systems/espressif-trainings) focuses on IoT applications in a way that is suitable for new and experienced embedded developers alike. + +{{< figure + default=true + src="img/march-4.webp" + >}} + +[__Render HTML and CSS on ESP32 Directly__ ](https://www.espressif.com/en/news/HTML_CSS_renderer) + +Did you know you can easily develop user interfaces on [ESP32](https://www.espressif.com/en/products/socs/esp32) by directly [rendering HTML and CSS on ESP32](https://hackaday.com/2022/03/18/render-html-and-css-on-an-esp32/)? Independent developer Andy Green has achieved just that! + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/matter-and-certificate-revocation/img/matter-1.webp b/content/blog/matter-and-certificate-revocation/img/matter-1.webp new file mode 100644 index 000000000..8b30e7a5d Binary files /dev/null and b/content/blog/matter-and-certificate-revocation/img/matter-1.webp differ diff --git a/content/blog/matter-and-certificate-revocation/img/matter-2.webp b/content/blog/matter-and-certificate-revocation/img/matter-2.webp new file mode 100644 index 000000000..704920761 Binary files /dev/null and b/content/blog/matter-and-certificate-revocation/img/matter-2.webp differ diff --git a/content/blog/matter-and-certificate-revocation/index.md b/content/blog/matter-and-certificate-revocation/index.md new file mode 100644 index 000000000..afabd0690 --- /dev/null +++ b/content/blog/matter-and-certificate-revocation/index.md @@ -0,0 +1,78 @@ +--- +title: "Matter and Certificate Revocation" +date: 2023-10-23 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - deepakumar-v-u +tags: + - Esp32 + - IoT + - Matter + +--- +[Espressif Matter Series](/matter-38ccf1d60bcd) #10 + +In the previous blogs, we discussed various aspects of Matter. One of which was the Matter Security Model. Matter’s Security Model is based on PKI infrastructure, a widely used security model for securing communications and establishing trust and identity in the digital world. (To know more about Matter’s Security Model you can read this [blog](/matter-security-model-37f806d3b0b2)). + +## Why is Revocation required? + +In Matter, every device has its own unique identity in the form of a DAC (Device Attestation Certificate), which is used to identify itself as a valid Matter device. What if this identity gets stolen, compromised, or is no longer valid? That’s where revocation comes into play. Certificate revocation helps us mark a certificate as revoked before its scheduled expiration. + +In the PKI world, there are various ways to maintain and circulate the status of the certificate. One such mechanism is the [CRL (Certificate Revocation List)](https://en.wikipedia.org/wiki/Certificate_revocation_list), which CSA has decided to go ahead with for managing revoked certificates in Matter. A CRL will maintain a list of certificates that have been revoked per Certificate Authority. And pointers to these CRLs are maintained in DCL. + +## Effect of certificate revocation + +When a certificate is revoked, all the certificate’s issued under it, including itself, will be revoked, i.e., if a PAI is revoked, then the PAI and all the DACs issued under it will stand revoked irrespective of their scheduled expiry. + +Matter will support the revocation of PAI and DACs via CRLs. + +{{< figure + default=true + src="img/matter-1.webp" + >}} + +## The User Experience + +Each device that is being commissioned will be checked for its revocation status during the commissioning stage. The commissioner may also carry out periodic checks to ensure the device’s revocation status if it has already been commissioned. + +Upon discovering the revoked status of the device, the commissioner can notify the user. It is then the user’s responsibility to make a conscious decision regarding whether to allow the device to operate with limited functionality or not. Ultimately, the problem can be resolved by the vendor, who has the ability to replace the device’s DAC. + +## The Trust + +Without revocation, counterfeiters may exploit compromised keys and certificates to create convincing imitations of genuine products. These unauthorised devices often employ low-quality components, compromising performance and security. Customers, lacking a means to distinguish between fake and real products, may unwittingly purchase counterfeits, thus leading to an increased presence of fake devices on the market and eroding trust. + +Effective revocation mechanisms can disable devices misusing compromised keys, ensuring customers receive only genuine, reliable products. This maintains trust in product authenticity and Matter as a whole. + +## Espressif’s Matter Pre-Provisioning Service + +Espressif’s [Matter Pre-Provisioning Service](/accelerating-matter-device-manufacturing-2fcce0a0592a) allows you to order modules from Espressif that are securely pre-programmed with the unique details (DAC) that every Matter device needs to have. To ensure trust and reliability, our solution will soon support PAI and DAC revocation too. + +--- + +Now that we understand how revocation can help every stakeholder in the Matter Ecosystem, let’s deep-dive into some technical details. + +## What is CRL? + +A CRL is a signed blob that has a list of certificates that are issued by the CA but are not to be trusted anymore. These CRLs are signed by the issuing certificate authority or by a dedicated CRL signer for that CA. In the case of DACs, it will be the PAI (Product Attestation Intermediate) that will be issuing the CRL. These CRLs will be further hosted by the CA vendors for easy access. + +Below is an example of what a CRL will have. + +{{< figure + default=true + src="img/matter-2.webp" + >}} + +In the above CRL, the certificate with serial number “*490B5C02EAF6285B60D5344076AA7204*” is revoked because of “*Key Compromise*”, where the serial number acts as a unique identifier for the certificate the CA issued. + +## DCL in Revocation + +With Matter being adopted widely, there are a large number of PAAs and PAIs, and that number has been growing continuously. And each of these CAs will have their own CRL published and maintained, respectively. Now the consumers of the CRL, i.e., commissioners, need a single source of truth to get the CRL of all the CAs, so that the commissioner can determine if the device is to be trusted or not. + +To construct this single source of truth, CSA has decided to go ahead with [DCL (Distributed Compliance Ledger)](/matter-distributed-compliance-ledger-dcl-4013c2376e7), where each CA will have URLs pointing to their CRL, and the onus is on the CA administrators to keep the CRL updated. To learn more about DCL, you can read this [blog](/matter-distributed-compliance-ledger-dcl-4013c2376e7). + +Given the large number of CRLs, commissioners are advised to maintain a revocation set that is constructed by combining all the available CRLs in the DCL so that the commissioners can easily identify the revocation status for a given certificate without the need to process all the CRLs in real time. This will ensure the smooth commissioning and functioning of the device. This revocation set can exist in the commissioner’s cloud or locally in the commissioner’s application. + +## Inclusion in Matter Specification + +The Certificate Revocation has been included in Matter Specification version 1.2 (released in Fall 2023), which mandates the CAs to publish and maintain the CRLs in DCL, effective September 1st, 2024. Given the benefits it brings to the table, this is a pivotal inclusion. diff --git a/content/blog/matter-bridge-for-non-matter-devices/img/matter-1.webp b/content/blog/matter-bridge-for-non-matter-devices/img/matter-1.webp new file mode 100644 index 000000000..2b011363d Binary files /dev/null and b/content/blog/matter-bridge-for-non-matter-devices/img/matter-1.webp differ diff --git a/content/blog/matter-bridge-for-non-matter-devices/img/matter-2.webp b/content/blog/matter-bridge-for-non-matter-devices/img/matter-2.webp new file mode 100644 index 000000000..f5371de7f Binary files /dev/null and b/content/blog/matter-bridge-for-non-matter-devices/img/matter-2.webp differ diff --git a/content/blog/matter-bridge-for-non-matter-devices/img/matter-3.webp b/content/blog/matter-bridge-for-non-matter-devices/img/matter-3.webp new file mode 100644 index 000000000..99f4e6f4b Binary files /dev/null and b/content/blog/matter-bridge-for-non-matter-devices/img/matter-3.webp differ diff --git a/content/blog/matter-bridge-for-non-matter-devices/img/matter-4.webp b/content/blog/matter-bridge-for-non-matter-devices/img/matter-4.webp new file mode 100644 index 000000000..edbc545fa Binary files /dev/null and b/content/blog/matter-bridge-for-non-matter-devices/img/matter-4.webp differ diff --git a/content/blog/matter-bridge-for-non-matter-devices/img/matter-5.webp b/content/blog/matter-bridge-for-non-matter-devices/img/matter-5.webp new file mode 100644 index 000000000..efb6b8045 Binary files /dev/null and b/content/blog/matter-bridge-for-non-matter-devices/img/matter-5.webp differ diff --git a/content/blog/matter-bridge-for-non-matter-devices/img/matter-6.webp b/content/blog/matter-bridge-for-non-matter-devices/img/matter-6.webp new file mode 100644 index 000000000..8b6dc323c Binary files /dev/null and b/content/blog/matter-bridge-for-non-matter-devices/img/matter-6.webp differ diff --git a/content/blog/matter-bridge-for-non-matter-devices/img/matter-7.webp b/content/blog/matter-bridge-for-non-matter-devices/img/matter-7.webp new file mode 100644 index 000000000..6c3b81a4e Binary files /dev/null and b/content/blog/matter-bridge-for-non-matter-devices/img/matter-7.webp differ diff --git a/content/blog/matter-bridge-for-non-matter-devices/index.md b/content/blog/matter-bridge-for-non-matter-devices/index.md new file mode 100644 index 000000000..610d6a75f --- /dev/null +++ b/content/blog/matter-bridge-for-non-matter-devices/index.md @@ -0,0 +1,103 @@ +--- +title: "Matter: Bridge for Non-Matter Devices" +date: 2021-12-14 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - shu-chen +tags: + - Matter + - Zigbee + - Espressif + - IoT + - Esp32 + +--- +[*Espressif Matter Series*](/matter-38ccf1d60bcd)* #4* + +Several big IoT ecosystems have announced integrated support for Matter, e.g., Amazon, Apple, Google and Samsung. It’s exciting to expect that more and more devices from multiple brands work natively together, under a bigger Matter ecosystem. + +Meanwhile, people may have a question: There are many IoT products in the consumers’ home already, these can be the devices based on Zigbee, Z-Wave, BLE Mesh and others. Could these non-Matter devices work together with Matter ecosystem? The answer is YES. + +Today, let’s talk about the Bridge feature in Matter. + +## Matter Bridge Introduction + +A Bridge serves to allow the use of non-Matter IoT devices in a Matter ecosystem (Matter Fabric). It enables the consumer to keep using these non-Matter devices together with their Matter devices. + +{{< figure + default=true + src="img/matter-1.webp" + >}} + +The non-Matter devices are exposed as Bridged Devices to Nodes in the Matter ecosystem. The Bridge device performs the translation between Matter and other protocols so that the Matter nodes can communicate with the Bridged Devices. + +Below is an example of Matter-Zigbee Bridge, it bridges two Zigbee lights to Matter ecosystem: + +{{< figure + default=true + src="img/matter-2.webp" + >}} + +## Bridge Data Model + +In the previous article [Matter: Clusters, Attributes, Commands](/matter-clusters-attributes-commands-82b8ec1640a0), we talked about the Matter Data Model, below is a Data Model example of a Matter Bridge device. + +{{< figure + default=true + src="img/matter-3.webp" + >}} + +- On Endpoint 0, the device type is defined as Bridge. The PartsList field lists all endpoints for bridged devices, each endpoint represents one device at the non-Matter side of the bridge. +- The Descriptor cluster on each endpoint provides information about the particular Bridged Device. + +A Bridge may also contain native Matter functionality, for example, it may itself be a smart Thermostat having both Wi-Fi and Zigbee connection. The Thermostat is native Matter functionality, it is capable of sending heating and/or cooling requirement notifications to a heating/cooling unit. While the other endpoints represent the Bridged Devices. + +{{< figure + default=true + src="img/matter-4.webp" + >}} + +Now, let’s look into the Matter-Zigbee Bridge example we mentioned in previous section. + +{{< figure + default=true + src="img/matter-5.webp" + >}} + +Here is the workflow to control a Zigbee device on the phone with Matter protocol: + +__Step-1.__ The Bridge, a device type defined in Matter, should follow the standard Matter commissioning process to join the Matter fabric. + +__Step-2.__ The Matter-Zigbee Bridge Device should also join the Zigbee network. A bit different from Matter, the Zigbee specification does not mandate any standard commissioning process, it’s left to the device vendors to decide the workflow for distributing the link keys. The Install Code is the most common method since Zigbee 3.0. + +__Step-3.__ Once the Bridge Device joins the Zigbee network, it will discover the supported devices in the Zigbee network by broadcasting the __Match Descriptor Request__ command. The command includes desired Profile, In-Clusters and Out-Clusters. In this example, it will ask something like “Who has an On/Off Light with OnOff Cluster? ”. The corresponding Zigbee devices will reply the __Match Descriptor Response__ with its network address included. For each matched Zigbee Light, the Bridge will add a dynamic endpoint, in Matter, which stands for the Bridged Zigbee Device. + +__Step-4.__ The Bridge exposes all the Bridged Devices to the Matter fabric, which follows the __Operational Discovery__ method as defined by Matter specification (*stay tuned for the coming series talking about Discovery in Matter*). + +__Step-5.__ Now the Controllers in the Matter fabric can control the lights in the Zigbee network with the help of Bridge. + +Some Notes: + +- Note 1: The interaction method in Step-2 and Step-3 is defined by device vendors and the protocol itself, which is out of Matter scope. +- Note 2: The Bridged Devices can be dynamic added or removed according to the keep alive mechanism in the non-Matter side network. + +This was a typical workflow for bridging to a Zigbee network. The similar concepts will be applicable to other networks that we would be bridging to. + +## Espressif Matter Bridge Solutions + +Espressif, as an active member that supports Matter from the beginning, can offer the full spectrum of Matter protocol solutions for end-products with Wi-Fi or Thread connectivity, as well as for Thread Border Router and Bridge solutions using a combination of SoCs. + +We offer both Matter-Zigbee and Matter-BLE Mesh bridge solutions with full functional software SDK support. A Matter-Zigbee Bridge uses two SoCs (Wi-Fi + 802.15.4), they are connected via a serial interface like UART or SPI, while a Matter-BLE Mesh Bridge can be done on single SoC with both Wi-Fi and BLE interfaces. + +{{< figure + default=true + src="img/matter-6.webp" + >}} + +{{< figure + default=true + src="img/matter-7.webp" + >}} + +If you are interested in our Matter Bridge solutions, please contact our [customer support team](https://www.espressif.com/en/contact-us/sales-questions). diff --git a/content/blog/matter-clusters-attributes-commands/img/matter-1.webp b/content/blog/matter-clusters-attributes-commands/img/matter-1.webp new file mode 100644 index 000000000..8e985a480 Binary files /dev/null and b/content/blog/matter-clusters-attributes-commands/img/matter-1.webp differ diff --git a/content/blog/matter-clusters-attributes-commands/img/matter-2.webp b/content/blog/matter-clusters-attributes-commands/img/matter-2.webp new file mode 100644 index 000000000..4d6566a80 Binary files /dev/null and b/content/blog/matter-clusters-attributes-commands/img/matter-2.webp differ diff --git a/content/blog/matter-clusters-attributes-commands/img/matter-3.webp b/content/blog/matter-clusters-attributes-commands/img/matter-3.webp new file mode 100644 index 000000000..0ad67f916 Binary files /dev/null and b/content/blog/matter-clusters-attributes-commands/img/matter-3.webp differ diff --git a/content/blog/matter-clusters-attributes-commands/img/matter-4.webp b/content/blog/matter-clusters-attributes-commands/img/matter-4.webp new file mode 100644 index 000000000..9313a1d01 Binary files /dev/null and b/content/blog/matter-clusters-attributes-commands/img/matter-4.webp differ diff --git a/content/blog/matter-clusters-attributes-commands/img/matter-5.webp b/content/blog/matter-clusters-attributes-commands/img/matter-5.webp new file mode 100644 index 000000000..20675c5e5 Binary files /dev/null and b/content/blog/matter-clusters-attributes-commands/img/matter-5.webp differ diff --git a/content/blog/matter-clusters-attributes-commands/index.md b/content/blog/matter-clusters-attributes-commands/index.md new file mode 100644 index 000000000..bff3b1521 --- /dev/null +++ b/content/blog/matter-clusters-attributes-commands/index.md @@ -0,0 +1,106 @@ +--- +title: "Matter: Clusters, Attributes, Commands" +date: 2021-11-30 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Esp32 + - Matter + - IoT + +--- +[*Espressif Matter Series*](/matter-38ccf1d60bcd)* #2* + +[This is article #2 in the [Espressif Matter Series](/matter-38ccf1d60bcd) of articles. You may read the first part [here](/what-does-matter-mean-to-you-fa3bb53a7793).] + +In the previous article we looked at [what does Matter mean to you](/what-does-matter-mean-to-you-fa3bb53a7793). Today, let’s talk about an important part of Matter, its data model. The data model of Matter defines the typical elements that go into making of a typical Matter *node*. As a device developer, you would typically express the capabilities of your device through this data model. + +{{< figure + default=true + src="img/matter-1.webp" + >}} + +For better understanding, let’s consider we are building a luminaire that has 2 lights: one dimmable, one simple on/off. + +## Elements of Matter + +The following diagram shows a simplistic view of how this can be represented in the Matter’s data model. + +{{< figure + default=true + src="img/matter-2.webp" + >}} + +__Node:__ In our case, the luminaire is a node. This is a uniquely network addressable entity that exposes some functionality. This is typically a physical device that a user can recognise as a whole device. + +__Endpoint:__ Each node has a number of endpoints. An endpoint could be thought of like a virtual device that provides services that could be logically grouped together. In our example above, our luminaire has 2 separate lights, one dimmable, one on-off. Each of these will have an endpoint of their own. + +Notice that endpoint 0 is reserved. This contains certain services that are applicable to the entire node. We will look at what this contains later in the section. + +The Matter specification defines certain common __Device Types__ . For example, the On/Off Light and Dimmable Light, that you see within endpoints 1 and 2 are standard device-types defined by Matter. A device type is used to indicate a set of commonly available functionality. + +__Clusters:__ A cluster groups together commonly used functionality in a reusable building block. + +In our diagram, our first light (endpoint 1), is shown with 2 standard clusters, On/Off cluster, and Level Control cluster. The On/Off cluster provides a service to switch on or off certain things. The Level Control cluster provides a service that enables configuring levels of certain things. In our case, the On/Off cluster helps switch on or off the light and the Level Control cluster helps configure the brightness of our light. + +If our light had supported controlling the colour, it would have another standard cluster called the Color Control cluster. + +Our second light (endpoint 2), is just an on/off light, hence it only includes the On/Off cluster. + +As you may notice from the diagram, clusters contain attributes and commands. + +__Attributes:__ Attributes indicate something that can be read or written to. In our example, the OnOff cluster has an OnOff attribute that maps to the actual state of the device. Similarly, in the Level Control cluster there is a Current Level attribute that maps to the current level that is set. + +Attributes may be persistent or volatile (lost across reboots), and also read-only or read-write. + +The Matter specification includes a list of data types that may be possible for attributes. These include the typical, boolean, integers (signed/unsigned), floats, enumerations, strings, or even collections (lists or structures). + +__Commands:__ A cluster command provides an ability to invoke a specific behaviour on the cluster. A command may have parameters that are associated with it. In our diagram above, the On/Off cluster has a *Toggle* command that toggles the current On/Off attribute of the cluster. The Level Control cluster has commands like *MoveToLevel, Move, Step*, that move the current level of the cluster in specified ways. + +These are the typical elements of the Matter data model. The Matter specification provides a list of standard clusters and their attributes and commands. You may peruse this to check how it aligns with the capabilities of your device. + +Now that we’ve looked at the common elements in Matter’s data model, let’s understand another concept Cluster servers and clients. + +## Cluster Servers and Clients + +Every Matter cluster has a Cluster Server, and a Cluster Client counterpart. In the diagram above, our device included Cluster Servers, as they provide the service. Interaction with these is done through Cluster Clients. + +The following diagram demonstrates this well: + +{{< figure + default=true + src="img/matter-3.webp" + >}} + +- Here a Matter Dimmer Switch implements OnOff and Level Control Cluster __clients__ . These clients talk to the corresponding __servers__ on the light, to control them. +- We also have a Matter Simple Switch, that only implements an OnOff Cluster client. +- Finally, a phone app that controls the same Light will also implement the relevant cluster __clients__ to control the light. +- Note here that the Dimmer Switch, Simple Switch, Light as well as the phone-app, are all Matter nodes. + +Let’s look at some other examples that drive the point home. + +{{< figure + default=true + src="img/matter-4.webp" + >}} + +{{< figure + default=true + src="img/matter-5.webp" + >}} + +## The Endpoint 0 + +Finally, earlier we talked about the endpoint 0, this is an endpoint with a “Root Node” device type. This is a special endpoint that has clusters that are specific to this entire Matter node. Some of the typical clusters that are part of this endpoint include: + +- __Basic Information Cluster Server__ : Provides basic information about the node, like firmware version, manufacturer etc +- __ACL Cluster Server__ : Allows configuration of the Access Control Lists for this node. +- __Network Commissioning Cluster Server__ : Allows configuration of a network (Wi-Fi, Ethernet, Thread) on the node. + +[Note that the Matter specification defines certain mandatory clusters that should be part of any endpoint. Similarly, every cluster may have certain mandatory attributes and commands as defined in the specification. For the sake of brevity, we have omitted listing all of them here.] + +This was a short overview of the commonly used elements of the Matter Data Model. Hope it helps you to envision how your device’s capabilities aligns with the Matter Data Model. + +This article is a part of a series of articles [*Espressif Matter Series*](/matter-38ccf1d60bcd). You may read the next article that talks about [Matter: Device-to-Device Automations](/matter-device-to-device-automations-bdbb32365350). diff --git a/content/blog/matter-device-to-device-automations/img/matter-1.webp b/content/blog/matter-device-to-device-automations/img/matter-1.webp new file mode 100644 index 000000000..d469dabb9 Binary files /dev/null and b/content/blog/matter-device-to-device-automations/img/matter-1.webp differ diff --git a/content/blog/matter-device-to-device-automations/img/matter-2.webp b/content/blog/matter-device-to-device-automations/img/matter-2.webp new file mode 100644 index 000000000..08ee98734 Binary files /dev/null and b/content/blog/matter-device-to-device-automations/img/matter-2.webp differ diff --git a/content/blog/matter-device-to-device-automations/img/matter-3.webp b/content/blog/matter-device-to-device-automations/img/matter-3.webp new file mode 100644 index 000000000..0c1bf1fdb Binary files /dev/null and b/content/blog/matter-device-to-device-automations/img/matter-3.webp differ diff --git a/content/blog/matter-device-to-device-automations/index.md b/content/blog/matter-device-to-device-automations/index.md new file mode 100644 index 000000000..189d268ef --- /dev/null +++ b/content/blog/matter-device-to-device-automations/index.md @@ -0,0 +1,59 @@ +--- +title: "Matter: Device-to-Device Automations" +date: 2021-12-07 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - hrishikesh-dhayagude +tags: + - IoT + - Esp32 + - Matter + +--- +[*Espressif Matter Series*](/matter-38ccf1d60bcd)* #3* + +[This is article #3 in the [Espressif Matter Series](/matter-38ccf1d60bcd) of articles. You may read the second part [here](/matter-clusters-attributes-commands-82b8ec1640a0).] + +In the previous article we looked at the data model of Matter. Today, let us talk about how Matter devices within a network can interact with each other leading to useful automations. For instance, you may want a light switch at your home to control one or more light bulbs. Or even a thermostat to turn on or off based on reports from the occupancy sensor. + +This is a very interesting usecase that is not easily possible through the existing ecosystem protocols. Matter easily enables this. This doesn’t require intermediation from any cloud or phone apps to make it happen. Instead, it is all facilitated directly over the local network. + +{{< figure + default=true + src="img/matter-1.webp" + >}} + +As mentioned in the data model article, every Matter cluster has a cluster server, and a cluster client counterpart. The communication happens between the client and server of the same cluster. As can be seen above, the OnOff cluster client on the switch can talk with the OnOff cluster server on the light to turn it on or off. And the end-user can configure which device can talk to which device(s) in their home. + +For this interaction to happen, the switch should know the details about the light. This is achieved through __device binding__ . A binding represents a persistent relationship that informs a client endpoint of one or more target endpoints for a potential interaction. A user (through the Matter phone app) can establish binding between devices, regardless of the vendors they are from. + +There are two ways through which device-to-device interaction can be accomplished: + +## 1. Synchronous Control + +Let’s go back to our example of the switch controlling the light that is shown above. For this, the switch additionally needs to have a Binding cluster server that offers the binding service. After a user binds the light to the switch, an action (on or off) on the switch results into corresponding action on the light. This scenario is illustrated below: + +{{< figure + default=true + src="img/matter-2.webp" + >}} + +Similarly, a Dimmer Switch needs to have an OnOff client, a Level Control client and a Binding server to control a dimmable light. + +## 2. Asynchronous Notification (Subscribe-Report) + +This method facilitates receiving data reports from a publisher to a subscriber. The subscriber can __subscribe to attributes and/or events__ on the publisher. + +The thermostat and occupancy sensor usecase mentioned above can be realised after the thermostat __subscribes to attributes__ of the sensor. First the user binds the thermostat to the occupancy sensor. Once done, the thermostat can subscribe to the sensor attributes and receive data periodically as well as when there is an activity (change in sensor attributes). This scenario is illustrated below: + +{{< figure + default=true + src="img/matter-3.webp" + >}} + +This was an example of subscribing to attributes. Devices could also __subscribe to events__ . In the data model article, we talked about clusters having attributes and commands. Here, we introduce events which are also a part of clusters. Events capture every single change and convey it to the subscribed entity. A few examples of events include switch pressed, long press, and door opened. + +This sums up the introduction to device-to-device communication in Matter along with the different ways in which it can be implemented. + +This article is a part of a series of articles [*Espressif Matter Series*](/matter-38ccf1d60bcd). You may read the next article that talks about [Matter: Bridge to non-Matter Devices](/matter-bridge-for-non-matter-devices-d3b7f003a004). diff --git a/content/blog/matter-distributed-compliance-ledger-dcl/index.md b/content/blog/matter-distributed-compliance-ledger-dcl/index.md new file mode 100644 index 000000000..c83005bb0 --- /dev/null +++ b/content/blog/matter-distributed-compliance-ledger-dcl/index.md @@ -0,0 +1,83 @@ +--- +title: "Matter: Distributed Compliance Ledger (DCL)" +date: 2022-03-24 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - shu-chen +tags: + - Matter + - Espressif + - IoT + - ESP32 +--- +[Espressif Matter Series](/matter-38ccf1d60bcd) #8 + +As Matter promised, Device Manufacturers (Vendors) don’t have to build their own Phone APP or Cloud service if they don’t want to. A Matter device will be able to work with all Matter enabled ecosystems seamlessly. + +But how could the Matter device’s information be published, so that it can be retrieved by Matter ecosystems, in a secure manner? Today, we will talk about the __Distributed Compliance Ledger__ (DCL) in Matter. + +## What is DCL? + +The Matter DCL is a cryptographically secure, distributed storage network based on blockchain technology. It allows Connectivity Standards Alliance (CSA) and authorized Vendors to publish information about their Matter devices. This information can then be retrieved using DCL clients. + +__What kind of information will be stored in DCL?__ + +The device information is divided into five databases (it’s called schemas in DCL): + +- __Vendor Schema:__ Provide general information about a Vendor such as the Company legal name, Preferred brand name associated with the VendorID, the Landing page URL for the vendor, etc. +- __DeviceModel Schema:__ Provide general information about a device, such as ProductName, Product ID, PartNumber, Commissioning info, etc. This information is shared across all software versions of the product. +- __DeviceSoftwareVersionModel Scheme:__ Provide software version specific information. e.g Release Notes URL, FirmwareDigests, OTA Software Image URL, etc. + +> Note: Only the URL is stored in DCL, so vendors need to store the OTA images in their own location and only publish the image URL to DCL. + +- __Compliance Test Result Schema:__ Provide compliance and test result data about the device. +- __PAA Schema:__ Provide a list of Product Attestation Authorities Certificates for the approved PAAs (learn more from [Matter security model](/matter-security-model-37f806d3b0b2)). + +__How will this information be used by Matter ecosystems?__ + +With all this device information stored in DCL, Matter ecosystems may consult the DCL for: + +- checking device certification compliance status +- verifying Device Attestation Certificate (DAC) (by tracing back to it’s PAA) +- getting commissioning instructions, links to manuals, and product information +- checking OTA status and upgrade the device to latest firmware +- …… + +## How DCL Works? + +The DCL is a network of independent servers, which are owned and hosted by CSA and its members. Each server holds a copy of the database containing the information about Matter devices, and they communicate with each other using cryptographically secure protocol. + +Does every Vendor have to setup its __own__ DCL server? No. + +CSA provides DCL server setup, which allows public access to DCL information using DCL client, it also allows members with write access to publish their Matter devices’ information to DCL. + +Vendors could also setup dedicated DCL server. The Vendor’s setup will be available to this Vendor’s clients only. A Vendor MAY choose to grant its DCL server access to others. + +__Write access to DCL is restricted__ + +- Vendors can add new device models that belong to the VendorID that is associated with the public key of that vendor (either via CSA’s DCL server or its own DCL server). VendorID is associated to the vendor public key during vendor account creation process. +- Vendors can update a subset of existing device model information, such as product name, product description, firmware and hardware info. Updates are only allowed if the device is associated with the same vendor account. +- CSA Certification Center can write or revoke the Compliance status of a device model to the Ledger. + +__Read access from DCL is public__ + +- Read DeviceModel info, including firmware and hardware versions from the DCL. +- Read the Device compliance state from the DCL. +- Read the Product Attestation Authorities certificates. + +## Typical Workflow + +Let’s go through an example, say there are following roles: + +- Connectivity Standards Alliance (CSA) +- Vendor A +- Bulb B (made by A) +- Test House T +- Ecosystem G +- Ecosystem H +- Consumer C + +The typical workflow looks like: + +Consumer C enjoys all these seamlessly. diff --git a/content/blog/matter-improvements-to-espressif-dac-provisioning-service/img/matter-1.webp b/content/blog/matter-improvements-to-espressif-dac-provisioning-service/img/matter-1.webp new file mode 100644 index 000000000..c4ef2b160 Binary files /dev/null and b/content/blog/matter-improvements-to-espressif-dac-provisioning-service/img/matter-1.webp differ diff --git a/content/blog/matter-improvements-to-espressif-dac-provisioning-service/img/matter-2.webp b/content/blog/matter-improvements-to-espressif-dac-provisioning-service/img/matter-2.webp new file mode 100644 index 000000000..14fa16568 Binary files /dev/null and b/content/blog/matter-improvements-to-espressif-dac-provisioning-service/img/matter-2.webp differ diff --git a/content/blog/matter-improvements-to-espressif-dac-provisioning-service/index.md b/content/blog/matter-improvements-to-espressif-dac-provisioning-service/index.md new file mode 100644 index 000000000..79a9db9de --- /dev/null +++ b/content/blog/matter-improvements-to-espressif-dac-provisioning-service/index.md @@ -0,0 +1,52 @@ +--- +title: "Matter: Improvements to Espressif DAC Provisioning Service" +date: 2024-10-01 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Esp32 + - IoT + - Matter +--- +[Espressif’s Secure Manufacturing Service](https://blog.espressif.com/accelerating-matter-device-manufacturing-2fcce0a0592a), which was launched last year, has assisted many customers in simplifying their manufacturing. Since a year from launch, we worked with hundreds of customers and served millions of modules that were manufactured with this service. + +This service lets customers order modules from Espressif such that they are pre-programmed with all the Matter-specific security configurations, firmware, and other device-unique credentials and certificates that should be flashed on the modules. This saves organizations hassle and time from building their own manufacturing scripts and back-and-forth with factory lines. + +Initially, we had been running a VID-scoped PAA (Product Attestation Authority). Now, Espressif is an approved signing authority for a [Non-VID scoped PAA](https://csa-iot.org/certification/paa/#:~:text=trust%40dreamsecurity.com-,Espressif%20Systems) (Product Attestation Authority) also called as Open PAA. + +## What does being a non-VID scoped PAA mean? + +Effectively, we can now support workflows that we previously were not able to support, viz: +- Secure Matter Manufacturing in your Factory (Matter DACs and device-unique data) +- Upgrading in-field devices to support Matter by generating and delivering DACs securely + +## Matter Manufacturing in your Factory + +We announced support for [Accelerated Matter Manufacturing](https://blog.espressif.com/accelerating-matter-device-manufacturing-2fcce0a0592a) last year. This allowed organizations to accelerate the manufacturing of their Matter devices, by allowing Espressif to pre-program the Device Attestation certificates (DACs), the firmware, and security configurations on modules before being shipped out. + +One request we kept getting was a provision to perform this manufacturing in the customer’s factory of choice. This is now possible with our latest update. We are currently working with select customers to enable their factories to perform Matter manufacturing by themselves. If you are interested in this, please [reach out to us](mailto:matter-pki@espressif.com) for the next steps. + +The most important part of this is having the ability to securely deliver cryptographically signed Device Attestation Certificates (DACs) to the modules without their private key ever leaving the module. + +The typical workflow is shown in the following diagram. + +{{< figure + default=true + src="img/matter-1.webp" + >}} + +## Upgrading In-field Devices to Matter + +We also support delivering of DACs to in-field devices, that wish to now incorporate Matter support. For this scenario, it is essential that the in-field devices have a mutually authenticated secure connection to some device cloud platform. The cloud platform is expected to act as the trust broker for the in-field devices. The secure DAC delivery in this case happens as shown in the following diagram. + +{{< figure + default=true + src="img/matter-2.webp" + >}} + + +If you are working on building Matter products, please [reach out to us](mailto:matter-pki@espressif.com) to check how this aligns with your product deployment workflow. + + diff --git a/content/blog/matter-multi-admin-identifiers-and-fabrics/img/matter-1.webp b/content/blog/matter-multi-admin-identifiers-and-fabrics/img/matter-1.webp new file mode 100644 index 000000000..255a9a4fb Binary files /dev/null and b/content/blog/matter-multi-admin-identifiers-and-fabrics/img/matter-1.webp differ diff --git a/content/blog/matter-multi-admin-identifiers-and-fabrics/img/matter-2.webp b/content/blog/matter-multi-admin-identifiers-and-fabrics/img/matter-2.webp new file mode 100644 index 000000000..1a4056a62 Binary files /dev/null and b/content/blog/matter-multi-admin-identifiers-and-fabrics/img/matter-2.webp differ diff --git a/content/blog/matter-multi-admin-identifiers-and-fabrics/img/matter-3.webp b/content/blog/matter-multi-admin-identifiers-and-fabrics/img/matter-3.webp new file mode 100644 index 000000000..ad423d79c Binary files /dev/null and b/content/blog/matter-multi-admin-identifiers-and-fabrics/img/matter-3.webp differ diff --git a/content/blog/matter-multi-admin-identifiers-and-fabrics/index.md b/content/blog/matter-multi-admin-identifiers-and-fabrics/index.md new file mode 100644 index 000000000..5fbbba18c --- /dev/null +++ b/content/blog/matter-multi-admin-identifiers-and-fabrics/index.md @@ -0,0 +1,85 @@ +--- +title: "Matter: Multi-Admin, Identifiers, and Fabrics" +date: 2022-01-18 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - IoT + - Esp32 + - Matter + +--- +[*Espressif Matter Series*](/matter-38ccf1d60bcd)* #6* + +[This is article #6 in the [Espressif Matter Series](/matter-38ccf1d60bcd) of articles. You may read the first part [here](/what-does-matter-mean-to-you-fa3bb53a7793).] + +In the previous articles we talked about Matter devices communicating with each other by themselves, or Matter devices participating in multiple ecosystems *simultaneously.* + +{{< figure + default=true + src="img/matter-1.webp" + >}} + +As you can see in the image here, this lightbulb is part of 2 distinct ecosystems, green and red. Each of these ecosystems don’t know about the other, and they are powered by 2 separate organisations (Org1 and Org2). + +This feature, called multi-admin, is a much desirable feature of the smart-home. This is particularly desirable because people in the same family/home may be comfortable with their own ecosystems of choice, and would love the same device be part of all of these. + +The question is how do these devices identify and authenticate themselves to each other, and who controls this configuration? This is the topic of today’s article. + +## Operational Credentials + +Matter uses PKI to facilitate identity. + +Every node in a Matter network has a __Node Operational Certificate (NOC)__ . This X.509 certificate encodes a unique identifier (Node Operational Identifier) that is used to identify this node on the network. + +{{< figure + default=true + src="img/matter-2.webp" + >}} + +When a Matter node is part of multiple ecosystems, it has multiple of these Node Operational Certificates (one for each ecosystem it supports). As you may notice in the diagram below, the lightbulb, has two NOCs and hence has 2 Node Identifiers, *xyz* for the green ecosystem and *PQR* for the red ecosystem. + +The NOC and the node identifier are valid within the scope of that particular ecosystem which it is a part of. In Matter terminology, this is called a __Matter Fabric__ . Thus in the above diagram the lightbulb is part of 2 Matter fabrics, and it has a node id *xyz *in Matter fabric green, and node id *PQR *in Matter fabric red. + +A Matter node’s resources (CPU/RAM) may decide how many simultaneous Fabrics can it support. + +Every Fabric will also have a __Root CA Certificate__ associated with it. This CA certificate is used to validate the identities of other nodes (validate other’s NOCs) in the Fabric. For example, the green Fabric’s Root CA Certificate is what the lightbulb will use to validate that a request is really coming from the node id *abc *on the green fabric. + +## Commissioning + +Now who does the configuration of the Fabric, the NOC and the Root CA Certificates on a Matter node? + +Every Matter node begins its participation in a Matter network after it is __commissioned__ (the initial configuration of the device) by a __commissioner__ (say a phone app that configures the device). + +{{< figure + default=true + src="img/matter-3.webp" + >}} + +During the process of commissioning, the commissioner will provide the node with the Node Operational Certificate (NOC) and the Trusted Root CA Certificate. This is when we say that the bulb has joined the Matter Fabric green (technically Matter Fabrics have a 64-bit identifier, we are just using *green* for convenience here). + +## The Second Matter Fabric + +How does the device then join the second Matter Fabric? + +If you are the admin of a Matter device, you could ask the device to open up its commissioning window again, after it has been commissioned. This allows other ecosystems to commission the Matter node and make it part of their own Matter Fabric. + +## Access Control List + +Once any node can verify identities on the network, the other step is Access Control. Every Matter node has an Access Control List which specifies who (which NOC) can do what (read/write/invoke on endpoint x, cluster y) on this Matter node. + +When a Matter phone app controls a Matter lightbulb, + +- the lightbulb will have a set of permissions defined through ACLs +- when an action is executed on the lightbulb, the lightbulb will first verify the identity of the phone app using the phone app’s NOC and the Trusted Root CA that was installed on the bulb +- the lightbulb will then check the ACLs to ensure that this Node Identifier (the phone app) is allowed to perform the specific action + +## Matter Ecosystems + +As highlighted above, Matter ecosystems allow you to create and distribute Node Operational Certificates to devices and thus build a Matter Fabric of participating devices. You may build additional innovative features on top of these. + +These features could be allowing remote control of these devices, controlling these devices through your own display controller, or say, a voice controller. + +Espressif is working on creating a solution for Matter ecosystems that you can deploy as *your own* Matter ecosystem. This solution will incorporate all the building blocks that will be required to build such an ecosystem, with hooks provided to extend it further to add any innovative features that you have in mind. Please reach out through our sales channels for more information on the same. diff --git a/content/blog/matter-security-model/img/matter-1.webp b/content/blog/matter-security-model/img/matter-1.webp new file mode 100644 index 000000000..f7e811388 Binary files /dev/null and b/content/blog/matter-security-model/img/matter-1.webp differ diff --git a/content/blog/matter-security-model/img/matter-2.webp b/content/blog/matter-security-model/img/matter-2.webp new file mode 100644 index 000000000..892663c04 Binary files /dev/null and b/content/blog/matter-security-model/img/matter-2.webp differ diff --git a/content/blog/matter-security-model/img/matter-3.webp b/content/blog/matter-security-model/img/matter-3.webp new file mode 100644 index 000000000..552f600e3 Binary files /dev/null and b/content/blog/matter-security-model/img/matter-3.webp differ diff --git a/content/blog/matter-security-model/img/matter-4.webp b/content/blog/matter-security-model/img/matter-4.webp new file mode 100644 index 000000000..22359d453 Binary files /dev/null and b/content/blog/matter-security-model/img/matter-4.webp differ diff --git a/content/blog/matter-security-model/index.md b/content/blog/matter-security-model/index.md new file mode 100644 index 000000000..f39d4cab1 --- /dev/null +++ b/content/blog/matter-security-model/index.md @@ -0,0 +1,91 @@ +--- +title: "Matter Security Model" +date: 2022-02-24 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - guo-jiacheng +tags: + - Matter + - Esp32 + - IoT + +--- +[Espressif Matter Series](/matter-38ccf1d60bcd) #7 + +Matter is a protocol designed with security and privacy in mind. Cryptography is widely adopted in Matter to ensure: + +- Trusted devices +- Trusted controllers +- Private communication + +In this post we will go through the Matter security model and investigate how these targets are accomplished in Matter. + +## Introduction to Public Key Infrastructure + +The Matter security model is based on [Public Key Infrastructure](https://en.wikipedia.org/wiki/Public_key_infrastructure)(PKI), a cryptographic mechanism widely adopted in the Internet. When you visit a website via https, the connection is secured by the site’s certificate. + +Here is the certificate chain of [www.espressif.com](http://www.espressif.com): + +{{< figure + default=true + src="img/matter-1.webp" + >}} + +The certificate chain is hierarchical structure. Each certificate in the chain is signed by its issuer, tracing back to the root certificate. A site will be trusted if its certificate can trace back to one of the trusted root certificates stored in the browser. + +The PKI works together with session establishment protocols to achieve some key cryptograpic goals: + +- __Identification__ : The peer’s identification will be verified by the signature of its issuer. +- __Data privacy & integrity__ : All communication will be encrypted by a unique key independently negotiated for each session. + +In the following part of the aritcle, we’ll see how Matter facilites the PKI to achieve different security goals and how certificates are distributed among your apps and devices. + +## Certificates in Matter + +## Device Attestation Certificate: Is the device what it claims to be? + +All matter devices will be shipped with a unique __Device Attestation Certificate__ (DAC). This certificate guards you against fakes: You can say with confidence the device comes from the brand on its box. This device identity authentication comes from the certificate chain of the DAC. + +The DAC is signed by the __Product Attestation Intermediate__ (PAI) certificate. This certificate will be typically held by the device manufacturers. The PAI certificate in turn is signed by the __Product Attestation Authority__ (PAA) certificate. This PAA certificate acts as the root CA and provides root of trust. The list of trusted PAA certificates are stored in the __Distributed Compliance Ledger__ (DCL), a distributed storage provided by the Connectivity Standard Alliance. We’ll have an in-depth article about DCL in the following posts. + +The DAC and the PAI is burnt to the persistent storage of the device during manufacturing. During the commissioning process, the controller will retrieve them and verify the certificates as well as the Vendor/Product information shipped with the certification. Such verification step guarantees that all commissioned Matter devices are trusted. + +{{< figure + default=true + src="img/matter-2.webp" + >}} + +## Node Operational Credentials: Who do I talk to? + +Public key certificates are also used to authenticate the peer and ensure data privacy and integrity in the Matter protocol. The key used in this scenario is the __Node Operational Crendential__ (NOC). + +The NOC can be signed by an __Intermediate Certificate Authority__ (ICA) or be directly signed by the __Root Certificate Authority__ (RCA). The RCA is typically generated by the commissioner. During the commissioning process, the NOC and the RCA are installed to the device. + +{{< figure + default=true + src="img/matter-3.webp" + >}} + +When the app or another device connects to the device, the certificate information will be exchanged. The devices will trust each other if they share the same root certificate. Devices with same root certficate thus form a Matter [__fabric__ ](/matter-multi-admin-identifiers-and-fabrics-a291371af365). After the certificate information exchange, an encrypted session will be established between the peers. + +## Bringing it all together: Commissioning + +The device commissioning process configures an out-of-box device. It authenticates the device, sets up the network and installs the NOC to the device storage. + +Once the device is powered, it will advertise itself via BLE advertisement or DNS-sd service advertisement. When the controller receives the advertisement, it will try to establish an encrypted session with the device based on the pairing code. This process is called __Password Authenticated Session Establishment__ (PASE) in Matter. Typically the app will scan a QR code to retrieve the unique pairing code of the device, in the PASE process. + +After setting up the PASE session, the controller will check the DAC of the device. Once the device attestation certificate is authenticated, a new NOC will be signed and installed to the device. The controller will also tell the device about the Wi-Fi or the Thread network to join. Once the device has been correctly configured, the PASE session will be closed. All the following communications will be based on the certificate. The new session is called __Certificate Authenticated Session Establishment__ (CASE) in Matter. + +In a CASE session, the peers exchange their certificate information with salts to authenticate each other and negotiate a credential for symmetric encryption. All the control commands are protocted with this negotiated key. + +The following diagram contains a typical flow for pairing a Matter device out-of-the-box. + +{{< figure + default=true + src="img/matter-4.webp" + >}} + +That summarises how PKI forms an integral part of the Matter specification. + +This article is a part of a series of articles [*Espressif Matter Series*](/matter-38ccf1d60bcd). diff --git a/content/blog/matter-thread-border-router-in-matter/img/matter-1.webp b/content/blog/matter-thread-border-router-in-matter/img/matter-1.webp new file mode 100644 index 000000000..07e93e600 Binary files /dev/null and b/content/blog/matter-thread-border-router-in-matter/img/matter-1.webp differ diff --git a/content/blog/matter-thread-border-router-in-matter/img/matter-2.webp b/content/blog/matter-thread-border-router-in-matter/img/matter-2.webp new file mode 100644 index 000000000..349725836 Binary files /dev/null and b/content/blog/matter-thread-border-router-in-matter/img/matter-2.webp differ diff --git a/content/blog/matter-thread-border-router-in-matter/img/matter-3.webp b/content/blog/matter-thread-border-router-in-matter/img/matter-3.webp new file mode 100644 index 000000000..4229124af Binary files /dev/null and b/content/blog/matter-thread-border-router-in-matter/img/matter-3.webp differ diff --git a/content/blog/matter-thread-border-router-in-matter/img/matter-4.webp b/content/blog/matter-thread-border-router-in-matter/img/matter-4.webp new file mode 100644 index 000000000..7e8d2eb6b Binary files /dev/null and b/content/blog/matter-thread-border-router-in-matter/img/matter-4.webp differ diff --git a/content/blog/matter-thread-border-router-in-matter/img/matter-5.webp b/content/blog/matter-thread-border-router-in-matter/img/matter-5.webp new file mode 100644 index 000000000..2b003e91a Binary files /dev/null and b/content/blog/matter-thread-border-router-in-matter/img/matter-5.webp differ diff --git a/content/blog/matter-thread-border-router-in-matter/index.md b/content/blog/matter-thread-border-router-in-matter/index.md new file mode 100644 index 000000000..ad6807c34 --- /dev/null +++ b/content/blog/matter-thread-border-router-in-matter/index.md @@ -0,0 +1,89 @@ +--- +title: "Matter: Thread Border Router in Matter" +date: 2022-01-04 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - shu-chen +tags: + - Espressif + - Matter + - Thread + - Esp32 + - IoT + +--- +[*Espressif Matter Series*](/matter-38ccf1d60bcd)* #5* + +In the [Previous Articles](/matter-38ccf1d60bcd), we talked about Matter from several aspects. Today, let’s start with a foundational concept of Matter: __IP-based__ . + +Matter defines a common application layer, using __Internet Protocol (IP)__ , that delivers interoperability among devices regardless of the underlying network protocol. At launch, Matter will run on Ethernet, Wi-Fi and Thread. + +{{< figure + default=true + src="img/matter-1.webp" + >}} + +Ethernet and Wi-Fi are all well known networking protocols, while Thread may be new to some people. + +In a nutshell, [Thread](https://www.threadgroup.org/) is an __IPv6-based__ , __low-power, mesh__ networking protocol for Internet of things (IoT) products. It is built on IEEE-802.15.4 technology, so the Thread devices cannot communicate with the Wi-Fi or Ethernet devices directly. In the Matter topology, a special device is required to connect the sub-networks, the device is called the __Thread Border Router__ (Thread BR will be used for short). + +Below is a typical Matter topology: + +{{< figure + default=true + src="img/matter-2.webp" + >}} + +The [Device-to-Device Automations](/matter-device-to-device-automations-bdbb32365350) within local network is a key feature of Matter, it works across Ethernet, Wi-Fi and Thread devices. For instance, a *Thread* Matter switch can directly control a *Wi-Fi* Matter bulb, or the other way around, without any phone-apps/cloud in the middle. + +Now, let’s take a look at the Thread BR that connects Wi-Fi and Thread as an example, and investigate how it supports the (a) bi-directional connectivity and (b) service discovery used in Matter. + +__Bidirectional Connectivity__ + +Thread BR is responsible for forwarding IP frames between Wi-Fi and Thread networks. Different from the Gateway/Bridge devices which need to handle the *application-level* interaction, Thread BR only focuses on the *IP layer* routing, regardless of the application payload. + +There are three scopes in a Thread network for unicast addressing: + +- Link-Local: used only for one-hop communication +- Mesh-Local: used for communication within the local Thread Network +- Global: used for communication with the hosts outside the local Thread Network + +Thread BR configures its Thread partition with an Off-Mesh Routable (OMR) prefix, each Thread device adds an OMR address as the Global unicast address. Thread BR announces reachability of this OMR Prefix to Wi-Fi network by sending Router Advertisement (RA) which contains an IPv6 Route Information Option (RIO). + +Vice versa, Thread BR should also inform Thread devices about the routing to Wi-Fi network. Rather than using the IPv6 Neighbor Discovery protocol, prefixes are advertised via Thread Network Data as external route entries. + +{{< figure + default=true + src="img/matter-3.webp" + >}} + +Then both devices in Thread and Wi-Fi networks know about the particular IPv6 prefixes reachable via the Thread BR. + +__Service Discovery__ + +In Matter, the Standard DNS-Based Service Discovery (DNS-SD) is used for Service Advertising and Discovery. On Wi-Fi and Ethernet networks, the DNS-SD uses Multicast DNS for zero-configuration operation. + +But multicast and broadcast are inefficient on wireless mesh networks like Thread. Service Registry Protocol (SRP) is introduced in Thread for service discovery over unicast packets. + +{{< figure + default=true + src="img/matter-4.webp" + >}} + +Normally, Thread BR acts as the SRP server and the Advertising Proxy: Thread devices register their services to Thread BR, and the BR will advertise all the services via Multicast DNS to Wi-Fi network. + +The Thread Border Router also implements DNS-SD Discovery Proxy, to enable clients on the Thread network to discover services from Wi-Fi network. + +__Espressif Thread Border Router Solution__ + +Espressif, as an active member that supports Matter from the beginning, we can offer the full spectrum of Matter protocol solutions for end-products with Wi-Fi or Thread connectivity, as well as for Thread Border Router and Bridge solutions using a combination of SoCs. + +The Thread Border Router SDK is now available from the link: [Thread Border Router Example and SDK](https://github.com/espressif/esp-idf/tree/master/examples/openthread/ot_br). It uses two SoCs (Wi-Fi + 802.15.4) connected via a serial interface like UART or SPI. + +{{< figure + default=true + src="img/matter-5.webp" + >}} + +If you are interested in our Thread Border Router solution, please contact our [customer support team](https://www.espressif.com/en/contact-us/sales-questions). diff --git a/content/blog/matter/img/matter-1.webp b/content/blog/matter/img/matter-1.webp new file mode 100644 index 000000000..aeed0c840 Binary files /dev/null and b/content/blog/matter/img/matter-1.webp differ diff --git a/content/blog/matter/index.md b/content/blog/matter/index.md new file mode 100644 index 000000000..2b6924263 --- /dev/null +++ b/content/blog/matter/index.md @@ -0,0 +1,46 @@ +--- +title: "Matter" +date: 2021-11-30 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Matter + - IoT + +--- +{{< figure + default=true + src="img/matter-1.webp" + >}} + +Matter is an initiative of the [Connectivity Standards Alliance](http://csa-iot.org/), and developed through collaboration amongst all the leaders of the IoT industry. + +## Articles + +The following articles talk about Matter + +- [Announcing Matter](/announcing-matter-previously-chip-on-esp32-84164316c0e3) +- Espressif Matter Series #1: [What does Matter mean to you?](/what-does-matter-mean-to-you-fa3bb53a7793) +- Espressif Matter Series #2: [Matter: Clusters, Attributes, Commands](/matter-clusters-attributes-commands-82b8ec1640a0) +- Espressif Matter Series #3: [Matter: Device-to-Device Automations](/matter-device-to-device-automations-bdbb32365350) +- Espressif Matter Series #4: [Matter: Bridge for non-Matter Devices](/matter-bridge-for-non-matter-devices-d3b7f003a004) +- Espressif Matter Series #5: [Matter: Thread Border Router](/matter-thread-border-router-in-matter-240838dc4779) +- Espressif Matter Series #6: [Matter: Multi-Admin, Identifiers, and Fabrics](/matter-multi-admin-identifiers-and-fabrics-a291371af365) +- Espressif Matter Series #7: [Matter Security Model](/matter-security-model-37f806d3b0b2) +- Espressif Matter Series #8: [Matter: Distributed Compliance Ledger](/matter-distributed-compliance-ledger-dcl-4013c2376e7) +- Espressif Matter Series #9: [Accelerating Matter Device Manufacturing](/accelerating-matter-device-manufacturing-2fcce0a0592a) +- Espressif Matter Series #10: [Matter and Certificate Revocation](/matter-and-certificate-revocation-e8d5d29fef94) + +## Espressif’s Matter Demos + +The following is a demonstration of the various Matter device classes that are supported by Espressif. This also demonstrates the device binding features of Matter. + +{{< youtube Jr4Lut_NgqA >}} + +## Espressif’s Matter Solutions + +Look at the various ways Espressif helps you build and deploy Matter devices. + +{{< youtube qFVqWdmFRs0 >}} diff --git a/content/blog/may-2018/img/may-1.webp b/content/blog/may-2018/img/may-1.webp new file mode 100644 index 000000000..05a422730 Binary files /dev/null and b/content/blog/may-2018/img/may-1.webp differ diff --git a/content/blog/may-2018/img/may-2.webp b/content/blog/may-2018/img/may-2.webp new file mode 100644 index 000000000..7b7a016b3 Binary files /dev/null and b/content/blog/may-2018/img/may-2.webp differ diff --git a/content/blog/may-2018/img/may-3.webp b/content/blog/may-2018/img/may-3.webp new file mode 100644 index 000000000..ddb7120e7 Binary files /dev/null and b/content/blog/may-2018/img/may-3.webp differ diff --git a/content/blog/may-2018/img/may-4.webp b/content/blog/may-2018/img/may-4.webp new file mode 100644 index 000000000..2d80b35e3 Binary files /dev/null and b/content/blog/may-2018/img/may-4.webp differ diff --git a/content/blog/may-2018/img/may-5.webp b/content/blog/may-2018/img/may-5.webp new file mode 100644 index 000000000..c8fa9adc8 Binary files /dev/null and b/content/blog/may-2018/img/may-5.webp differ diff --git a/content/blog/may-2018/index.md b/content/blog/may-2018/index.md new file mode 100644 index 000000000..0c4f1b094 --- /dev/null +++ b/content/blog/may-2018/index.md @@ -0,0 +1,72 @@ +--- +title: "May 2018" +date: 2018-05-07 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - here + - Instagram + - ESP-IDF v3.0 + - Newsletter + +--- +{{< figure + default=true + src="img/may-1.webp" + >}} + +Hi everyone, + +We said goodbye to April with a glorious party celebrating Espressif’s 10th birthday! Espressif was created on April 29th, 2008. Back then our company was a small Chinese startup fueled with the vision of its CEO and founder, Teo Swee Ann. It soon became apparent that Espressif’s field of specialization would be the Internet of Things. Our company evolved significantly in this area, leaving its indelible mark with such popular IoT solutions as [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview)and [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview). During the last decade, Espressif has changed from being a Chinese technology startup to being a multinational company providing fast, secure and green IoT solutions that can be available to all. + +To celebrate our tenth anniversary we launched Espressif’s brand new Instagram account, which you can follow by clicking [here](https://www.instagram.com/espressif_systems/). They say that a picture is worth a thousand words. Since Instagram is based on broadcasting pictures mainly, we want to use the power of image in order to communicate our brand, our values and our technologies to the worldwide community of IoT developers. We really hope that you join us in this new journey through social media, which is meant to complement our presence on [Twitter](https://twitter.com/EspressifSystem), [Facebook](https://www.facebook.com/espressif/) and [WeChat](https://mp.weixin.qq.com/s/zcuHVGHS78U8NawUI6rF9Q). + +One day prior to Espressif’s birthday, our Indian branch in Pune hosted an [IoT meetup](https://www.meetup.com/Internet-Of-Things-Pune-IoTPune/events/249858635/). These meetups are monthly events scheduled for the + +last Saturday of every month. Every session includes one or two technical presentations, followed by demonstrations of exciting projects from the IoT community in Pune. The last meetup on April 28th, examined how MQTT started and evolved as a dominant protocol for TCP/IP communications. The specific topics included an explanation of MQTT 3.1, the new aspects of MQTT 5, and a presentation of AWS IoT as an MQTT broker. The session was very successful attracting numerous attendees who left their positive remarks on the [event’s webpage](https://www.meetup.com/Internet-Of-Things-Pune-IoTPune/events/249858635/). In the May edition of our newsletter you will also find out more about the results of the ESP32 Design Contest 2018, which we organized and delivered together with Elektor International Media; the release of the much anticipated ESP-IDF v3.0; Espressif’s official mesh development framework, ESP-MDF, which supports mesh applications for the ESP32 chip in the most comprehensive way; and “Atmosphere IoT”, the innovative cloud platform which has just started providing support for our ESP32 chipsets. + +We hope that you enjoy reading the May edition of our newsletter and that you continue following us on [Instagram](https://www.instagram.com/espressif_systems/), [Facebook](https://www.facebook.com/espressif/) , [Twitter](https://twitter.com/EspressifSystem) and [WeChat](https://mp.weixin.qq.com/s/zcuHVGHS78U8NawUI6rF9Q). + +Best wishes, John Lee + +Senior Customer Support Officer + +## Big Success for the ESP32 Design Contest 2018 + +{{< figure + default=true + src="img/may-2.webp" + >}} + +Remember last January when we announced that we would organize a contest about ESP32 Design together with [Elektor International Media](https://www.elektor.com/)? After receiving a great number of remarkable entries, our judging panel, which consisted of engineers from Espressif and Elektor, announced the winners at the end of last month. Our judges noted that the programming level of all participating entries was considerably high, which made their task more challenging, but also more intellectually stimulating and exciting. + +## ESP-IDF v3.0 Released + +{{< figure + default=true + src="img/may-3.webp" + >}} + +The latest version of Espressif’s IoT Development Framework, [ESP-IDF v3.0](https://github.com/espressif/esp-idf/releases/tag/v3.0), has just been released. This is part of our commitment to improve our IoT solutions, based on the results of our quality assurance procedures and the feedback we receive from the community of developers who use our chips. + +## ESP-MESH Development Framework Released + +{{< figure + default=true + src="img/may-4.webp" + >}} + +Further to [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview)’s Wi-Fi [mesh networking](https://www.espressif.com/en/products/software/esp-mesh/overview), Espressif is pleased to announce that this local network topology is now officially supported on [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview), as well. [ESP-MDF](https://github.com/espressif/esp-mdf) is the official mesh development framework for ESP32, supporting mesh applications for our flagship chip in the most comprehensive way. + +## Atmospher IoT Starts Supporting ESP32 + +{{< figure + default=true + src="img/may-5.webp" + >}} + +[Atmosphere IoT](https://developer.atmosphereiot.com/) has just started supporting Espressif Systems’ [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview), with the aim of delivering better, faster and more secure IoT solutions for everyone. First released in January 2015, the innovative cloud platform of Atmosphere IoT has already been used by thousands of developers and OEMs. Adding to this the power of Espressif’s ESP32 will enable developers to build and deploy cloud-enabled embedded applications with optimized cost performance and reduced time-to-market. + +*Originally published at *[*mailchi.mp*](https://mailchi.mp/beb400e5a9db/espressif-esp-news-may-2018)*.* diff --git a/content/blog/may-2019/img/may-1.webp b/content/blog/may-2019/img/may-1.webp new file mode 100644 index 000000000..834ac0703 Binary files /dev/null and b/content/blog/may-2019/img/may-1.webp differ diff --git a/content/blog/may-2019/img/may-2.webp b/content/blog/may-2019/img/may-2.webp new file mode 100644 index 000000000..8cb077949 Binary files /dev/null and b/content/blog/may-2019/img/may-2.webp differ diff --git a/content/blog/may-2019/img/may-3.webp b/content/blog/may-2019/img/may-3.webp new file mode 100644 index 000000000..0ddd31579 Binary files /dev/null and b/content/blog/may-2019/img/may-3.webp differ diff --git a/content/blog/may-2019/img/may-4.webp b/content/blog/may-2019/img/may-4.webp new file mode 100644 index 000000000..4f6416a53 Binary files /dev/null and b/content/blog/may-2019/img/may-4.webp differ diff --git a/content/blog/may-2019/index.md b/content/blog/may-2019/index.md new file mode 100644 index 000000000..79bb44749 --- /dev/null +++ b/content/blog/may-2019/index.md @@ -0,0 +1,70 @@ +--- +title: "May 2019" +date: 2019-05-26 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +The beginning of May found us celebrating not only this year’s Labor Day Festival, which was a four-day public holiday in China, but also the new phase of Espressif’s collaborations with Google and Microsoft. Our popular [ESP32-DevKitC](https://www.espressif.com/en/products/hardware/esp32-devkitc/overview) now enables an easy evaluation and development for [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview)-based products connected to the [Google Cloud IoT Core](https://cloud.google.com/iot-core/). Similarly, our [ESP32-Azure IoT Kit](https://www.espressif.com/en/products/hardware/esp32-azure-kit) is dedicated to supporting [Microsoft’s Azure IoT cloud services](https://azure.microsoft.com/en-us/overview/iot/). We have recently added “Joint Development” to our dropdown menu under the “Products” tab on the landing page of our website, in order to offer our customers a detailed presentation of the two development kits mentioned above. You can also find a short description below. + +[ESP32-DevKitC-GoogleCloud-IoT](https://www.espressif.com/en/products/hardware/esp32-devkitc-googlecloud-iot/overview#) is built around [ESP32-WROOM-32D](https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32d_esp32-wroom-32u_datasheet_en.pdf)and provides out-of-the-box Google Cloud IoT connectivity. This unbeatable dev kit enables rapid prototyping by being breadboard-friendly and feature-rich. We’re equally proud of our [ESP32-Azure IoT Kit](https://www.espressif.com/en/products/hardware/esp32-azure-kit), which is a development kit designed with powerful functions, such as sensor data acquisition and cloud platform access, as well as a wide range of applications. + +Other news you can read in this month’s newsletter include: + +- ESP-IDF v3.2, the latest version of Espressif’s IoT Development framework, which has just been released; +- The ekey UNO finger scanner, an innovative security system, which has been based on Espressif’s ESP32-WROVER module and made in Austria; +- LyraT-Mini, a new development board that is small in size, yet highly versatile and powerful, which will soon be added to Espressif’s Lyra series; and last, but not least, +- *The Complete ESP32 Projects Guide*, Prof. Dragan Ibrahim’s new book about ESP32, which has just been published by Elektor. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog). We respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer + +## ESP-IDF v3.2 Released + +{{< figure + default=true + src="img/may-1.webp" + >}} + +The latest version of Espressif’s IoT Development Framework, [ESP-IDF v3.2](https://github.com/espressif/esp-idf/releases/v3.2), has just been released. This is part of our commitment to improve our IoT solutions, based on the results of our quality assurance procedures and the feedback we receive from the community of developers who use our chips. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP-IDF_v3.2_Released) + +## ekey UNO: No More Keys with ESP32-WROVER + +{{< figure + default=true + src="img/may-2.webp" + >}} + +The [ekey UNO](https://www.ekey-uno.net/) finger scanner is an innovative security system that has been based on Espressif’s ESP32-WROVER module. This biometric security solution has been developed in Austria by [ekey](https://www.ekey.net/), a top European company that creates high-tech access solutions. Since 2002, ekey has been entrusted by private households, leading companies and public organizations providing fire and rescue services. + +[*Keep reading*](https://www.espressif.com/en/news/ekey_UNO) + +## New “LyraT-Mini” To Be Launched Soon + +{{< figure + default=true + src="img/may-3.webp" + >}} + +Espressif has developed an [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview)-based audio development board which will be part of the [Lyra series](https://www.espressif.com/en/products/hardware/development-boards). The distinctive characteristics of the new board are its mini size (hence the name “LyraT-Mini”) and its single-mic wake-up interrupt. Moreover, it has a simple hardware architecture, a very competitive price and an excellent keyword recognition rate. + +[*Keep Reading*](https://www.espressif.com/en/news/LyraT-Mini_To_Be_Launched_Soon) + +## The Complete ESP32 Projects Guide + +{{< figure + default=true + src="img/may-4.webp" + >}} + +Prof. Dogan is a seasoned electrical engineer and an IET Fellow. He has recently written a book about [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview), which has been published by [Elektor](https://www.elektor.com/). The book’s title is [*The Complete ESP32 Projects Guide*](https://www.elektor.com/the-complete-esp32-projects-guide) and it contains 59 projects based on Espressif’s popular [ESP32-DevKitC development board](https://www.espressif.com/en/products/hardware/esp32-devkitc/overview). diff --git a/content/blog/may-2020/img/may-1.webp b/content/blog/may-2020/img/may-1.webp new file mode 100644 index 000000000..a73c80354 Binary files /dev/null and b/content/blog/may-2020/img/may-1.webp differ diff --git a/content/blog/may-2020/img/may-2.webp b/content/blog/may-2020/img/may-2.webp new file mode 100644 index 000000000..ec8d90192 Binary files /dev/null and b/content/blog/may-2020/img/may-2.webp differ diff --git a/content/blog/may-2020/img/may-3.webp b/content/blog/may-2020/img/may-3.webp new file mode 100644 index 000000000..9c917fa92 Binary files /dev/null and b/content/blog/may-2020/img/may-3.webp differ diff --git a/content/blog/may-2020/index.md b/content/blog/may-2020/index.md new file mode 100644 index 000000000..c06c3f6e9 --- /dev/null +++ b/content/blog/may-2020/index.md @@ -0,0 +1,66 @@ +--- +title: "May 2020" +date: 2020-05-28 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +May has been a busy and exciting month for all of us at Espressif! Our 2020 online and offline courses, based on [ESP-Jumpstart](https://www.espressif.com/en/news/ESP_Jumpstart), have just been released. These courses are part of our outreach program for [Chinese graduates and final-year College students ](https://mp.weixin.qq.com/s/6D_JKP0AX-dWZDvMzV6Hug)who are interested in pursuing an engineering career. We want to introduce them to the world of engineering through ESP32, while showing them the diverse career opportunities the Espressif is able to offer. In response to our uncertain times, the online part of our program has been especially designed as an all-inclusive learning opportunity for Chinese graduates either within the country or abroad, since their physical presence is not required for the completion of the course. + +We believe that [ESP-Jumpstart](https://docs.espressif.com/projects/esp-jumpstart/en/latest/introduction.html) is the ideal platform for our outreach program, because it simplifies the process of building ESP32-based products. ESP-Jumpstart provides the optimal solution to getting started with product development. It is a comprehensive guide for developers, which helps them quickly achieve the conversion of their ideas into products. ESP-Jumpstart is based on [Espressif’s IoT Development Framework, ESP-IDF,](https://github.com/espressif/esp-idf) and discusses all the necessary steps and best practices for product development in a simple, well-structured and user-friendly way. + +On a similar note, our German-speaking friends and supporters will be pleased to know that the **Franzis** + +*Maker Kit for ESP32* has just been released. This maker kit contains everything you need to get started with microcontroller technology using our flagship SoC, [ESP32](https://www.espressif.com/en/products/socs/esp32/overview). An ESP32 development board along with all the necessary components are included in this kit, so you can start implementing your own applications right away! + +Other topics you can read about in this month’s newsletter include: + +- The launching of ESP Apple HomeKit ADK, with which makers can now prototype non-commercial smart-home accessories with the open-source ESP Apple HomeKit Accessory Development Kit (ADK). +- The release of ESP Module, a powerful all-in-one device for microcontroller-based projects, which has been made by the US American start-up, Edge Devices. +- ESP_8_BIT, a new gadget with which you can enjoy Atari 8-bit computers, NES and SMS game consoles on your TV, with only an ESP32 and a sense of nostalgia. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog). We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer + +## ESP Apple HomeKit ADK Launched + +{{< figure + default=true + src="img/may-1.webp" + >}} + +[HomeKit](https://developer.apple.com/homekit/) is a framework developed by Apple for controlling and communicating with connected accessories in a userʼs smart home, where iOS devices are being operated. The [ESP Apple HomeKit ADK](https://github.com/espressif/esp-apple-homekit-adk) is a port of Apple’s open-source [HomeKit ADK](https://github.com/apple/HomeKitADK), which can be used on ESP32 and ESP32-S2 for a number of AIoT projects. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP_Apple_HomeKit_ADK) + +## Powerful ESP Module by Edge Devices + +{{< figure + default=true + src="img/may-2.webp" + >}} + +The US American start-up, [Edge Devices](https://edgedevices.io/), has chosen Espressif’s ESP32-DevKitC-D32 for its new “ESP Module”, an all-in-one device for microcontroller-based projects. ESP32-DevKitC-D32 is actually based on the ESP32-WROOM-32D module. This way, makers who prefer a lightweight architecture can enjoy all [the benefits of the ESP32 technology](https://www.espressif.com/en/products/socs/esp32/overview), which lies at the heart of the ESP Module. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP_Module) + +## ESP_8_BIT: Serving Some ESP32-based Nostalgia + +{{< figure + default=true + src="img/may-3.webp" + >}} + +When all you need is a little escape from today’s disconcerting reality, [ESP_8_BIT](https://esp32.com/viewtopic.php?f=2&t=15565&p=59571#p59571) is the gadget you should turn to! With [Rossum](https://github.com/rossumur)’s new creation, you can enjoy Atari 8-bit computers, Nintendo Entertainment System (NES) and Sega Master System (SMS) game consoles on your television with nothing more than an ESP32 and a sense of nostalgia. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP_8_BIT) + +*Originally published at *[*https://mailchi.mp*](https://mailchi.mp/e9317993ca5f/espressif-esp-news-may-2020?e=f9593a0e62)*.* diff --git a/content/blog/may-2021/img/may-1.webp b/content/blog/may-2021/img/may-1.webp new file mode 100644 index 000000000..b6b7fdd0e Binary files /dev/null and b/content/blog/may-2021/img/may-1.webp differ diff --git a/content/blog/may-2021/img/may-2.webp b/content/blog/may-2021/img/may-2.webp new file mode 100644 index 000000000..61c199981 Binary files /dev/null and b/content/blog/may-2021/img/may-2.webp differ diff --git a/content/blog/may-2021/img/may-3.webp b/content/blog/may-2021/img/may-3.webp new file mode 100644 index 000000000..bd5c998ca Binary files /dev/null and b/content/blog/may-2021/img/may-3.webp differ diff --git a/content/blog/may-2021/img/may-4.webp b/content/blog/may-2021/img/may-4.webp new file mode 100644 index 000000000..78c265e4d Binary files /dev/null and b/content/blog/may-2021/img/may-4.webp differ diff --git a/content/blog/may-2021/img/may-5.webp b/content/blog/may-2021/img/may-5.webp new file mode 100644 index 000000000..187504eae Binary files /dev/null and b/content/blog/may-2021/img/may-5.webp differ diff --git a/content/blog/may-2021/index.md b/content/blog/may-2021/index.md new file mode 100644 index 000000000..fd4663dd8 --- /dev/null +++ b/content/blog/may-2021/index.md @@ -0,0 +1,75 @@ +--- +title: "May 2021" +date: 2021-05-27 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Newsletter + - Esp32 + - IoT + +--- +Hi everyone, + +At the beginning of the month, Espressif’s Founder and CEO, Mr Teo Swee-Ann, gave an interview to the [Electronic Engineering Times (EETimes)](https://www.eetimes.com/nl-archive/EE-Times-Weekend-210501.html), a leading news and analysis magazine about the latest technologies and business developments in the global electronics industry. In this interview, readers had the opportunity to learn more about Teo Swee-Ann, who holds 40 patents in circuit design and AIoT technology, is an avid Go player, a classical guitarist, a husband, and a father of four wonderful children. + +Teo Swee-Ann explained that he does not directly talk about technology with his children, but he does have conversations with them about the implications of today’s technological innovations. “I just want to make sure that they have some thoughts about these questions and their ethical consequences. […] technology should be developed and used in such a way that results in meaningful progress and a better outcome for the future generations”. + +Talking about his leadership style, Teo Swee-Ann characterized it as “variable and pragmatic”. […] “As CEO, I focus on creating value for our customers and the long-term growth of the company… [But] we are an amalgamation of 500 engineers and staff from about 30 different countries connected via face-to-face interactions, emails, messaging apps, MatterMost, Git repositories, shared docs, Zoom meetings, and our core values. We have a rather flat organization […] making decisions and [developing] strategies collectively”. + +You can read Teo Swee-Ann’s entire interview [here](https://www.eetimes.com/nl-archive/EE-Times-Weekend-210501.html). + +{{< figure + default=true + src="img/may-1.webp" + >}} + +*Teo Swee-Ann: Espressif’s Founder and CEO* + +Other topics you can read about in this month’s newsletter include: + +[__Launching ESP32-WROOM-DA__ ](https://www.espressif.com/en/news/ESP32-WROOM-DA) + +{{< figure + default=true + src="img/may-2.webp" + >}} + +With two complementary PCB antennas, ESP32-WROOM-DA is Espressif’s new module for high-quality, long-range communication, while being pin-to-pin compatible with [ESP32-WROOM-32E](https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32e_esp32-wroom-32ue_datasheet_en.pdf). + +[__How to Use ‘Matter’ on ESP32__ ](https://www.espressif.com/en/news/Matter_on_ESP32) + +{{< figure + default=true + src="img/may-3.webp" + >}} + +[Matter](https://buildwithmatter.com/) is an industry-unifying standard, guided by the [Connectivity Standards Alliance](https://csa-iot.org/), for devices that have to be connected reliably, securely and seamlessly. Espressif has been part of the Matter initiative since its early days. In the following article we discuss the ways in which you can easily build your first Matter app on an [ESP32](https://www.espressif.com/en/products/socs/esp32). + +[__‘IoT Cricket’: An ESP8266-based Wi-Fi Module by ‘Things On Edge’__ ](https://www.espressif.com/en/news/IoT_Cricket) + +{{< figure + default=true + src="img/may-4.webp" + >}} + +[IoT Cricket](https://www.thingsonedge.com/product-page/wifi-cricket) is an [ESP8266-based](https://www.espressif.com/en/products/socs/esp8266), easy-to-use Wi-Fi module created by the UK-based company ‘Things On Edge’. This module enables users to build various IoT devices within minutes, and power them directly on batteries, with literally no code and programming. + +[__E3K: An ESP32-powered Bio-sensing Platform by WallySci__ ](https://www.espressif.com/en/news/E3K) + +{{< figure + default=true + src="img/may-5.webp" + >}} + +[E3K](https://www.crowdsupply.com/wallysci/e3k#details-top) is an [ESP32-powered](https://www.espressif.com/en/products/devkits/esp32-devkitc) device that is especially designed for students and researchers. It aims at providing an affordable, fully open-source, wireless framework for an intuitive understanding of bio-signals originated from the human heart, muscles, and brain. + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=c4a255994f&e=309e9b0452), [Twitter](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=65227f5ce9&e=309e9b0452), [GitHub](https://github.com/espressif), [Instagram](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=7a5d88fa55&e=309e9b0452), [LinkedIn](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=4a49c35eb3&e=309e9b0452), and [YouTube](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=60d3d0280a&e=309e9b0452). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto://newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/may-2022/img/may-1.webp b/content/blog/may-2022/img/may-1.webp new file mode 100644 index 000000000..a762dd128 Binary files /dev/null and b/content/blog/may-2022/img/may-1.webp differ diff --git a/content/blog/may-2022/img/may-2.webp b/content/blog/may-2022/img/may-2.webp new file mode 100644 index 000000000..481b15e1c Binary files /dev/null and b/content/blog/may-2022/img/may-2.webp differ diff --git a/content/blog/may-2022/img/may-3.webp b/content/blog/may-2022/img/may-3.webp new file mode 100644 index 000000000..2565a2817 Binary files /dev/null and b/content/blog/may-2022/img/may-3.webp differ diff --git a/content/blog/may-2022/index.md b/content/blog/may-2022/index.md new file mode 100644 index 000000000..0927ad9ba --- /dev/null +++ b/content/blog/may-2022/index.md @@ -0,0 +1,62 @@ +--- +title: "May 2022" +date: 2022-05-30 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +By heavily investing in R&D, we have developed various series of robust, secure, wireless-communication MCUs which today power more than 700 million devices worldwide. Thus, we have established Espressif as a unique, one-stop, AIoT solution-provider of not just powerful hardware, but also of innovative SDKs, Firmware, Cloud backend, phone apps, and voice integrations. + +As a valued AWS Technology Partner, Espressif has enhanced the advantages of its unique offerings even further by leveraging AWS’ expertise, global reach, and automatic scaling based on serverless technologies. Espressif’s ESP32, ESP32-C and ESP32-S series of SoCs and modules are qualified for FreeRTOS or AWS IoT, making it easy for customers to select the correct hardware. Additionally, Espressif’s AWS IoT ExpressLink module provides an easy way for customers to use it as an AWS IoT connectivity interface with other MCUs. + +[AWS](https://aws.amazon.com/) is the world’s most comprehensive and broadly-adopted Cloud platform. Its IaaS (Infrastructure as a Service) offering provides administrators with direct control over operating systems, while the AWS PaaS (Platform as a Service) offers users flexibility and ease of operation. Espressif’s close collaboration with AWS enables us to leverage the complete set of AWS’ Cloud computing services, including Cloud elasticity, storage resources, databases and applications. Having already built numerous AWS-based hardware and software solutions, Espressif has strengthened its portfolio of offerings, successfully meeting a varied range of customer demands, including innovation, security and cost-efficiency. + +Espressif’s [ESP RainMaker®](https://rainmaker.espressif.com/) provides customers with a one-stop, development-free and maintenance-free AIoT solution for private Cloud deployment, reducing R&D costs and accelerating time-to-market. This service is entirely developed on the AWS Cloud. It provides a comprehensive solution that covers everything from the underlying chip to the device firmware, the third-party voice-assistant integration, mobile apps and the dashboard. The solution works on all Espressif SoCs and modules. This helps our customers accelerate their product launch, while also providing them with full control over their devices, the associated data, and Cloud management. Based on ESP RainMaker, customers will be able to build their own AIoT devices and ecosystem. + +ESP RainMaker has adopted the AWS serverless architecture, and has chosen the AWS Lambda and Amazon DynamoDB services for building an elastically scalable resource configuration. Therefore, ESP RainMaker’s demand for AWS Cloud resources adapts to the actual circumstances automatically. This ensures both a low dev-ops overhead and reasonable expenses, since they are proportional to the actual usage of the service. With ESP RainMaker, customers can realize a series of product functions such as device provisioning, control, management, diagnostics and OTA upgrade, which further ensure a reliable operation and a better user experience. Powered by AWS, ESP RainMaker is available in any country and region that is also covered by the services and rapid-deployment features of AWS. + +We look forward to welcoming more enterprises that will choose to take advantage of our AWS-powered AIoT Cloud solution. By enabling agile product development, reducing R&D costs, and driving greater profitability, ESP RainMaker enables our customers to truly focus on their core offerings. If you want to know more about Espressif’s cooperation with AWS, or if you wish to conduct business with us, please contact our [customer support team](https://www.espressif.com/en/contact-us/sales-questions). + +Other topics you can read about in this month’s newsletter include: + +{{< figure + default=true + src="img/may-1.webp" + >}} + +[__Announcing an AWS IoT Reference Example for ESP32-C3__ ](https://www.espressif.com/en/news/AWS_IoT_Ref_eg_ESP32-C3) + +Espressif is pleased to announce [the stable release](https://github.com/espressif/esp-aws-iot/) of esp-aws-iot on GitHub and a [reference example](https://github.com/FreeRTOS/iot-reference-esp32c3) for the ESP32-C3, developed [in collaboration](https://www.freertos.org/featured-freertos-iot-integration-targeting-an-espressif-esp32-c3-risc-v-mcu/) with the AWS team. The combination of these repositories provides a production-ready starting point for making applications that connect to AWS IoT Core, using esp-aws-iot. + +{{< figure + default=true + src="img/may-2.webp" + >}} + +[__Update on Espressif’s Support for Zephyr__ ](https://www.espressif.com/en/news/Zephyr_updates) + +Since tracking the development of [Espressif’s support](https://www.espressif.com/en/news/new_operating_systems_in_ESP32)for Zephyr through [commits](https://github.com/espressif/esp-idf/issues) is somewhat painful, this article aims to provide a clear update on the features we have added recently, and clarify the direction of Espressif’s support for this project in the future. + +{{< figure + default=true + src="img/may-3.webp" + >}} + +[__The First Makerspace in Siem Riep!__ ](https://www.espressif.com/en/news/Makers_Siem_Riep) + +Independent maker, STEM educator and Espressif supporter, [Tomoyuki Sakurai](https://github.com/trombik), has created the first makerspace in Siem Riep, Cambodia, called “[Makers Siem Reap](http://info.mkrsgh.org/makerspace/about/)”. Its mission is to provide a place where people with shared interests in electronics and information technology can gather to work on various projects while sharing ideas, equipment, and knowledge. + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/meet-espressif-developer-portal/index.md b/content/blog/meet-espressif-developer-portal/index.md index 7b60cf18f..e6c5060e2 100644 --- a/content/blog/meet-espressif-developer-portal/index.md +++ b/content/blog/meet-espressif-developer-portal/index.md @@ -2,6 +2,7 @@ title: "Meet the Espressif Developer Portal" date: 2024-05-13T11:11:42+08:00 showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" authors: - "kirill-chalov" --- diff --git a/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/img/memory-1.webp b/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/img/memory-1.webp new file mode 100644 index 000000000..24bc9278e Binary files /dev/null and b/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/img/memory-1.webp differ diff --git a/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/img/memory-2.webp b/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/img/memory-2.webp new file mode 100644 index 000000000..83fefbba0 Binary files /dev/null and b/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/img/memory-2.webp differ diff --git a/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/img/memory-3.webp b/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/img/memory-3.webp new file mode 100644 index 000000000..5ee3376a8 Binary files /dev/null and b/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/img/memory-3.webp differ diff --git a/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/img/memory-4.webp b/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/img/memory-4.webp new file mode 100644 index 000000000..5f9b4ab24 Binary files /dev/null and b/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/img/memory-4.webp differ diff --git a/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/index.md b/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/index.md new file mode 100644 index 000000000..60dcb499c --- /dev/null +++ b/content/blog/memory-availability-comparison-between-esp32-and-esp32-c3/index.md @@ -0,0 +1,64 @@ +--- +title: "Memory Availability Comparison between ESP32 and ESP32-C3" +date: 2021-04-25 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - amey-inamdar +tags: + - Esp32 + - IoT + - Esp32 Programming + +--- +Espressif launched ESP32-C3 at the end of 2020. It’s very well received and now it’s already in the mass production state. ESP32-C3 provides Wi-Fi and Bluetooth LE connectivity for applications in the most cost-effective way. For the users of ESP32 who use it for Wi-Fi and/or BLE connectivity, ESP32-C3 is a possible upgrade option provided other requirements match. So let’s first take a look at the comparison of ESP32 and ESP32-C3 from that perspective. + +{{< figure + default=true + src="img/memory-1.webp" + >}} + +The users who have used ESP32 have a common question about how does 400 KB SRAM compare against 520 KB SRAM of ESP32 as many of the times memory availability is a critical factor for embedded applications. In this article, I provide overview of enhancements done related to memory management in ESP32-C3 and show how __ESP32-C3 can provide better or the same memory headroom in comparison with ESP32__ for various application use-cases. + +## Memory Subsystem Improvements and Optimisations + +## Dynamic IRAM-DRAM Split + +{{< figure + default=true + src="img/memory-2.webp" + >}} + +{{< figure + default=true + src="img/memory-3.webp" + >}} + +The above two diagrams show memory maps of ESP32 and ESP32-C3 respectively. As you can see, ESP32 has static IRAM-DRAM partitioning where 192KB SRAM is used as IRAM and then remaining 328KB SRAM is used as DRAM. Part of IRAM (32 or 64KB) is used as flash cache. Then linker script is used to fill IRAM with the code that can’t be in the flash memory due to functional or performance reasons. The unused IRAM beyond this, remains unused* by the application. + +In case of ESP32-C3, there is no static partitioning of IRAM and DRAM. ESP32-C3 has 16KB flash cache at the beginning of SRAM. IRAM and DRAM addresses increment in the same direction unlike ESP32. Based on the application, the linker script allocates IRAM as required for the application. The DRAM begins right where IRAM ends. Hence the memory is used more efficiently in case of ESP32-C3 than ESP32. + +## Reduced IRAM Utilisation + +ESP32-C3 has reduced IRAM utilisation than ESP32. This is result of the following two efforts + +## Improved Bluetooth Memory Management + +ESP32’s Bluetooth subsystem requires a contiguous memory (56KB for dual-mode and 38KB for BLE) at a fixed location in the DRAM. This is a considerable disadvantage if the application requires to use Bluetooth functionality but not continuously. In such case this memory remains occupied even when not used. + +ESP32-C3 doesn’t require Bluetooth memory to be contiguous and at fixed location. ESP32-C3 Bluetooth subsystem allocates memory using standard system heap and hence Bluetooth can be enabled and disabled by the application as and when required. All this needs is sufficient memory to be available in the heap. + +## Memory Consumption for Common Use-cases + +With the above mentioned 3 reasons, ESP32-C3 can provide more effective memory usability for the applications. Let’s consider some common application use-cases and let’s see how much memory these use-cases consume of ESP32 and ESP32-C3 SoCs and what headroom is available for the application. + +I have ensured that the configuration is same between ESP32 and ESP32-C3 as far as possible. Also the same SDK version (IDF version 4.3-beta3) has been used to run the applications on these SoCs. + +{{< figure + default=true + src="img/memory-4.webp" + >}} + +Looking at the above table, it is clear that: + +So as we discussed, ESP32-C3 provides equal or more headroom for applications than ESP32. However when you are considering choosing the SoC or migration option, please ensure that you also consider other important features such as PSRAM availability, IO availability and CPU performance. diff --git a/content/blog/new-features-in-esp-rainmaker/img/new-1.webp b/content/blog/new-features-in-esp-rainmaker/img/new-1.webp new file mode 100644 index 000000000..9b76d5c8b Binary files /dev/null and b/content/blog/new-features-in-esp-rainmaker/img/new-1.webp differ diff --git a/content/blog/new-features-in-esp-rainmaker/img/new-2.webp b/content/blog/new-features-in-esp-rainmaker/img/new-2.webp new file mode 100644 index 000000000..429b7b2ef Binary files /dev/null and b/content/blog/new-features-in-esp-rainmaker/img/new-2.webp differ diff --git a/content/blog/new-features-in-esp-rainmaker/img/new-3.webp b/content/blog/new-features-in-esp-rainmaker/img/new-3.webp new file mode 100644 index 000000000..4c5ad63a5 Binary files /dev/null and b/content/blog/new-features-in-esp-rainmaker/img/new-3.webp differ diff --git a/content/blog/new-features-in-esp-rainmaker/index.md b/content/blog/new-features-in-esp-rainmaker/index.md new file mode 100644 index 000000000..db94d3289 --- /dev/null +++ b/content/blog/new-features-in-esp-rainmaker/index.md @@ -0,0 +1,54 @@ +--- +title: "New Features in ESP RainMaker" +date: 2021-06-25 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - piyus-shah +tags: + - Rainmaker + - Espressif + - ESP32 +--- +[ESP RainMaker](https://rainmaker.espressif.com/) has been around for more than a year now and we have been adding quite some features to it every few months. Here we are now, with some more new features. + +## Node Sharing + +ESP RainMaker allows a user to control a node remotely over the Internet. However, there is often a need to allow others to use the same node. It could be something like giving control of lightbulbs to members of your family, or temporarily giving access to a door lock to your tenant or a maid, or something like a shared hardware resource being accessed remotely by multiple employees. To serve such use cases, ESP RainMaker offers an ability of sharing a node with others. + +To share a node, go to the parameters control page by tapping the device tile on the home page, click on the (i) on top right and then scroll own to the bottom where you can find an option to Add a new member. Note that you can add only those users who have already signed up for RainMaker. The user who shares the node is called the primary user for the node, whereas all the other users added are called secondary users. + +{{< figure + default=true + src="img/new-1.webp" + >}} + +The secondary user with whom the node was shared can open the phone app, and under the User profile page, go to “Sharing Requests”. It will show all the sharing requests received, which can then be accepted or declined. Soon, we will provide push notifications to alert users that someone has shared RainMaker nodes with them. + +{{< figure + default=true + src="img/new-2.webp" + >}} + +Once the sharing is accepted, the secondary user can control and monitor the node, in the same way as the primary user. However, he/she cannot share it further. For more information, check out the [ESP RainMaker docs](https://rainmaker.espressif.com/docs/node-sharing/). + +## Timezone Setting + +ESP RainMaker already had support for Timezones on the device side. The various ways in which this could be used can be found [ESP RainMaker docs](https://rainmaker.espressif.com/docs/time-service/#time-zone). However, the support on phone app side was missing, making it a bit hard to set timezone on the devices at run time. The latest phone apps now have an option to set this on the Node details page. Moreover, to prevent cases wherein people may forget to set the timezone explicitly from the Node details page, we have also added this in the “Adding device” workflow. So, after provisioning and user-node association is done, the phone app automatically sets the device timezone to match the phone’s timezone. + +## Arduino Support + +Even though we have taken quite some efforts to make developer on-boarding easy, by ways of the [ESP IDF Windows Installer](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/windows-setup.html#esp-idf-tools-installer) and the Eclipse and VSCode plug-ins, we do understand that a lot of makers/hobbyists would still prefer Arduino due to its simplicity and cross platform support. That’s why we have now added the ESP RainMaker support in Arduino. Check out [ESP RainMaker now in Arduino post](/blog/esp-rainmaker-now-in-arduino) for more information. + +## Node Grouping + +As people start using more and more Smart devices, it often gets hard to view and manage them from the phone apps. To make that simpler, we have added a concept of Node grouping. You can create logical or abstract groups of your nodes using the RainMaker app. For some users, the groups can be based on rooms; for others, they could be based on device types. The choice is yours. Group management is available directly on the homepage as you can see in this screenshot. + +{{< figure + default=true + src="img/new-3.webp" + >}} + +Even though the phone apps have only single level groups, the RainMaker backend supports even sub groups. You can check out the Grouping APIs at [Swagger](https://swaggerapis.rainmaker.espressif.com/#/Device%20grouping) if you are interested. + +Apart from these features, we have made quite some visual and convenience related improvements. Download our latest apps from [RainMake docs](https://rainmaker.espressif.com/docs/quick-links/#phone-apps) and check these out for yourself. You can give your feedback either on [GitHub](https://github.com/espressif/esp-rainmaker/issues) or the [forums](https://www.esp32.com/viewforum.php?f=41&sid=98f7b3da06f71d135fc2161792ffa5d0). diff --git a/content/blog/november-2018/img/november-1.webp b/content/blog/november-2018/img/november-1.webp new file mode 100644 index 000000000..b88c02547 Binary files /dev/null and b/content/blog/november-2018/img/november-1.webp differ diff --git a/content/blog/november-2018/img/november-2.webp b/content/blog/november-2018/img/november-2.webp new file mode 100644 index 000000000..3cf7c90bd Binary files /dev/null and b/content/blog/november-2018/img/november-2.webp differ diff --git a/content/blog/november-2018/img/november-3.webp b/content/blog/november-2018/img/november-3.webp new file mode 100644 index 000000000..50db12f6c Binary files /dev/null and b/content/blog/november-2018/img/november-3.webp differ diff --git a/content/blog/november-2018/img/november-4.webp b/content/blog/november-2018/img/november-4.webp new file mode 100644 index 000000000..143c67ba6 Binary files /dev/null and b/content/blog/november-2018/img/november-4.webp differ diff --git a/content/blog/november-2018/img/november-5.webp b/content/blog/november-2018/img/november-5.webp new file mode 100644 index 000000000..d0b1091b1 Binary files /dev/null and b/content/blog/november-2018/img/november-5.webp differ diff --git a/content/blog/november-2018/index.md b/content/blog/november-2018/index.md new file mode 100644 index 000000000..cd068a253 --- /dev/null +++ b/content/blog/november-2018/index.md @@ -0,0 +1,86 @@ +--- +title: "November 2018" +date: 2018-11-11 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - IoT + - Esp32 + - Newsletter + +--- +Welcome to our November Newsletter + +{{< figure + default=true + src="img/november-1.webp" + >}} + +Hi everyone, + +November has already started, but we’re still in a __Halloween__ mood. Luckily it’s not just us! Tricksters and treaters were not simply carving pumpkins and wearing spooky outfits on October 31st. They were also using [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview) to make their Halloween costumes even more horrifying! + +What’s scarier than a pair of __Uncanny Eyes__ ? Well, the obvious answer is *five* pairs of Uncanny Eyes mounted on skulls and controlled in a way that makes everyone scream. Laurent did exactly that and posted the project on [hackster.io](https://www.hackster.io/laurentr/halloween-skull-costume-with-uncanny-eyes-on-esp32-376a13). Powered by [ESP32-DevKitC](https://www.espressif.com/en/products/hardware/esp32-devkitc/overview), Uncanny Eyes achieve maximum effect when they are attached to the bust of a Halloween skull costume. The wearer of the costume seamlessly controls the uncanny eyes, as they transition from random motion to coordinated movements via a hidden device with an analog joystick and buttons. + +Apart from Halloween, what kept us excited last month was the release of __ESP-WHO__ , which is __Espressif’s face detection and recognition platform based on__ [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview). You will find ESP-WHO to be most helpful if, for example, you want to build a + +coffee machine which will be able to recognize your face when using it, so that it gives you the kind of coffee that matches your taste; or when you want to control a home appliance that will shut down automatically upon recognizing that unsupervised children are in the vicinity. If you want to learn more about ESP-WHO, click on [here](https://github.com/espressif/esp-who). + +Other news you can find in this month’s newsletter includes Espressif’s representation at the __IoT/M2M Expo__ in Japan, which took place on October 24–26; __“Bob”__ , a French mini dishwasher powered by ESP32; the __Hackaday Super-conference__ which takes place in Pasadena on November 2–4, featuring Espressif’s Software and Technical Marketing Manager, __Jeroen Domburg__ , as an invited speaker; and, finally, the continuing __ESP32 Bug Bounty Program__ . + +Hope you enjoy reading the November edition of our newsletter. Keep sending us your comments and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem) and [Instagram](https://www.instagram.com/espressif_systems/). We respond to all of your messages as quickly as possible! + +asdf + +Best wishes, John Lee. + +Senior Customer Support Officer + +## ESP Solutions at Japan’s 4th IoT/M2M Expo + +{{< figure + default=true + src="img/november-2.webp" + >}} + +Espressif’s distributor in Japan, [Midoriya Electric](https://www.midoriya.co.jp/eng/), participated in the 4th IoT/M2M Expo, in Makuhari Messe, which took place on October 24–26. This was part of Japan’s [IT Week](https://www.japan-it.jp/ja-jp.html), which is a world-leading IT show that has become the most comprehensive business-to-business IT exhibition in Japan. This year the show was the biggest one in its history, in terms of the number of exhibitors and professional visitors from the industry. asdf + +[Keep Reading](https://www.espressif.com/en/news/Espressif_Solutions_at_Japans_4th_IoT_M2M_Expo) + +## Mini Dishwasher Powered by ESP32 + +{{< figure + default=true + src="img/november-3.webp" + >}} + +“Throw in the sponge. Adopt Bob!” This is the motto of [Daan.Tech](http://daan.tech/), a French start-up whose goal is to usher in a new era of smart home appliances. Bob is a newly-designed ultra-compact dishwasher which offers the ultimate solution for people with space-constrained kitchens and an irreversible aversion to washing dishes by hand. Needless to say, of course, that “Bob” is built around Espressif’s powerful [ESP32-WROOM-32](https://www.espressif.com/en/products/hardware/esp-wroom-32/overview) module, which can bring to life a variety of projects, ranging from low-power sensor networks to the most demanding tasks. + +[Keep reading](https://www.espressif.com/en/news/Mini_Dishwasher_Powered_by_ESP32) + +## Espressif at the Hackaday Supercon 2018 + +{{< figure + default=true + src="img/november-4.webp" + >}} + +Every year, the Hackaday Super-conference attracts huge numbers of hardware hackers, makers, engineers and enthusiasts from around the world. Hundreds of people gather for the organized talks and workshops, as well as the unplanned challenges, conversations and discoveries that make [Supercon](https://hackaday.io/superconference/) the ultimate hardware conference. + +[Keep Reading](https://www.espressif.com/en/news/Espressif_at_the_Hackaday_Supercon_2018) + +## The ESP32 Security Bug Bounty Is Still On! + +{{< figure + default=true + src="img/november-5.webp" + >}} + +Do you like searching for security bugs? Do you want to earn some extra cash? Are you a fan of Espressif Systems and ESP32? If the answer to all these questions is positive, then you should definitely consider participating in our bug-reporting program, the [ESP32 Security Bug Bounty](https://esp32.com/viewtopic.php?f=10&t=1572&p=7266)! We had a similar program about ESP8266, which lasted from March 2015 until July 2018. Our ESP32 Bug Bounty started in March 2017 and is still on! + +[Keep Reading](https://www.espressif.com/en/news/The_ESP32_Security_Bug_Bounty_Is_Still_On) + +*Originally published at *[*mailchi.mp*](https://mailchi.mp/b518a950bf0b/espressif-esp-news-november-2018?e=f9593a0e62)*.* diff --git a/content/blog/november-2019/img/november-1.webp b/content/blog/november-2019/img/november-1.webp new file mode 100644 index 000000000..aba3653ae Binary files /dev/null and b/content/blog/november-2019/img/november-1.webp differ diff --git a/content/blog/november-2019/img/november-2.webp b/content/blog/november-2019/img/november-2.webp new file mode 100644 index 000000000..fe4758ac9 Binary files /dev/null and b/content/blog/november-2019/img/november-2.webp differ diff --git a/content/blog/november-2019/img/november-3.webp b/content/blog/november-2019/img/november-3.webp new file mode 100644 index 000000000..cafcc3f11 Binary files /dev/null and b/content/blog/november-2019/img/november-3.webp differ diff --git a/content/blog/november-2019/img/november-4.webp b/content/blog/november-2019/img/november-4.webp new file mode 100644 index 000000000..b364445fb Binary files /dev/null and b/content/blog/november-2019/img/november-4.webp differ diff --git a/content/blog/november-2019/img/november-5.webp b/content/blog/november-2019/img/november-5.webp new file mode 100644 index 000000000..e8bfb29d2 Binary files /dev/null and b/content/blog/november-2019/img/november-5.webp differ diff --git a/content/blog/november-2019/index.md b/content/blog/november-2019/index.md new file mode 100644 index 000000000..a7df6f587 --- /dev/null +++ b/content/blog/november-2019/index.md @@ -0,0 +1,82 @@ +--- +title: "November 2019" +date: 2019-11-22 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - IoT + - Newsletter + +--- +{{< figure + default=true + src="img/november-1.webp" + >}} + +Hi everyone, + +At the beginning of November, a fun project posted on hackster.io put us in the mood to take Halloween seriously! “[Doris, the Evil Bowler Hat with ESP32 Matrix Voice](https://www.hackster.io/matrix-labs/doris-the-evil-bowler-hat-w-esp32-matrix-voice-a8cf86)” was created by Samreen Islam, Alfred Gonzalez and Carlos Chacin. They used an Open embeddeD Audition System (ODAS) and customized code to move a servo motor in the direction of the most concentrated incoming sound around a 180-degree radius. + +This enabled the hat to face anyone who would be speaking to the person wearing it! Then, an [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview)on the MATRIX Voice was used for controlling an 8x8 LED MATRIX via SPI with eye animations, which created a fun and spooky effect. Finally, 3D-printed spidery legs completed the look of the evil bowler hat! You can find all the details about this project by clicking [here](https://www.hackster.io/matrix-labs/doris-the-evil-bowler-hat-w-esp32-matrix-voice-a8cf86). + +Congratulations to all three members of the team who created this project. Here, at Espressif we value good team work and believe it is the essence of any kind of success. + +Other topics you can read in this month’s newsletter include: + +- ESP32-VoIP is Espressif’s newly released Internet-Phone solution, which also functions as an example of how to operate voice-controlled devices. +- The ESP8266 series of modules is now available on China Mobile’s And-link platform, enabling users to develop smart-home solutions with the power of ESP8266. +- The ESP8266 series of modules also supports China Telecom’s Zhijia platform, where programmers can develop and test smart-home devices. +- The ESP32-CAM project is Rui Santos’s latest super cool project, showing how the ESP32-CAM board can take a photo and display it in a web server! + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog). We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer + +## Espressif’s ESP32-based Internet Phone Solution + +{{< figure + default=true + src="img/november-2.webp" + >}} + +Espressif has just released an Internet Phone [solution,](https://github.com/espressif/esp-adf/tree/master/examples/advanced_examples/voip) which is based on [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview) and the Voice over Internet Protocol (VoIP), but also functions as an example of how to operate voice-controlled devices. This application is really cost-effective, with a great performance, supporting voice wake-up, voice interaction, voicemail service, music on demand, etc. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP32_VoIP) + +## ESP8266 Now Supporting China Mobile’s And-link Platform + +{{< figure + default=true + src="img/november-3.webp" + >}} + +[China Mobile](https://www.cmi.chinamobile.com/en/front-page) is one of the biggest Chinese telecommunications corporations and also one of the world’s largest mobile network operators with about 100 million subscribers. The [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview) series of modules is now available on China Mobile’s And-link platform, which enables users to develop smart-home solutions with the power of ESP8266. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP8266_on_And-link) + +## ESP8266 Now Supporting China Telecom’s IoT Platform + +{{< figure + default=true + src="img/november-4.webp" + >}} + +[China Telecom](https://www.chinatelecomglobal.com/), one of the biggest Chinese telecommunications corporations, is at the forefront of IoT technology and drives the digital transformation of industries in China and beyond. Espressif has now partnered with China Telecom, as the powerful [ESP8266 WROOM series of modules](https://www.espressif.com/en/products/hardware/esp-wroom-02/overview) is at the epicenter of Zhijia platform’s operation. China Telecom’s Zhijia platform enables programmers to develop and test smart-home devices. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP8266_and_China_Telecom) + +## ESP32-CAM and Other Cool Projects on RNT + +{{< figure + default=true + src="img/november-5.webp" + >}} + +Rui Santos from Random Nerd Tutorials recently posted a very interesting entry on his blog. It shows [how to build a web server with the ESP32-CAM board](https://randomnerdtutorials.com/esp32-cam-take-photo-display-web-server/) that allows you to send a command to take a photo and visualize the latest captured photo in your browser, having saved it first in SPIFFS. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP32_CAM) + +*Originally published at *[*https://mailchi.mp*](https://mailchi.mp/5a6be494e468/espressif-esp-news-november-2019?e=309e9b0452)*.* diff --git a/content/blog/november-2020/img/november-1.webp b/content/blog/november-2020/img/november-1.webp new file mode 100644 index 000000000..45b85fc14 Binary files /dev/null and b/content/blog/november-2020/img/november-1.webp differ diff --git a/content/blog/november-2020/img/november-2.webp b/content/blog/november-2020/img/november-2.webp new file mode 100644 index 000000000..dd784efa9 Binary files /dev/null and b/content/blog/november-2020/img/november-2.webp differ diff --git a/content/blog/november-2020/img/november-3.webp b/content/blog/november-2020/img/november-3.webp new file mode 100644 index 000000000..c0b4c9043 Binary files /dev/null and b/content/blog/november-2020/img/november-3.webp differ diff --git a/content/blog/november-2020/img/november-4.webp b/content/blog/november-2020/img/november-4.webp new file mode 100644 index 000000000..93c2fc6b1 Binary files /dev/null and b/content/blog/november-2020/img/november-4.webp differ diff --git a/content/blog/november-2020/img/november-5.webp b/content/blog/november-2020/img/november-5.webp new file mode 100644 index 000000000..3c8f08c1c Binary files /dev/null and b/content/blog/november-2020/img/november-5.webp differ diff --git a/content/blog/november-2020/img/november-6.webp b/content/blog/november-2020/img/november-6.webp new file mode 100644 index 000000000..1c738f05e Binary files /dev/null and b/content/blog/november-2020/img/november-6.webp differ diff --git a/content/blog/november-2020/img/november-7.webp b/content/blog/november-2020/img/november-7.webp new file mode 100644 index 000000000..d6adcbcae Binary files /dev/null and b/content/blog/november-2020/img/november-7.webp differ diff --git a/content/blog/november-2020/index.md b/content/blog/november-2020/index.md new file mode 100644 index 000000000..5225f1778 --- /dev/null +++ b/content/blog/november-2020/index.md @@ -0,0 +1,83 @@ +--- +title: "November 2020" +date: 2020-11-30 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Newsletter + +--- +Hi everyone, + +Earlier this week, the news about the upcoming release of ESP32-C3, Espressif’s single-core, RISC-V-based, Wi-Fi and Bluetooth LE 5.0 MCU, took the online maker community by storm. We’re delighted to know that so many people are eager to find out more about Espressif’s new products! That’s why we’re including in this month’s newsletter [a comprehensive article](https://www.espressif.com/en/news/ESP32_C3) about ESP32-C3 along with the relevant [datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf). + +{{< figure + default=true + src="img/november-1.webp" + >}} + +ESP32-C3 is, of course, part of our [MINI series](https://www.espressif.com/en/news/ESP32_S2_MINI_series) of modules, which we announced back in August 2020, as you might remember. So, here’s some more news about the MINI series: the engineering samples of ESP32-S2-MINI-1/1U, ESP32-MINI-1 and ESP32-PICO-MINI-02 are now available on [Espressif’s official sample provider webpage](https://www.espressif.com/en/contact-us/get-samples). Make sure you order your samples today, so you can start working on your new ESP projects as quickly as possible! + +{{< figure + default=true + src="img/november-2.webp" + >}} + +Also, if you’re getting into a Christmassy mood already, you can order a couple of more samples and give them to your maker friends as a gift. We can guarantee they will love them! __Espressif’s MINI series__ of modules are __an ideal choice__ for a wide variety of application scenarios relating to the __Internet of Things, wearable electronics and smart home__ . + +On a different note, [IOT2TANGLE’s hackathon](https://i2t.medium.com/the-integrate-everything-with-iota-hackathon-is-live-872636cc3ff8) that Espressif System sponsored along with other IoT companies was calling for the best IoT/IOTA integrations until November 25th at 11:59 PM CET. + +We’re really excited that dozens of registered projects have been submitted by __contestants from all around the world__ , e.g. from Argentina, Brazil, Canada, Denmark, Germany, India, Indonesia, Italy, Peru, Switzerland, the United States, and many other countries. [This hackathon, entitled “Integrate Everything with IOTA”](https://youtu.be/BI_p3Bg7ZGE), aims to generate quality open-source integrations that will be valuable stepping-stones for subsequent development projects that connect IoT devices with Distributed Ledger Technologies. + +__*Good luck to all the participants!*__ + +{{< figure + default=true + src="img/november-3.webp" + >}} + +Other topics you can read about in this month’s newsletter include: + +[__Introducing ESP32-C3__ ](https://www.espressif.com/en/news/ESP32_C3) + +{{< figure + default=true + src="img/november-4.webp" + >}} + +ESP32-C3 is a single-core Wi-Fi and Bluetooth LE 5.0 microcontroller unit, based on the open-source RISC-V architecture. It strikes the right balance of power, I/O capabilities and security, thus offering the optimal cost-effective solution for connected devices. The availability of Wi-Fi and Bluetooth LE 5.0 connectivity makes the device configuration easy, while also enabling a variety of dual connectivity use-cases. + +[__ESP Product Selector Launched__ ](https://www.espressif.com/en/news/ESP_Product_Selector) + +{{< figure + default=true + src="img/november-5.webp" + >}} + +Our new [ESP Product Selector](http://products.espressif.com/) is an online tool designed to increase development efficiency and reduce the time for business communication. To use it, customers do not need to register with us or download the tool. All they need to do is click on the link and use it, taking advantage of its simple function and multiple benefits. + +[__Aimagin’s ESP32-powered Waijung 2 Released__ ](https://www.espressif.com/en/news/ESP32_Waijung) + +{{< figure + default=true + src="img/november-6.webp" + >}} + +Waijung 2 is [Aimagin](https://www.aimagin.com/)’s next generation model-based development platform for embedded systems, which automatically generates C code from Simulink model files, compiles it, and downloads .bin to [ESP32](https://www.espressif.com/en/products/socs/esp32) MCUs. Waijung 2 speeds up complex stand-alone and IoT device development, since there is no need for writing a single line of C or HTML code. + +[__ESP32-powered BBC Doctor Who HiFive Inventor Coding Kit__ ](https://www.espressif.com/en/news/ESP32_BBC) + +{{< figure + default=true + src="img/november-7.webp" + >}} + +Industry leading partners, Tynker and BBC Learning, have taken coding to the next level with the revolutionary new [ESP32](https://www.espressif.com/en/products/socs/esp32)-powered BBC Doctor Who HiFive Inventor Coding Kit. It comes with a Wi-Fi & Bluetooth combo MCU board, along with guided lessons aimed at teaching children how to use Block Coding and MicroPython for IoT applications. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=c4a255994f&e=309e9b0452), [Twitter](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=65227f5ce9&e=309e9b0452), [GitHub](https://github.com/espressif), [Instagram](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=7a5d88fa55&e=309e9b0452), [LinkedIn](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=4a49c35eb3&e=309e9b0452), and [YouTube](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=60d3d0280a&e=309e9b0452). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto://newsletter@espressif.com)! We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer diff --git a/content/blog/november-2021/img/november-1.webp b/content/blog/november-2021/img/november-1.webp new file mode 100644 index 000000000..9ca642c7c Binary files /dev/null and b/content/blog/november-2021/img/november-1.webp differ diff --git a/content/blog/november-2021/img/november-2.webp b/content/blog/november-2021/img/november-2.webp new file mode 100644 index 000000000..17b856964 Binary files /dev/null and b/content/blog/november-2021/img/november-2.webp differ diff --git a/content/blog/november-2021/img/november-3.webp b/content/blog/november-2021/img/november-3.webp new file mode 100644 index 000000000..a4bc39e9a Binary files /dev/null and b/content/blog/november-2021/img/november-3.webp differ diff --git a/content/blog/november-2021/img/november-4.webp b/content/blog/november-2021/img/november-4.webp new file mode 100644 index 000000000..6b3ae7835 Binary files /dev/null and b/content/blog/november-2021/img/november-4.webp differ diff --git a/content/blog/november-2021/index.md b/content/blog/november-2021/index.md new file mode 100644 index 000000000..85511609f --- /dev/null +++ b/content/blog/november-2021/index.md @@ -0,0 +1,62 @@ +--- +title: "November 2021" +date: 2021-11-30 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Newsletter + +--- +Hi everyone, + +Espressif is proud to [announce](https://www.espressif.com/en/news/Espressif_AWS_IoT_ExpressLink) the availability of new Wi-Fi modules implementing the AWS IoT ExpressLink specification. + +Espressif’s AWS IoT ExpressLink modules, [ESP32-C3-MINI-1-N4-A](https://devices.amazonaws.com/detail/a3G0h00000E2JnNEAV/ESP32-C3-AWS-IoT-ExpressLink-Module), are based on the ESP32-C3 SoC and offer Wi-Fi + Bluetooth LE 5.0 connectivity, thus providing any host MCUs with out-of-the-box, seamless, AWS cloud connectivity. Espressif’s AWS IoT ExpressLink modules offer a simple serial interface which the host MCU uses to get connected to AWS IoT services, and transform any offline product into a cloud-connected product. Espressif’s AWS IoT ExpressLink Module handles complex, yet undifferentiated, workload, such as authentication, device management, connectivity, messaging and OTA. Thus, it relieves developers from developing and maintaining complex firmware, while it provides end-to-end security and fleet management at scale. Espressif’s AWS IoT ExpressLink module comes pre-programmed with qualified firmware, and pre-provisioned with unique device certificates that remove security concerns from the manufacturing process, which is, therefore, significantly simplified. + +Espressif’s AWS IoT ExpressLink module, ESP32-C3-MINI-1-N4-A, has the [ESP32-C3 SoC](https://www.espressif.com/en/products/socs/esp32-c3) at its core, which provides a cost-effective connectivity solution with 2.4 GHz Wi-Fi and Bluetooth LE 5.0 support. This Espressif SoC ensures connection security with such features as secure boot, flash encryption and an integrated digital signature peripheral. Espressif’s AWS IoT ExpressLink module comes in a small form-factor of just 13.2mm x 16.6 mm, and offers the option of either a PCB antenna or an external antenna connector. The module comes with regulatory certifications for most of the world’s regions. + +Other topics you can read about in this month’s newsletter include: + +{{< figure + default=true + src="img/november-1.webp" + >}} + +[__Announcing the Availability of Pre-provisioned ESP32-C3, ESP32-S2 and ESP32-S3 Modules__ ](https://www.espressif.com/en/news/C3_S2_S3_Module_Pre-Provisioning_Service) + +Espressif’s pre-provisioning service greatly simplifies manufacturing complexity and security management. + +{{< figure + default=true + src="img/november-2.webp" + >}} + +[__Limited Sale: Launching ESP32-S3-BOX, a Versatile AI Voice Development Kit for the Smart Speaker Market__ ](https://www.espressif.com/en/news/ESP32-S3-BOX) + +ESP32-S3-BOX is based on the [ESP32-S3 SoC](https://www.espressif.com/en/products/socs/esp32-s3) but has an additional 16MB QSPI flash and an 8MB Octal PSRAM. + +{{< figure + default=true + src="img/november-3.webp" + >}} + +[__Introducing the ESP32-C3-based Smart Switch__ ](https://www.espressif.com/en/news/ESP-Smart-Switch) + +This solution upgrades traditional switches to smart switches, without rewiring, or configuring a gateway. It also combines low power-consumption with reliable and secure Wi-Fi connectivity. + +{{< figure + default=true + src="img/november-4.webp" + >}} + +[__ESP32-Powered Electrical Impedance Tomography Toolkit by MIT__ ](https://www.espressif.com/en/news/EIT-kit) + +MIT’s [EIT-kit](https://hcie.csail.mit.edu/research/eit-kit/eit-kit.html) supports users in creating a variety of EIT-sensing devices, and visualizing the resulting data. The EIT-kit comprises a 3D editor plugin, a sensing motherboard based on [ESP32](https://www.espressif.com/en/products/socs/esp32), a microcontroller library, and an image reconstruction API. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=17b3da1f43&e=309e9b0452), [Twitter](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=42d796ed0b&e=309e9b0452), [GitHub](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=b0a5397616&e=309e9b0452), [Instagram](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=728a543172&e=309e9b0452), [LinkedIn](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=dc4d14fad8&e=309e9b0452), and [YouTube](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=1c408cbd68&e=309e9b0452). + +You can also contact us through our [website](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=b7a2feccd8&e=309e9b0452) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/november-2022/img/november-1.webp b/content/blog/november-2022/img/november-1.webp new file mode 100644 index 000000000..c37db2727 Binary files /dev/null and b/content/blog/november-2022/img/november-1.webp differ diff --git a/content/blog/november-2022/img/november-2.webp b/content/blog/november-2022/img/november-2.webp new file mode 100644 index 000000000..acfa13fae Binary files /dev/null and b/content/blog/november-2022/img/november-2.webp differ diff --git a/content/blog/november-2022/img/november-3.webp b/content/blog/november-2022/img/november-3.webp new file mode 100644 index 000000000..aba2b8a9b Binary files /dev/null and b/content/blog/november-2022/img/november-3.webp differ diff --git a/content/blog/november-2022/img/november-4.webp b/content/blog/november-2022/img/november-4.webp new file mode 100644 index 000000000..eb72f9fad Binary files /dev/null and b/content/blog/november-2022/img/november-4.webp differ diff --git a/content/blog/november-2022/img/november-5.webp b/content/blog/november-2022/img/november-5.webp new file mode 100644 index 000000000..8b9da8f76 Binary files /dev/null and b/content/blog/november-2022/img/november-5.webp differ diff --git a/content/blog/november-2022/img/november-6.webp b/content/blog/november-2022/img/november-6.webp new file mode 100644 index 000000000..3c7ca3f55 Binary files /dev/null and b/content/blog/november-2022/img/november-6.webp differ diff --git a/content/blog/november-2022/img/november-7.webp b/content/blog/november-2022/img/november-7.webp new file mode 100644 index 000000000..b46ebc7d3 Binary files /dev/null and b/content/blog/november-2022/img/november-7.webp differ diff --git a/content/blog/november-2022/index.md b/content/blog/november-2022/index.md new file mode 100644 index 000000000..5507a5e3f --- /dev/null +++ b/content/blog/november-2022/index.md @@ -0,0 +1,87 @@ +--- +title: "November 2022" +date: 2023-01-01 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter +--- +Hi everyone, + +*electronica 2022*, the world’s leading trade fair and conference for electronics, is taking place in Munich, from 15 to 18 November 2022 and, of course, Espressif Systems will be there! + +Anticipation in the industry is high, since the last in-person trade fair took place four years ago, due to the global pandemic. [*electronica*](https://electronica.de/en/visitors/tickets-prices/) is the world’s most important industry gathering (and the only one this year) which will seamlessly cover the entire spectrum of electronics by bringing together key players, decision makers and visionaries from the global electronics community. More than 2,000 exhibitors covering a wide range of topics have already registered to present their latest technologies and solutions at this year’s trade fair. + +In terms of content, not only will *electronica* cover a huge range of topics through the offerings of its exhibitors, but it will also feature an extensive supporting program in which industry experts will impart their wealth of specialist knowledge. As is tradition, the trade fair will be complemented by the electronica Conferences, which this year will deal with the topics of Automotive, Embedded Platforms, and Wireless Systems and Applications. The *electronica* Forums will focus, in particular, on applications and solutions, providing a valuable source of inspiration for visitors, thanks to the practical presentations and panel discussions in those Forums. + +In 2022, the trade fair will be held under the motto ‘Driving sustainable progress,’ as the electronics industry plays a vital role in paving the way for future social issues and for the transition to a high-tech society. The CEOs of leading semiconductor companies will also discuss the industry’s contribution to protecting the climate at the CEO Roundtable. Additional topics of global relevance running through the trade fair include electric mobility, cybersecurity, embedded systems, industrial IoT, sustainability, smart energy, connectivity, AI, sensors and measurement technology. All in all, *electronica* offers a platform that will bring together experts and users demonstrating practice-oriented and sustainable solutions to combating the challenges of our time. + +{{< figure + default=true + src="img/november-1.webp" + >}} + +Espressif’s presence at this year’s *electronica* aims to highlight the latest ESP-based solutions, while also emphasising Espressif’s contribution to the development of high-tech solutions to some of the most pressing problems of the present-day world. To this end, Espressif is bringing to *electronica* its [comprehensive Matter solution](https://www.espressif.com/en/solutions/device-connectivity/esp-matter-solution), along with the ESP-ZeroCode Modules, which have been designed for building Matter-compatible, smart-home devices with ease. Based on [ESP32-C3](https://www.espressif.com/en/products/socs/esp32-c3) (ESP8685), [ESP32-C2](https://www.espressif.com/en/products/socs/esp32-c2) (ESP8684), and [ESP32-H2](https://www.espressif.com/en/news/ESP32_H2) SoCs, Espressif’s ESP-ZeroCode Modules offer flexibility in terms of hardware design, while also providing a ready-made, plug-and-play solution for building Matter-compatible products. + +{{< figure + default=true + src="img/november-2.webp" + >}} + +Keep reading this month’s newsletter, so you can learn more about: + +{{< figure + default=true + src="img/november-3.webp" + >}} + +[__ESP-ZeroCode Modules for Out-of-the-Box Matter Connectivity__ ](https://www.espressif.com/en/news/ESP-ZeroCode_Modules) + +Espressif is pleased to announce ESP-ZeroCode Modules for building Matter-compatible devices based on Espressif hardware with Wi-Fi and Thread (802.15.4) wireless communication protocols. + +{{< figure + default=true + src="img/november-4.webp" + >}} + +[__ESP RainMaker__ ](https://www.espressif.com/en/news/ESP_UIs_SquareLine_Studio)[__Officially Available in AWS Marketplace__ ](https://www.espressif.com/en/news/ESP_RainMaker_AWS_Marketplace) + +ESP RainMaker is available in [AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-sre2djwuggnyw), marking yet another major milestone for Espressif in the field of IoT cloud solutions. + +{{< figure + default=true + src="img/november-5.webp" + >}} + +[__ESP32-H2 & Thread SDK Officially Recognized as “Thread-Certified 1.3.0 Component”__ ](https://www.espressif.com/en/news/ESP32-H2_Thread_V1.3.0_Certified) + +Espressif can now provide its customers with the latest and most rigorously-tested [Thread solutions](https://www.espressif.com/en/support/documents/certificates) (1.3.0). + +{{< figure + default=true + src="img/november-6.webp" + >}} + +[__Developing User Interfaces for ESP-Based Custom-Made Dev Boards__ ](https://www.espressif.com/en/news/SquareLine_Studio) + +This article explains how you can use SquareLine Studio for developing UIs on custom-made boards with LCDs, which are based on an Espressif MCU. + +{{< figure + default=true + src="img/november-7.webp" + >}} + +[__EsPiFF: An ESP32 in the Raspberry Pi 4 Form Factor__ ](https://www.espressif.com/en/news/EsPiFF) + +For applications where Raspberry Pi 4 is not robust enough, or consumes excessive power, you can consider the [EsPiFF](https://www.crowdsupply.com/mdc-service-wittenburg-gmbh/espiff) — a powerful ESP32-based development board built by MDC-Service, which is a start-up by Michael Schmid and Steffen Wittenburg. + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/nuttx-getting-started/index.md b/content/blog/nuttx-getting-started/index.md index c977a9aa4..df3c9dfea 100644 --- a/content/blog/nuttx-getting-started/index.md +++ b/content/blog/nuttx-getting-started/index.md @@ -3,6 +3,7 @@ title: "Getting Started with NuttX and ESP32" date: 2024-06-20T16:54:43-03:00 tags: ["NuttX", "Apache", "ESP32", "POSIX", "Linux"] showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" authors: - "tiago-medicci" - "eren-terzioglu" diff --git a/content/blog/october-2018/img/october-1.webp b/content/blog/october-2018/img/october-1.webp new file mode 100644 index 000000000..f827717cf Binary files /dev/null and b/content/blog/october-2018/img/october-1.webp differ diff --git a/content/blog/october-2018/img/october-2.webp b/content/blog/october-2018/img/october-2.webp new file mode 100644 index 000000000..c4e59db79 Binary files /dev/null and b/content/blog/october-2018/img/october-2.webp differ diff --git a/content/blog/october-2018/img/october-3.webp b/content/blog/october-2018/img/october-3.webp new file mode 100644 index 000000000..113cf3f5d Binary files /dev/null and b/content/blog/october-2018/img/october-3.webp differ diff --git a/content/blog/october-2018/img/october-4.webp b/content/blog/october-2018/img/october-4.webp new file mode 100644 index 000000000..03cf8039d Binary files /dev/null and b/content/blog/october-2018/img/october-4.webp differ diff --git a/content/blog/october-2018/img/october-5.webp b/content/blog/october-2018/img/october-5.webp new file mode 100644 index 000000000..9279fbe72 Binary files /dev/null and b/content/blog/october-2018/img/october-5.webp differ diff --git a/content/blog/october-2018/index.md b/content/blog/october-2018/index.md new file mode 100644 index 000000000..aa12cfb72 --- /dev/null +++ b/content/blog/october-2018/index.md @@ -0,0 +1,79 @@ +--- +title: "October 2018" +date: 2018-10-02 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - ESP-IDF + - Instagram + - IoT + - Newsletter +--- +Welcome to our October Newsletter + +{{< figure + default=true + src="img/october-1.webp" + >}} + +Hi everyone, + +The beginning of autumn has been marked by a bunch of exciting Espressif-related news. First and foremost, we released the latest version of [ESP-IDF v3.1](https://github.com/espressif/esp-idf/releases/tag/v3.1) with improvements on previous features regarding its Wi-Fi and Bluetooth connectivity, as well as its Security Manager Protocol (SMP). At the same time, certain companies in Espressif’s ecosystem introduced new ESP-related features, services and products, including Olimex’s [ESP32 DevKit LiPo](https://time4ee.com/news.php?readmore=409); Atmosphere’s platform update with [Wi-Fi support for ESP32](https://atmosphereiot.com/); the [Sensything ESP32 board](https://www.cnx-software.com/2018/09/26/sensything-esp32-board-multi-sensor-data-acquisition-wi-fi-bluetooth/) with multi-sensor data acquisition, Wi-Fi and Bluetooth; Zerynth’s [combination of IoT and Blockchain, using simple Python on the ESP32-DevKitC](https://www.hackster.io/lana-vulic/combining-iot-and-blockchain-using-simple-python-093746); and, last but not least, we also got a sneak peek of the upcoming [ESP32-powered watch](https://twitter.com/sqfmi/status/1042245367897751552) by [Squarofumi](http://www.sqfmi.com/) on Twitter! + +Additionally, among the most recent independent [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview)-based projects that we distinguished were the [Pluto Quadcopter](https://twitter.com/anujdeshpandey/status/1032936504354471936) by the Indian startup [Drona Aviation](https://www.dronaaviation.com/); a [Code-Review Lamp](https://www.hackster.io/platisd/code-review-lamp-d52e87), notifying developer teams of pending code reviews (this one is for the fellow programmers out there!); the [Amazon Echo (IR) TV Remote](https://www.hackster.io/LIMPINGLIM/amazon-echo-ir-tv-remote-bf2c36); a [Bitcoin-activated power outlet](https://www.hackster.io/cswiger2/bitcoin-activated-power-outlet-ffc679); and an [IoT Pool Monitor](https://www.hackster.io/justind000/iot-pool-monitoring-with-thingsboard-4b0826), + +measuring the pH, Oxidation-Reduction Potential (ORP) and temperature of the water. The global community of developers never ceases to impress us with their new and inventive uses of Espressif products! + +Other news you can find in the October edition of our newsletter include the two-day courses on building end-products with ESP-IDF, which we are jointly hosting with Grid Connect in Chicago and San Francisco this month; the release of Espressif’s Alexa SDK, which provides an implementation of Amazon’s Alexa Voice Service for the ESP32 microcontroller; an interview with the best-selling writer and maker, Erik Bartmann, about his latest book on ESP32, *Das ESP32 Praxisbuch *(The ESP32 Practice Book); and an ESP32-powered badge, Ph0xx, which can be easily turned into a bipedal mini robot! + +Hope you enjoy this month’s newsletter, and keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), and [Instagram](https://www.instagram.com/espressif_systems/). We respond to all of your messages as quickly as possible! + +Best wishes, + +John Lee. + +Senior Customer Support Officer + +## ESP32 Developer Trainings in the USA + +{{< figure + default=true + src="img/october-2.webp" + >}} + +Espressif is partnering with Grid Connect for the first time to host developer trainings on ESP32 in Chicago and San Francisco. These hands-on, in-depth trainings will focus on building end-products using Espressif’s IoT Development Framework (ESP-IDF). These 2-day trainings will cover the latest [version of the ESP-IDF (v3.1)](https://github.com/espressif/esp-idf/releases/tag/v3.1) and will be given by Espressif engineers. + +## Alexa on ESP32 + +{{< figure + default=true + src="img/october-3.webp" + >}} + +Espressif’s Alexa SDK has just been released, providing an implementation of Amazon’s Alexa Voice Service for the [ESP32 microcontroller](https://www.espressif.com/en/products/hardware/esp32/overview). This is meant to facilitate developers to evaluate ESP32-based devices integrating Alexa, such as speakers and IoT devices. + +[Keep reading](https://www.espressif.com/en/news/Alexa%20on%20ESP32?position=0&list=lBpPiKCKxDo_pxLtsU-u60pMPJ0lMH2g-85ndysyrfI) + +## New Book on ESP32 by Best-Selling Author Erik Bartmann + +{{< figure + default=true + src="img/october-4.webp" + >}} + +[Erik Bartmann](https://www.erik-bartmann.de/) is an experienced maker and writer with several bestselling books about programming and electronics under his belt. After the success of *Das ESP8266 Praxisbuch *(The ESP8266 Practice Book)* *in 2016, Erik gave us its sequel, *Das ESP32 Praxisbuch *(The ESP32 Practice Book), in July 2018. In his usual reader-friendly way, Erik illustrates step by step the great variety of projects that anyone can create with [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview). + +## Ph0xx: ESP32 Badge Turned Into Robot + +{{< figure + default=true + src="img/october-5.webp" + >}} + +Have you been to a hackathon or a high-tech event lately? Did they give you a digital badge that was interactive, hackable and reusable? Pretty cool, huh? Well, did you actually do something with your badge after the event, or did you put it in a dark desk drawer? If the latter is the case, the ESP32 Badge which can be turned into a bipedal robot might give you some inspiration as to what to do with your own badge. + +[Keep Reading](https://www.espressif.com/en/news/Ph0xx%3A%20ESP32%20Badge%20Turned%20Into%C2%A0Robot?position=2&list=lBpPiKCKxDo_pxLtsU-u60pMPJ0lMH2g-85ndysyrfI) + +*Originally published at *[*mailchi.mp*](https://mailchi.mp/a8b9e6bdf775/espressif-esp-news-october-2018?e=f9593a0e62)*.* diff --git a/content/blog/october-2019/img/october-1.webp b/content/blog/october-2019/img/october-1.webp new file mode 100644 index 000000000..412390389 Binary files /dev/null and b/content/blog/october-2019/img/october-1.webp differ diff --git a/content/blog/october-2019/img/october-2.webp b/content/blog/october-2019/img/october-2.webp new file mode 100644 index 000000000..2c080f606 Binary files /dev/null and b/content/blog/october-2019/img/october-2.webp differ diff --git a/content/blog/october-2019/img/october-3.webp b/content/blog/october-2019/img/october-3.webp new file mode 100644 index 000000000..d28c81c18 Binary files /dev/null and b/content/blog/october-2019/img/october-3.webp differ diff --git a/content/blog/october-2019/img/october-4.webp b/content/blog/october-2019/img/october-4.webp new file mode 100644 index 000000000..4dceb882c Binary files /dev/null and b/content/blog/october-2019/img/october-4.webp differ diff --git a/content/blog/october-2019/img/october-5.webp b/content/blog/october-2019/img/october-5.webp new file mode 100644 index 000000000..5e05fad28 Binary files /dev/null and b/content/blog/october-2019/img/october-5.webp differ diff --git a/content/blog/october-2019/index.md b/content/blog/october-2019/index.md new file mode 100644 index 000000000..83e8c35de --- /dev/null +++ b/content/blog/october-2019/index.md @@ -0,0 +1,86 @@ +--- +title: "October 2019" +date: 2019-11-07 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - IoT + - Newsletter + +--- +{{< figure + default=true + src="img/october-1.webp" + >}} + +Hi everyone, + +Our friends at [ThingPulse](https://thingpulse.com/about/), Daniel Eichhorn and Marcel Stör, are preparing a treat for the European fans of Espressif boards. They are holding three IoT workshops in beautiful Zürich, in November 2019 and January 2020, which will be about introducing the Internet of Things to children and adults in an interactive setup with many hands-on exercises on __Espressif boards__ . Anyone from 12 years up, including grandparents with kids, are welcome! Prior programming skills may prove to be helpful but are not required. + +The ThingPulse IoT workshops will cover topics such as: + +- Wi-Fi Weather Station with ESP8266 and Arduino IDE __(November 16th, 2019)__ This session is aimed at Arduino and ESP8266 beginners with affinity for technology and computer science. +- Build and Program a Color Weather Station with ESP8266 and Arduino IDE __(November 30th, 2019)__ Participants will be shown how to solder and then program a weather station with a fancy color touch display. +- “You’ve got Mail” — Advanced IoT with ESP32 and Platform IO __(January 15th, 2020)__ Attendees will learn about ESP32 features and quirks, as well as how to build a mailbox-to-push-notification sensing device. + +So, do you -or someone you know- want to learn more about IoT, but don’t know where to start from? Then, the ThingPulse IoT workshops are for you, because they are all about learning, sharing and a having a good time! Places are limited and filling up quickly. So, hurry up! + +Other topics you can read in this month’s newsletter include: + +- ESP-BLE-MESH, which is now fully certified by Bluetooth SIG; +- ESP32 being launched into space, which happened through a research project at the German Aerospace Center; +- ESP8266, which is now listed on the Tencent Cloud, supporting the quick connection of ESP8266 to IoT Explorer, Tencent’s Cloud IoT platform; +- ESP32-based smart devices winning innovation-of-the-year awards in India. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif/), [Twitter](https://twitter.com/EspressifSystem), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), [Instagram](https://www.instagram.com/espressif_systems/) and [YouTube](https://www.youtube.com/channel/UCDBWNF7CJ2U5eLGT7o3rKog). We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer + +## ESP-BLE-MESH Is Now Fully Certified by Bluetooth-SIG + +{{< figure + default=true + src="img/october-2.webp" + >}} + +Espressif is pleased to announce that [ESP-BLE-MESH has been fully certified by the Bluetooth Special Interest Group (SIG)](https://launchstudio.bluetooth.com/ListingDetails/94304) as of September 2019. This officially ensures that our embedded software solution meets the Bluetooth SIG standards for global product interoperability, and complies with the organization’s License Agreement. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP_BLE_MESH_SIG_Certified) + +## ESP32 Launched Into Space + +{{< figure + default=true + src="img/october-3.webp" + >}} + +Nico Maas, an IT Engineer and Ground Controller from the Microgravity User Support Center (MUSC) at the German Aerospace Center (DLR), worked with a team of other researchers on [developing](https://aip.scitation.org/doi/full/10.1063/1.5118855) a new commercial off-the-shelf on-board computer platform for sounding rockets. This experiment was based on [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview) and resulted in Espressif’s flagship chip being launched into space! + +[*Keep Reading*](https://www.espressif.com/en/news/ESP32_Launched_Into_Space) + +## ESP8266 Listed on Tencent Cloud + +{{< figure + default=true + src="img/october-4.webp" + >}} + +Tencent is a Chinese multinational conglomerate specializing in various Internet-related services and products, entertainment, Artificial Intelligence and the Internet of Things, both in China and abroad. Espressif’s Cloud IoT AT firmware now supports the quick connection of the powerful [ESP8266](https://www.espressif.com/en/products/hardware/esp8266ex/overview) module to [IoT Explorer](https://cloud.tencent.com/product/iotexplorer), which is Tencent’s Cloud IoT platform. + +[*Keep Reading*](https://www.espressif.com/en/news/ESP8266_Listed_on_Tencent_Cloud) + +## ESP32-based Smart Devices Win Innovation-of-the-Year Award in India + +{{< figure + default=true + src="img/october-5.webp" + >}} + +Sirena Technologies Private Limited, a partner company of Espressif’s, won the “Alexa Voice Service — Innovation of the Year” award at last month’s Alexa Vox Conference in New Delhi, India. The Alexa Adaptor and Smart Speaker are two award-winning smart voice products, both of whom use Espressif’s [ESP32 chip](https://www.espressif.com/en/products/hardware/esp32/overview). + +[*Keep Reading*](https://www.espressif.com/en/news/ESP32_Alexa_VoxCon) + +*Originally published at *[*https://mailchi.mp*](https://mailchi.mp/148f423ee1d0/espressif-esp-news-october-2019?e=f9593a0e62)*.* diff --git a/content/blog/october-2020/img/october-1.webp b/content/blog/october-2020/img/october-1.webp new file mode 100644 index 000000000..a00fca254 Binary files /dev/null and b/content/blog/october-2020/img/october-1.webp differ diff --git a/content/blog/october-2020/img/october-2.webp b/content/blog/october-2020/img/october-2.webp new file mode 100644 index 000000000..a035a46ee Binary files /dev/null and b/content/blog/october-2020/img/october-2.webp differ diff --git a/content/blog/october-2020/img/october-3.webp b/content/blog/october-2020/img/october-3.webp new file mode 100644 index 000000000..e0545b1f1 Binary files /dev/null and b/content/blog/october-2020/img/october-3.webp differ diff --git a/content/blog/october-2020/img/october-4.webp b/content/blog/october-2020/img/october-4.webp new file mode 100644 index 000000000..1d30a6b88 Binary files /dev/null and b/content/blog/october-2020/img/october-4.webp differ diff --git a/content/blog/october-2020/img/october-5.webp b/content/blog/october-2020/img/october-5.webp new file mode 100644 index 000000000..5b6f498b5 Binary files /dev/null and b/content/blog/october-2020/img/october-5.webp differ diff --git a/content/blog/october-2020/img/october-6.webp b/content/blog/october-2020/img/october-6.webp new file mode 100644 index 000000000..703ac3454 Binary files /dev/null and b/content/blog/october-2020/img/october-6.webp differ diff --git a/content/blog/october-2020/index.md b/content/blog/october-2020/index.md new file mode 100644 index 000000000..fafa601cc --- /dev/null +++ b/content/blog/october-2020/index.md @@ -0,0 +1,77 @@ +--- +title: "October 2020" +date: 2020-11-17 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +aliases: + - october-202 +--- +Hi everyone, + +We are really happy about the successful outcome of the webinar we jointly organised with Amazon Web Services this month. It was an online event which took place on Tuesday, 27 October 2020. The main objective of this webinar was to demonstrate how to build voice-interactive products with AVS Integration for AWS IoT Core, using Espressif’s [ESP32-Vaquita-DSPG](https://www.espressif.com/en/news/ESP32-Vaquita-DSPG_and_SDK) development kit. + +As we all know, Alexa-based voice-interactive solutions have become a mainstream way for controlling IoT devices. With the advent of Alexa Voice Service (AVS) Integration for AWS IoT Core, low-power, low-cost microcontrollers have started playing a significant role in creating connected devices with Alexa built-in capabilities. So, in our webinar we showed participants how a solution based on Espressif’s ESP32-Vaquita-DSPG development kit, in conjunction with the rich set of Amazon Web Services, can be used to simplify building Alexa-based voice-interactive devices. + +{{< figure + default=true + src="img/october-1.webp" + >}} + +More specifically, we talked about AVS Integration for the AWS IoT Core protocol, the hardware and software system architecture that is based on ESP32-Vaquita-DSPG, the engineering efforts required to build voice-controlled devices, the ways in which users can accelerate development and manage deployment nowadays, and finally the manufacturing and certification issues that should always be taken into consideration. + +Our webinar was addressed to Technical Decision Makers in Engineering, Solution Architects, Product Managers of voice-enabled products, Engineers of Embedded Hardware/Software, and Cloud Engineers. Indeed, the audience we attracted on the day was truly diverse, enthusiastic and keen on learning more about the technological solutions we presented. We were delighted to welcome all of them to an event that was both fun and useful, while we also look forward to continuing our collaboration with AWS on all fronts. + +Other topics you can read about in this month’s newsletter include: + +## ESP HomeKit SDK Opened Up on GitHub + +{{< figure + default=true + src="img/october-2.webp" + >}} + +[ESP HomeKit SDK](https://github.com/espressif/esp-homekit-sdk#esp-homekit-sdk), which is Espressif’s own implementation of the Apple HomeKit, has become available on GitHub and supports [ESP32](https://www.espressif.com/en/products/socs/esp32), [ESP32-S2](https://www.espressif.com/en/products/socs/esp32-s2) and [ESP8266](https://www.espressif.com/en/products/socs/esp8266). So, developers can now create smarter and safer home devices with the ESP HomeKit SDK, taking advantage of Espressif’s full support for all the stages of development, certification and manufacturing. + +## New ESP RainMaker Features + +{{< figure + default=true + src="img/october-3.webp" + >}} + +One of the most recent new features we have added to [ESP RainMaker](https://rainmaker.espressif.com/) is the [ESP RainMaker Scheduling](https://rainmaker.espressif.com/docs/scheduling.html). You can now schedule certain actions that will be triggered on your devices at any given time on any specified day or days of the week. + +## ESP32-S2-based FeatherS2 Released + +{{< figure + default=true + src="img/october-4.webp" + >}} + +Unexpected Maker, who is also known as Seon Rozenblum, has officially released [*FeatherS2*](https://unexpectedmaker.com/shop/feathers2-esp32-s2). This is a Feather-compatible development board that has been built around Espressif Systems’ latest [ESP32-S2 microcontroller](https://www.espressif.com/en/products/socs/esp32-s2). + +## SwarmDrive: NickStick’s ESP32-Powered Dev Board for Experimentation and Learning + +{{< figure + default=true + src="img/october-5.webp" + >}} + +[NickStick](https://www.crowdsupply.com/nickstick)’s SwarmDrive has an [ESP32](https://www.espressif.com/en/products/socs/esp32)-powered board and strong educational documentation. As such, it helps professionals and students alike learn about different commutation algorithms and all the other aspects of electric (BLDC) motors. + +## Rosie: The Robot Maid Using ESP8266 + +{{< figure + default=true + src="img/october-6.webp" + >}} + +[Rosie](https://www.personalrobots.biz/rosie-the-robot-maid-replica-using-esp8266-and-arduino/) is created by DJ Harrigan, who was inspired by a character from the famous cartoon entitled “The Jetsons”. This open-source robot maid uses Arduino and [ESP8266](https://www.espressif.com/en/products/socs/esp8266), is easy-to-build and is intended to be the first step towards DIY robots. + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=c4a255994f&e=309e9b0452), [Twitter](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=65227f5ce9&e=309e9b0452), [GitHub](https://github.com/espressif), [Instagram](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=7a5d88fa55&e=309e9b0452), [LinkedIn](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=4a49c35eb3&e=309e9b0452), and [YouTube](https://espressif.us15.list-manage.com/track/click?u=40830afd8eb6f70ab5e47b7a4&id=60d3d0280a&e=309e9b0452). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto://newsletter@espressif.com)! We try to respond to all of your messages as quickly as possible! + +Best wishes,John Lee.Senior Customer Support Officer diff --git a/content/blog/october-2021/img/october-1.webp b/content/blog/october-2021/img/october-1.webp new file mode 100644 index 000000000..939c3c589 Binary files /dev/null and b/content/blog/october-2021/img/october-1.webp differ diff --git a/content/blog/october-2021/img/october-2.webp b/content/blog/october-2021/img/october-2.webp new file mode 100644 index 000000000..bc758d961 Binary files /dev/null and b/content/blog/october-2021/img/october-2.webp differ diff --git a/content/blog/october-2021/img/october-3.webp b/content/blog/october-2021/img/october-3.webp new file mode 100644 index 000000000..5c9aed385 Binary files /dev/null and b/content/blog/october-2021/img/october-3.webp differ diff --git a/content/blog/october-2021/img/october-4.webp b/content/blog/october-2021/img/october-4.webp new file mode 100644 index 000000000..9dd5f154c Binary files /dev/null and b/content/blog/october-2021/img/october-4.webp differ diff --git a/content/blog/october-2021/img/october-5.webp b/content/blog/october-2021/img/october-5.webp new file mode 100644 index 000000000..e07586c91 Binary files /dev/null and b/content/blog/october-2021/img/october-5.webp differ diff --git a/content/blog/october-2021/index.md b/content/blog/october-2021/index.md new file mode 100644 index 000000000..f52b59964 --- /dev/null +++ b/content/blog/october-2021/index.md @@ -0,0 +1,74 @@ +--- +title: "October 2021" +date: 2021-11-07 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +Last week __Amazon announced__ [__Alexa Connect Kit SDK (ACK SDK)__ ](https://developer.amazon.com/en-US/blogs/alexa/device-makers/2021/10/new-alexa-connect-kit-sdk-for-smart-home-devices), a software package that enables Original Design Manufacturers (ODMs) and System Integrators (SIs) to build their own ACK-based modules and differentiated, Alexa-compatible, smart-device solutions without having to worry about managing cloud services, building an app, or writing an Alexa skill. + +ODMs and SI solution providers, such as Leedarson, Tonly, Innotech, and Linkplay, __are already developing solutions with ACK SDK on Espressif hardware__ . With the new ACK SDK, developers can build their own Alexa-compatible solutions with the same benefits as ACK, and with more control over costs and features. + +On this occasion, __Espressif’s Director of Technical Marketing, Mr. Amey Inamdar said:__ “We are pleased to be part of the ACK SDK program, and excited to partner with Amazon to announce our first ACK SDK-compatible development kit. Espressif’s ACK SDK-compatible development kit is going to make it even easier for solution providers and device makers to use our products to build innovative, connected-devices using the best-in-class ACK SDK”. + +[Here](https://developer.amazon.com/en-US/blogs/alexa/device-makers/2021/10/new-alexa-connect-kit-sdk-for-smart-home-devices), you can read more about how the new ACK SDK works, and how you can start building with it today. + +{{< figure + default=true + src="img/october-1.webp" + >}} + +*Picture courtesy of Amazon’s *[*Device Makers Blog*](https://developer.amazon.com/en-US/blogs/alexa/device-makers/2021/10/new-alexa-connect-kit-sdk-for-smart-home-devices) + +Other topics you can read about in this month’s newsletter include: + +{{< figure + default=true + src="img/october-2.webp" + >}} + +[__ESP32-H2 Officially Recognised as a “Thread-Certified Component” and a “Zigbee-Compliant Platform”__ ](https://www.espressif.com/en/media_overview/news/esp32-h2-officially-recognized-%C2%A0%E2%80%9Cthread-certified-component%E2%80%9D-and-%E2%80%9Czigbee) + +[ESP32-H2](https://www.espressif.com/en/news/ESP32_H2) has been granted the official “[Thread Interoperability Certificate](https://www.espressif.com/sites/default/files/ESP32-H2%20Thread%20Certification.pdf)”, while it has also been certified as a “[Zigbee-Compliant Platform](https://www.espressif.com/sites/default/files/ESP32-H2%20Zigbee%20Compliant%20Platform%20Certification.pdf)”, according to the relevant certification issued by the [Connectivity Standards Alliance (CSA)](https://csa-iot.org/). + +{{< figure + default=true + src="img/october-3.webp" + >}} + +[__Golioth Qualified on Espressif’s ESP32__ ](https://www.espressif.com/en/media_overview/news/golioth-qualified-espressif%E2%80%99s-esp32) + +[Golioth](https://golioth.io/) has been qualified on [Espressif Systems’ ESP32](https://www.espressif.com/en/products/socs/esp32), which it naturally recommends as the easiest way to get started with Golioth’s own Cloud-connected IoT platform. + +{{< figure + default=true + src="img/october-4.webp" + >}} + +[__Support for New Operating Systems in the ESP32 Series of SoCs__ ](https://www.espressif.com/en/media_overview/news/support-new-operating-systems-esp32-series-socs) + +[NuttX](https://nuttx.apache.org/) and [Zephyr](https://www.zephyrproject.org/) are now supported on the [ESP32 series of SoCs](https://www.espressif.com/en/products/socs/esp32). Check out how it all happened! + +{{< figure + default=true + src="img/october-5.webp" + >}} + +[__VoltLog’s ESP32-Based Tasmota Floor Heating Valve Controller__ ](https://www.espressif.com/en/media_overview/news/voltlog%E2%80%99s-esp32-based-tasmota-floor-heating-valve-controller) + +Independent maker, Florin “VoltLog” C., has just [released](https://github.com/voltlog/Valve-Actuator) an [ESP32-based](https://www.espressif.com/en/products/socs/esp32), open-hardware design for building a Tasmota-compatible, ten-channel valve actuator for an in-floor heating system. + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/october-2022/img/october-1.webp b/content/blog/october-2022/img/october-1.webp new file mode 100644 index 000000000..0dfbddd18 Binary files /dev/null and b/content/blog/october-2022/img/october-1.webp differ diff --git a/content/blog/october-2022/img/october-2.webp b/content/blog/october-2022/img/october-2.webp new file mode 100644 index 000000000..e071ab97c Binary files /dev/null and b/content/blog/october-2022/img/october-2.webp differ diff --git a/content/blog/october-2022/index.md b/content/blog/october-2022/index.md new file mode 100644 index 000000000..d86337c06 --- /dev/null +++ b/content/blog/october-2022/index.md @@ -0,0 +1,50 @@ +--- +title: "October 2022" +date: 2023-01-01 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +Espressif’s first official online conference is about to get started. We will start the live broadcast on Wednesday 19 Oct at 10:00 am (Central European Summer Time). To ensure you can attend the conference, please register here: [https://devcon.espressif.com](https://devcon.espressif.com/). Registered attendees will have already received by now the YouTube links for the live event, which will enable them to not only watch the live broadcast but also participate in the Q&A session after each presentation by asking their questions in the conference chat. + +A nearly six-month preparation is reaching its culmination with a rich program. You can expect __over 30 talks__ on topics including Matter, RainMaker, ESP-IDF, Privilege Separation, Embedded Rust, Components Manager, Board Support Packages, third-party frameworks, and more! The speakers who are also Espressif engineers include: Scott Mabin, Darian Leung, Brian Ignacio, Marius Vikhammer with Sudeep Mohanty, Yi Ying, David Cermak, Rodrigo Garcia, Ricardo Tafas with Sylvio Alves, Tomas Rezucha, Zim Kalinowski, Sergei Silnov, Denys Almazov, Mahavir Jain with Sachin Parekh, Sonika Rathi with Yogesh Mantri, Adwait Patankar along with Vikram Dattu and Shubham Rastogi, Piyush Shah, Radim Karniš, Martin Gaño, Juraj Michálek with Sergio Gasquez, Jakob Hasse, Alan Carvalho, and finally Chen Shu along with Hrishikesh Dhayagude and Shubham Patil. + +{{< figure + default=true + src="img/october-1.webp" + >}} + +The daily schedule of the conference is divided into four sections lasting two hours each. Every presentation is allocated a 30-minute slot which will comprise a talk and a five-minute Q&A session at the end of it. A 15-minute break will follow each two-hour section. At the end of each day, we will have a __15-minute General Q&A session__ for any questions from the audience. This will be handled by __Espressif’s Director of Technical Marketing Amey Inamdar, and Senior Director of Engineering Kedar Sovani at the end of the first day at 19:30 CEST.__ The General Q&A session at the end of the second day will be handled by __Espressif’s VP of Software Platforms Ivan Grokhotkov at 19:45 CEST.__ Then, at the end of the entire conference, __Espressif’s Developer Advocate and Conference Organiser Pedro Minatel will share with us his closing remarks at 20:00 CEST.__ We will kick off our conference with none other than __Espressif’s Founder and CEO, Teo Swee Ann, who will deliver his welcome speech__ . Teo Swee Ann needs no special introductions. He established Espressif in 2008 and __his name has become synonymous with technological innovation ever since.__ It is always interesting to listen to what he has to say. __Our second keynote speaker is going to be our VP of Software Platforms Ivan Grokhotkov, who will talk us through all the new features of ESP-IDF v5.0., at 10:00am on Thursday, 21 October.__ + +{{< figure + default=true + src="img/october-2.webp" + >}} + +*Watch our conference trailer by clicking on the *[*photo above*](https://youtu.be/2p5TyOu2an4)*.* + +We also have several guest speakers, such as: + +- __Microsoft__ ’s Principal Program Manager __Wellington Duraes__ , and Senior Software Engineer __Ewerton Scaboro da Silva__ , whose presentation is entitled: “OTA for Your ESP32 Using Azure Divide Update”. Their presentation will be broadcast at __19:20 CEST on 20 October__ . +- __Arduino__ ’s Head of Maker Products, Open Source & Community __Alessandro Ranellucci__ , will present “News from Arduino: IDE 2.0 and Command Line Tools” at __18:20 CEST on 20 October__ . +- __Toit__ ’s CEO and Co-Founder __Kasper Lund__ , will speak about “Live Reloading of Micro-Services on Your ESP32 at __14:00 CEST on 20 October.__ +- __WOKWI__ ’s Founder __Uri Shaked__ will give a talk entitled: “Your Browser is ESP32”at __14:30 CEST on 19 October__ . +- __Adafruit__ ’s Founder and Engineer __Limor “Ladyada” Fried__ will talk about “CircuitPython for ESP32” at __19:00 CEST on 19 October.__ +- __Golioth__ ’s Developer Relations Lead __Chris Gammell,__ and Developer Relations Engineer __Mike Szczys,__ will present “Thousands of ESP32s: Device Management for ESP-IDF-Based Devices”, at __16:40 CEST on 19 October.__ + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy both attending and participating in Espressif DevCon22. Once again, you can ensure this by registering via [https://devcon.espressif.com](https://devcon.espressif.com/). + +Otherwise, keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/openai-component-accelerating-the-integration-of-openai-apis-in-projects/img/openai-1.webp b/content/blog/openai-component-accelerating-the-integration-of-openai-apis-in-projects/img/openai-1.webp new file mode 100644 index 000000000..9ad55c306 Binary files /dev/null and b/content/blog/openai-component-accelerating-the-integration-of-openai-apis-in-projects/img/openai-1.webp differ diff --git a/content/blog/openai-component-accelerating-the-integration-of-openai-apis-in-projects/img/openai-2.webp b/content/blog/openai-component-accelerating-the-integration-of-openai-apis-in-projects/img/openai-2.webp new file mode 100644 index 000000000..89fb32bee Binary files /dev/null and b/content/blog/openai-component-accelerating-the-integration-of-openai-apis-in-projects/img/openai-2.webp differ diff --git a/content/blog/openai-component-accelerating-the-integration-of-openai-apis-in-projects/img/openai-3.webp b/content/blog/openai-component-accelerating-the-integration-of-openai-apis-in-projects/img/openai-3.webp new file mode 100644 index 000000000..5fd5178a1 Binary files /dev/null and b/content/blog/openai-component-accelerating-the-integration-of-openai-apis-in-projects/img/openai-3.webp differ diff --git a/content/blog/openai-component-accelerating-the-integration-of-openai-apis-in-projects/index.md b/content/blog/openai-component-accelerating-the-integration-of-openai-apis-in-projects/index.md new file mode 100644 index 000000000..c70964a2b --- /dev/null +++ b/content/blog/openai-component-accelerating-the-integration-of-openai-apis-in-projects/index.md @@ -0,0 +1,99 @@ +--- +title: "OpenAI Component | Accelerating the integration of OpenAI APIs in projects" +date: 2023-07-24 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - ali-hassan-shah +tags: + - IoT + - Esp + - Esp Box + - OpenAI + - Espressif + +--- +Integrating OpenAI capabilities into projects has become increasingly trends in today’s fast-paced technological landscape. [OpenAI](https://platform.openai.com/docs/api-reference) offers a wide range of powerful APIs for natural language processing. However, the process of integrating these APIs can be complex and time-consuming, often requiring substantial effort and expertise. To simplify this integration process, we introduce the [OpenAI Component](https://github.com/espressif/esp-iot-solution/tree/master/components), a powerful library that streamlines the incorporation of OpenAI APIs into projects. + +{{< figure + default=true + src="img/openai-1.webp" + >}} + +__*In this article, we will demonstrating how it enables developers to easily add OpenAI capabilities to their projects without having to handle all the implementation tasks.*__ + +*This article consists of three main sections. The initial section “*__*ESP Component Registry*__ *”provides information on step involve in adding appropriate components into your ESP-IDF project. The second section focuses on providing details about the “*__*OpenAI Component”*__ *and the last section gives and update on “*__*ESP-Box*__ * *__*ChatGPT*__ * ” demo example.* + +--- + +## ESP Component Registry + +The [__ESP Component Registry__ ](https://components.espressif.com/)____ acts as a central hub for an extensive array of open-source components that can turbocharge your IoT projects. By simply performing a quick search and a few clicks, you can effortlessly obtain the desired components and seamlessly incorporate them into your IDF projects. This efficient workflow expedites your development cycle, enabling you to concentrate on creating groundbreaking IoT solutions without the burden of complex setup procedures. + +{{< figure + default=true + src="img/openai-2.webp" + >}} + +## Steps to Follow + +```shell +idf.py add-dependency "espressif/Component name^verison" +``` + +--- + +## OpenAI Component + +To provide developers with comprehensive coverage of [OpenAI API](https://platform.openai.com/docs/api-reference) features, a simple yet powerful ESP-IDF [component](https://components.espressif.com/components/espressif/openai) is introduced. This component offers extensive support, focusing on a wide range of functionalities while excluding file operations and fine-tuning capabilities. There is comprehensive [documentation](https://docs.espressif.com/projects/esp-iot-solution/en/latest/ai/openai.html) accessible to assist developers in comprehending the APIs effortlessly. + +## Usage Example + +The first step is to instantiate an object and provide a secure “API key” as a parameter. The OpenAPI key is accessible through the [OPENAI](https://openai.com/) website. To gain access to OpenAI services, you must first create an account, purchase tokens, and obtain your unique API key. + +```c +openai = OpenAICreate(key); +``` + +After creating the OpenAI object, the code calls the chatCompletion API. It sets the required parameters, sends a message (indicating it’s not the last message), and retrieves the generated response for further use or processing. + +```c +chatCompletion = openai->chatCreate(openai); +chatCompletion->setModel(chatCompletion, "gpt-3.5-turbo"); +chatCompletion->setSystem(chatCompletion, "Code geek"); +chatCompletion->setMaxTokens(chatCompletion, CONFIG_MAX_TOKEN); +chatCompletion->setTemperature(chatCompletion, 0.2); +chatCompletion->setStop(chatCompletion, "\r"); +chatCompletion->setPresencePenalty(chatCompletion, 0); +chatCompletion->setFrequencyPenalty(chatCompletion, 0); +chatCompletion->setUser(chatCompletion, "OpenAI-ESP32"); +OpenAI_StringResponse_t *result = chatCompletion->message(chatCompletion, "Hello!, World", false); //Calling Chat completion api +char *response = result->getData(result, 0); +``` + +Similarly, after instantiating the OpenAI object, the code calls the audioTranscriptionCreate API. It sets the necessary parameters, such as the audio file and language, followed by initiating the audio transcription process. Finally, it retrieves the transcription result for further use or processing. + +```c +audioTranscription = openai->audioTranscriptionCreate(openai); +audioTranscription->setResponseFormat(audioTranscription, OPENAI_AUDIO_RESPONSE_FORMAT_JSON); +audioTranscription->setLanguage(audioTranscription,"en"); +audioTranscription->setTemperature(audioTranscription, 0.2); +char *text = audioTranscription->file(audioTranscription, (uint8_t *)audio, audio_len, OPENAI_AUDIO_INPUT_FORMAT_WAV); // Calling transcript api +``` + +To explore more APIs and their functionalities, please refer to the [documentation](https://docs.espressif.com/projects/espressif-esp-iot-solution/en/latest/ai/openai.html). + +--- + +## ESP-BOX ChatGPT Demo Example + +The [updated version](https://github.com/espressif/esp-box) of the ESP-BOX ChatGPT example incorporates the OpenAI component, replacing the [older version](https://github.com/espressif/esp-box/tree/0924e7bc2cad50d3d7ca4b0f91eef7da6934d5e6/examples/chatgpt_demo). Further details on the development process can be found in the [Blog](/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs-fba0b2d2c4f2). Notably, in the newer version, we have implemented a secure method to store the Wi-Fi and OpenAI keys in non-volatile storage (NVS) using a [esp_tinyuf2](https://components.espressif.com/components/espressif/esp_tinyuf2?from_wecom=1) component. + +During the initial boot, the first binary is executed, allowing the user to enter secure credentials such as Wi-Fi and OpenAI keys. Once the credentials are entered, the system restarts, and the ChatGPT binary takes control. This binary is responsible for running the ChatGPT functionality, utilizing the secure credentials provided during the initial boot. The workflow for this process is illustrated in the figure below, providing an overview of the overall process. + +{{< figure + default=true + src="img/openai-3.webp" + >}} + +Additionally, users have the option to try out the newer version of the ESP-BOX ChatGPT example using the [ESP-Launchpad](https://espressif.github.io/esp-launchpad/?flashConfigURL=https%3A%2F%2Fraw.githubusercontent.com%2Fespressif%2Fesp-box%2Fmaster%2Flaunch.toml) without the need to compile the project locally on the machines. This option offers a convenient means for individuals to experience the improvements and advancements made in the implementation. diff --git a/content/blog/ota-firmware-updates-with-esp-privilege-separation/img/ota-1.webp b/content/blog/ota-firmware-updates-with-esp-privilege-separation/img/ota-1.webp new file mode 100644 index 000000000..4ee1009d8 Binary files /dev/null and b/content/blog/ota-firmware-updates-with-esp-privilege-separation/img/ota-1.webp differ diff --git a/content/blog/ota-firmware-updates-with-esp-privilege-separation/img/ota-2.webp b/content/blog/ota-firmware-updates-with-esp-privilege-separation/img/ota-2.webp new file mode 100644 index 000000000..0fe602e77 Binary files /dev/null and b/content/blog/ota-firmware-updates-with-esp-privilege-separation/img/ota-2.webp differ diff --git a/content/blog/ota-firmware-updates-with-esp-privilege-separation/index.md b/content/blog/ota-firmware-updates-with-esp-privilege-separation/index.md new file mode 100644 index 000000000..dceba7721 --- /dev/null +++ b/content/blog/ota-firmware-updates-with-esp-privilege-separation/index.md @@ -0,0 +1,82 @@ +--- +title: "OTA Firmware Updates with ESP Privilege Separation" +date: 2023-01-29 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - sachin-parekh +tags: + - ESP Privilege Separation + - IoT + - Security + - ESP32 +--- +Over-The-Air (OTA) firmware update is one of the most important feature of any connected device. It enables the developers to ship out new features and bug fixes by remotely updating the application. In ESP Privilege Separation, there are two applications — protected_app and user_app for which the framework provides the ability to independently update both the application binaries. In this post we will describe the independent OTA update feature under ESP Privilege Separation. + +## OTA update workflow under ESP-IDF + +Over the Air updates in ESP-IDF uses two partition system to achieve fail-safe firmware updates. + +We have already covered it in detail in one of our previous blog posts: [OTA update frameworks](/ota-updates-framework-ab5438e30c12) + +## OTA update workflow under ESP Privilege Separation + +The ESP Privilege Separation framework extends the ESP-IDF OTA mechanism for protected_app and user_app. The partition table is augmented to enable independent updates of protected_app and user_app. + +``` +# ESP Privilege Separation Partition table +# Name, Type, SubType, Offset, Size , Flags +nvs, data, nvs, , 0x6000, +phy_init, data, phy, , 0x1000, +otadata, data, ota, , 0x2000, +uotadata, data, user_ota, , 0x2000, +ota_0, app, ota_0, , 1500K, +ota_1, app, ota_1, , 1500K, +user_0, app, user_0, , 256K, +user_1, app, user_1, , 256K, +``` + +- otadata partition is responsible for selection of active firmware for the protected app. otadata partition is of size 4KiB. +- uotadata partition is responsible for selection of active firmware for the user app. uotadata partition is of size 4KiB. +- Partitions ota_0 and ota_1 denote active and passive partitions for the protected app. These partitions are of size 1500KiB as the protected app binary has bulk of the code. +- Partitions user_0 and user_1 denote active and passive partitions for the user app. These partitions are of size 256KiB as the user app is a lightweight application containing business logic. + +## User App OTA Update Workflow + +As the OTA feature is critical to the functioning of the device, the entire OTA functionality is a part of the protected application which protects it from any unintended usage. This also makes the development of user app easier as it does not have to deal with the OTA updates. + +{{< figure + default=true + src="img/ota-1.webp" + >}} + +- User app initiates an OTA update by sending a URL, which contains the latest user app firmware, to the protected app. +- Protected app does sanity tests on received URL and schedules a job to perform OTA update in background and returns to user app. +- The job downloads firmware image in passive user partition, updates uotadata entries for the user app and reboots the device. + +The framework also supports secure OTA where the authenticity of the user application is also verified by verifying the signature of the user application. + +## User App Boot-Up Flow + +{{< figure + default=true + src="img/ota-2.webp" + >}} + +- ESP Privilege Separation boot-up flow is slightly different from the traditional ESP-IDF boot-up flow. The second stage bootloader boots the protected app and the protected app is responsible for booting the user app. +- The protected app refers the uotadatapartition to select the active user partition. +- The protected app also has a option, which if enabled, verifies the signature of the user application before booting user_app +- Protected app also has provision to rollback user application in case of unexpected behaviour of newly updated user app. + +## Highlights + +- The OTA functionality is entirely handled by the protected application and user application need not worry about its implementation. +- Both, protected_app and user_app can be updated independently allowing different release timelines. +- Protected application has provision for secure OTA which ensures that only trusted user application can be executed on the device. +- It also has a fail-safe option of “Application rollback” in case the user application is incorrectly downloaded or shows unexpected behavior during bootup. + +User OTA example is available in the [__ESP Privilege Separation Repository__ ](https://github.com/espressif/esp-privilege-separation/tree/master/examples/esp_user_ota). Please give it a try and feel free to report any issues or feedback by raising an issue tracker on the GitHub repository. + +Here’s a video demonstrating a real world use case of user app OTA update using ESP Rainmaker and ESP Privilege Separation. + +{{}} diff --git a/content/blog/ota-firmware-upgrades-with-esp-rainmaker/img/ota-1.webp b/content/blog/ota-firmware-upgrades-with-esp-rainmaker/img/ota-1.webp new file mode 100644 index 000000000..071713acc Binary files /dev/null and b/content/blog/ota-firmware-upgrades-with-esp-rainmaker/img/ota-1.webp differ diff --git a/content/blog/ota-firmware-upgrades-with-esp-rainmaker/index.md b/content/blog/ota-firmware-upgrades-with-esp-rainmaker/index.md new file mode 100644 index 000000000..95bfa69c9 --- /dev/null +++ b/content/blog/ota-firmware-upgrades-with-esp-rainmaker/index.md @@ -0,0 +1,67 @@ +--- +title: "OTA Firmware Upgrades with ESP RainMaker" +date: 2020-05-24 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - piyush-shah +tags: + - Esp32 + - Esp32 Programming + - Rainmaker + - Esp32 S2 + +--- +{{< figure + default=true + src="img/ota-1.webp" + >}} + +Any Internet of Things (IoT) system is incomplete if it does not have a facility of upgrading the firmware remotely (also called Over The Air firmware upgrades). The [ESP IDF](https://github.com/espressif/esp-idf) offers a very simple interface for [OTA upgrade using a secure HTTP connection](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/esp_https_ota.html). However, the following things still remain unaddressed, as they are out of scope of the firmware development framework and require some infrastructural support: + +Setting up the infrastructure could be a challenge, especially for Makers. The recently launched [ESP RainMaker](https://rainmaker.espressif.com/) just added a facility to address all these concerns. + +## Introducing Services + +Similar to the concept of “devices”, a new concept of “services” has been introduced. They are very similar to devices but are meant for features like OTA, diagnostics, system information, etc. which do not really fall in the category of any device. + +## The OTA Service + +The OTA Service is the first standard service added. It has 3 string parameters: URL, Status and Info, which are accessible in the same way as any other device parameters. Applications can send the firmware upgrade url by writing to the URL parameter and then monitor the status by reading the Status and Info. The firmware side code has been abstracted out completely and applications need to call this single API: + +Check the [ESP RainMaker Switch example](https://github.com/espressif/esp-rainmaker/tree/master/examples/switch) for sample usage . + +This takes care of points 2 and 3 above, but point 1 could still be a pain point. To make it even easier, ESP RainMaker now also offers an image hosting service which makers can use for temporary storage of their firmware images. This facility is exposed via the ESP RainMaker CLI. + +## Using OTA Upgrades with RainMaker CLI + +To use it, set up the CLI as per the instructions [here](https://rainmaker.espressif.com/docs/cli-setup.html). Once done, ensure that your node is linked to your account and is also online. Then, follow these steps: + +``` +$ cd /path/to/esp-rainmaker/cli +$ ./rainmaker.py login # Use the same credentials used in phone app for setting up the node +$ ./rainmaker.py getnodes # Just to verify that you see the node that you want to upgrade +$ ./rainmaker.py otaupgrade +``` + +The otaupgrade command uploads the firmware image to the RainMaker server and gets back a temporary URL in return. It then sends this URL to the node using the OTA URL parameter mentioned above and then checks for the status using the Status and Info parameters. It will print the progress as below: + +``` +$ ./rainmaker.py otaupgrade 7CDFA1XXXXXX ../examples/switch/switch-2.0.bin +Uploading OTA Firmware Image... +Checking esp.service.ota in node config... +Setting the OTA URL parameter... +OTA Upgrade Started. This may take time. +Getting OTA Status... +[19:49:50] in-progress : Downloading Firmware Image +[19:49:58] in-progress : Downloading Firmware Image +[19:50:07] in-progress : Downloading Firmware Image +[19:50:16] in-progress : Downloading Firmware Image +[19:50:25] in-progress : Downloading Firmware Image +[19:50:34] in-progress : Downloading Firmware Image +[19:50:43] success : OTA Upgrade finished successfully +``` + +Once the OTA Upgrade is successful, the node reboots into the new firmware and you are done. Additional configuration and technical details can be found [here](https://rainmaker.espressif.com/docs/ota.html). + +So, get going with ESP RainMaker. Let your devices be anywhere, in the garage, in the water tank, out on the lawn, in the home or the office; you can continue playing around with the firmware by using this new OTA service. diff --git a/content/blog/ota-updates-framework/img/ota-1.webp b/content/blog/ota-updates-framework/img/ota-1.webp new file mode 100644 index 000000000..38ca7ebaa Binary files /dev/null and b/content/blog/ota-updates-framework/img/ota-1.webp differ diff --git a/content/blog/ota-updates-framework/img/ota-2.webp b/content/blog/ota-updates-framework/img/ota-2.webp new file mode 100644 index 000000000..afd804979 Binary files /dev/null and b/content/blog/ota-updates-framework/img/ota-2.webp differ diff --git a/content/blog/ota-updates-framework/img/ota-3.webp b/content/blog/ota-updates-framework/img/ota-3.webp new file mode 100644 index 000000000..6c6f93211 Binary files /dev/null and b/content/blog/ota-updates-framework/img/ota-3.webp differ diff --git a/content/blog/ota-updates-framework/img/ota-4.webp b/content/blog/ota-updates-framework/img/ota-4.webp new file mode 100644 index 000000000..aa1a97c8a Binary files /dev/null and b/content/blog/ota-updates-framework/img/ota-4.webp differ diff --git a/content/blog/ota-updates-framework/img/ota-5.webp b/content/blog/ota-updates-framework/img/ota-5.webp new file mode 100644 index 000000000..8834823c1 Binary files /dev/null and b/content/blog/ota-updates-framework/img/ota-5.webp differ diff --git a/content/blog/ota-updates-framework/img/ota-6.webp b/content/blog/ota-updates-framework/img/ota-6.webp new file mode 100644 index 000000000..3bdbc5570 Binary files /dev/null and b/content/blog/ota-updates-framework/img/ota-6.webp differ diff --git a/content/blog/ota-updates-framework/img/ota-7.webp b/content/blog/ota-updates-framework/img/ota-7.webp new file mode 100644 index 000000000..d490c3a21 Binary files /dev/null and b/content/blog/ota-updates-framework/img/ota-7.webp differ diff --git a/content/blog/ota-updates-framework/img/ota-8.webp b/content/blog/ota-updates-framework/img/ota-8.webp new file mode 100644 index 000000000..aba55e4e1 Binary files /dev/null and b/content/blog/ota-updates-framework/img/ota-8.webp differ diff --git a/content/blog/ota-updates-framework/img/ota-9.webp b/content/blog/ota-updates-framework/img/ota-9.webp new file mode 100644 index 000000000..02ca644e9 Binary files /dev/null and b/content/blog/ota-updates-framework/img/ota-9.webp differ diff --git a/content/blog/ota-updates-framework/index.md b/content/blog/ota-updates-framework/index.md new file mode 100644 index 000000000..47f3d86b2 --- /dev/null +++ b/content/blog/ota-updates-framework/index.md @@ -0,0 +1,288 @@ +--- +title: "OTA Updates Framework" +date: 2020-12-22 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - mahavir-jain +tags: + - Esp32 + - Esp Idf + - IoT + - Firmware + - Embedded Systems + +--- +In this post we will discuss the design and internal workings of Over-The-Air (OTA) Updates framework in ESP-IDF. + +We shall also cover some of the features from OTA updates, focused around __reliability__ and __security__ that can help to build better IoT products with ESP32. + +## Background Information + +Lets cover some basic information essential for understanding the overall OTA update procedure. + +## Partition Table & Flash Layout + +The [Partition table](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/partition-tables.html) defines the flash layout on ESP32. Applications can specify its desired flash layout using simple CSV files. A template looks like below: + +``` +# Name, Type, SubType, Offset, Size, Flags +# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap +nvs, data, nvs, , 0x4000, +otadata, data, ota, , 0x2000, +phy_init, data, phy, , 0x1000, +ota_0, app, ota_0, , 1M, +ota_1, app, ota_1, , 1M, +``` + +__Important points to note:__ + +- A binary partition table image is generated using the above CSV file. This occupies 4KiB (single flash sector) and is located at offset 0x9000 in default configuration. First 8 sectors (32KiB), before this, are reserved for the bootloader image. +- If more space is desired for bootloader, then the partition table offset can be adjusted using configuration option CONFIG_PARTITION_TABLE_OFFSET. +- Partitions ota_0 and ota_1 denote active and passive versions for application firmware. Identical copies ensure power safety during OTA updates. +- Application image partitions (ota_0/ota_1) are always adjusted to align on 64 KiB boundary, as that is the page size for flash cache mapping. +- Even though factory partition is supported, we will not be considering it, as that partition is not supported in anti-rollback scheme. If required, that logic can be coupled in primary firmware itself. +- For simplicity we will also not consider multiple firmware partitions (total 16) even though they are supported in ESP-IDF. + +Visual representation of above configuration for 4MiB flash part is shown below: + +{{< figure + default=true + src="img/ota-1.webp" + >}} + +## Application Image Format + +A detailed documentation can be found [__here__ ](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/app_image_format.html)__,__ whereas, here we will only consider interesting bits that are applicable for this discussion. + +Following is the application image descriptor (present at offset 0x20 in application image): + +``` +typedef struct { + uint32_t magic_word; /*!< Magic word ESP_APP_DESC_MAGIC_WORD */ + uint32_t secure_version; /*!< Secure version */ + uint32_t reserv1[2]; /*!< reserv1 */ + char version[32]; /*!< Application version */ + char project_name[32]; /*!< Project name */ + char time[16]; /*!< Compile time */ + char date[16]; /*!< Compile date*/ + char idf_ver[32]; /*!< Version IDF */ + uint8_t app_elf_sha256[32]; /*!< sha256 of elf file */ + uint32_t reserv2[20]; /*!< reserv2 */ +} esp_app_desc_t; +``` + +__Few important fields to note:__ + +- version: Firmware version embedded in image. This can be embedded in firmware image using multiple methods including configuration option or version file. By default its retrieved using command git describe --always --tags command if application is hosted in a git repository. +- secure_version : Security version embedded in image. This can be embedded using configuration option only. This is desired as it groups firmware images based on fixes against security vulnerabilities (e.g. revoked CA certificate) and thus ensuring security. More on this in followup section on anti-rollback feature. + +## Software Architecture + +{{< figure + default=true + src="img/ota-2.webp" + >}} + +Above is __simplified__ diagram that highlights some key components in an application from ESP-IDF that deals with OTA updates. In most cases, application needs to interact with public interface of [__esp_https_ota__ ](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/esp_https_ota.html#api-reference) and [__app_update__ ](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/ota.html#api-reference)____ components only. + +- __ESP_HTTPS_OTA__ : This software component provides simplified API for updating device securely over TLS channel. API accepts two mandatory parameters, HTTPS URL where firmware image is hosted and server certificate to validate server’s identity. +- __APP_Update__ : This software component abstracts out the complexity of dealing with partition and flash layer operations. It exposes simplified API that can be directly used by an application for programming firmware to device flash. Additionally it also provides some convenience APIs for dealing with rollback and anti-rollback use-cases that we shall cover in the later part of this article. + +## HTTPS OTA API + +API for secure OTA update is kept very simple and requires 2 mandatory parameters: + +- Server (Firmware) URL +- Server Certificate + +Code snippet is as shown below, assuming firmware image is hosted on github.com server: + +``` +esp_http_client_config_t config = { + .url = "https://raw.githubusercontent.com/path/to/firmware", + .cert_pem = (char *) github_server_start_pem, +};esp_err_t ret = esp_https_ota(&config); +if (ret == ESP_OK) { + esp_restart(); +} +``` + +> There is also support for advanced APIs which provide more granular control to the application in terms of validation of firmware version, monitoring OTA update progress etc.Detailed documentation for this can be found [here](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/esp_https_ota.html). + +## OTA Update Workflow + +Simplified workflow for OTA update looks like below: + +{{< figure + default=true + src="img/ota-3.webp" + >}} + +- Server authentication ensures that firmware is downloaded from trusted entity. +- Based on version information in downloaded image header, device can decide to perform upgrade. +- Validation on device side includes header and integrity (SHA256 checksum) related checks. This happens after entire firmware image is written to flash partition. +- If hardware secure boot is enabled then firmware image has signature appended to it. For flash encryption cases, it is entirely handled on device level during flash write stage. More on this in later section. + +## Boot-loader & Application Flowchart + +Two entities play an important role in OTA update process, the boot-loader and the application. + +- The boot-loader and application both rely on the partition table to extract information on various partitions and their offsets in flash. +- Partition otadata is responsible for selection of active firmware (latest updated) based on sequence numbers stored within it. +- otadata partition is allocated with 2 flash sectors (similar to active/passive firmware, 8KiB size) and thus allows for power safety while updating sequence numbers and other parameters during OTA update. + +Following is a simplified flowchart for decision making involved during OTA update in an application. Also it shows how boot-loader picks up newly updated firmware after OTA update. + +{{< figure + default=true + src="img/ota-4.webp" + >}} + +## Flash Layout Transition + +For normal OTA update scenario, flash layout transition is rather simple. It goes through following stages: + +{{< figure + default=true + src="img/ota-5.webp" + >}} + +## Stage 1 + +Newly shipped smart light bulb would have functional ota_0 partition and empty ota_1 partition. Boot-loader will always give control to firmware in ota_0 partition. + +## Stage 2 + +Application after performing OTA update will make ota_1 partition as active by updating its sequence number in otadata partition. Thus from subsequent RESET, boot-loader will always give control to firmware in ota_1 partition (till next OTA update). + +## Limitations + +In the above scenario, if there is some issue (e.g. early firmware bootup crash) in the newly updated firmware from partition ota_1, there is no way the device can fallback to previous known working firmware. + +## Consideration I — Rollback + +Typically OTA updates are staged and well tested in actual deployment scenarios, e.g. friend-family devices, beta-users and then finally to larger device groups. However this still can not ensure 100% recovery if OTA update goes wrong due to many parameters like variation in hardware attributes of device, or some rare firmware crashes. + +The firmware rollback feature provides an ability to rollback to the previous known working firmware. + +## Boot-loader & Application Flowchart + +- Unlike normal OTA update workflow, rollback case involves few intermittent states before marking firmware as valid. +- Transition from new firmware to valid or invalid is handled by both application and boot-loader. + +{{< figure + default=true + src="img/ota-6.webp" + >}} + +## Flash Layout Transition + +For rollback enabled OTA update scenario, flash layout transition goes through following stages: + +{{< figure + default=true + src="img/ota-7.webp" + >}} + +## Stage 1 + +Newly shipped smart light bulb would have functional ota_0 partition and empty ota_1 partition. Boot-loader will always give control to firmware in ota_0 partition. + +## Stage 2 + +First OTA update writes new firmware image in passive partition (ota_1) and marks its state as __ESP_OTA_IMG_NEW__ . The state is stored in otadata partition along with its sequence number. + +## Stage 3 + +After RESET, boot-loader sees a new firmware with state__ESP_OTA_IMG_NEW__ and turns its state to __ESP_IMAGE_PENDING_VERIFY__ ,____ as its functionality is yet to be validated. + +## Stage 4/4' + +Once new firmware starts execution, it can set its state to either __ESP_OTA_IMG_VALID__ or __ESP_OTA_IMG_INVALID__ based on application logic (will come to that in next section). If it fails to update the state of new and first time executing firmware then on subsequent RESET, boot-loader updates its state to __ESP_OTA_IMG_ABORTED__ and thus falls back to previous firmware. Following APIs are provided for state transitions: + +``` +// Mark firmware as valid and cancel rollback process +esp_ota_mark_app_valid_cancel_rollback();// Mark firmware as invalid and rollback to previous firmware +esp_ota_mark_app_invalid_rollback_and_reboot(); +``` + +## Firmware Functionality + +Lets discuss more on transition to “__Stage 4__ ” from above. + +Firmware functionality can be decided based on various checkpoints within it. + +- Successful initialisation +- Connection to WiFi network +- Connection to OTA server + +{{< figure + default=true + src="img/ota-8.webp" + >}} + +Connection to OTA server being the best possible option, as it ensures possibility of next OTA update. However this may need some changes on cloud agent side as well, which can acknowledge communication from device firmware. Once firmware reaches to desired checkpoint successfully, it can invoke earlier mentioned API to cancel rollback process and continue further execution. + +> Note: Rollback feature can be enabled through config option, which is discussed in more detail in followup section through working example code. + +## Consideration II — Anti-Rollback + +Rollback offers an ability to go back to previous working firmware but sometimes this may not be a desired operation. Many times, a device firmware update can also modify some secure credentials (e.g. server’s certificate) embedded within it. This implies that all older firmware images are pretty much obsolete and if executed may posses security risks. “__Firmware Anti-rollback__ ” feature can help to mitigate such issues. + +Anti-rollback is a feature that allows to execute firmware __only-if__ the____ *security version* embedded within it is greater than the one programmed in the device’s EFuse (one-time-programmable memory). Certain bits (up-to 32) can be reserved to store the *security version* in EFuse. It is ensured that this is kept in sync with the one embedded in the firmware image by both the application and boot-loader during startup. + +{{< figure + default=true + src="img/ota-9.webp" + >}} + +Above image illustrates idea of grouping firmware based on their security versions. + +- Each group (G1/G2/G3) has 3 firmware images with different firmware version but same security version. +- If device anti-rollback reserved EFuse has 2 bits set (which means security version 2) then only firmware from G2 and G3 groups will be allowed to execute on device. Firmware images from group G1 having lesser security version will not be allowed to boot. +- Anti-rollback is tightly coupled with rollback, as in version in EFuse is only updated after functionality of new firmware image is confirmed. This can be seen in “Simplified rollback OTA update flowchart” shown earlier. + +## Working Example in ESP-IDF + +Working example which implements rollback and anti-rollback features can be found [__here__ ](https://github.com/mahavirj/advanced_https_ota). This is slightly modified version of [advanced_https_ota](https://github.com/espressif/esp-idf/tree/78356d1336d23995ee78383d03ba6cac850171cd/examples/system/ota/advanced_https_ota) example from ESP-IDF. + +## Configuration Changes + +Updated sdkconfig.defaults file looks like below: + +``` +# Use custom partition table without factory partition +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_example.csv"# Enable firmware versioning from config option CONFIG_APP_PROJECT_VER_FROM_CONFIG=y +CONFIG_APP_PROJECT_VER="1"# Enable firmware rollback and anti-rollback features +CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y +CONFIG_BOOTLOADER_APP_ANTI_ROLLBACK=y# Set initial secure version to 0 CONFIG_BOOTLOADER_APP_SECURE_VERSION=0# Set secure version eFuse field size CONFIG_BOOTLOADER_APP_SEC_VER_SIZE_EFUSE_FIELD=32# Emulate secure version through flash partition for testing CONFIG_BOOTLOADER_EFUSE_SECURE_VERSION_EMULATE=y +``` + +- Both version and secure_version fields in the firmware image are set through config options itself. +- For testing purpose, we have enabled an option to emulate anti-rollback EFuses through flash partition. For actual product deployment scenario this option should be disabled. + +## Code Changes + +- We have used information from API esp_https_ota_get_img_desc() to decide if OTA update is really required or not. This API retrieves image descriptor part thus its useful to get metadata that involves firmware version and security version. This also prevent further image download from remote server and unnecessary flash program cycles. +- Important point to note is that we are considering successful Wi-Fi connection as a checkpoint within firmware to cancel rollback process and mark image as valid. +- Same API (esp_ota_mark_app_valid_cancel_rollback) is also responsible for updating security version in EFuse matching with current firmware header. + +## Consideration III — Secure Boot & Flash Encryption + +In this section we will see how OTA updates can be coupled with platform security features (more information covered [here](/blog/understanding-esp32s-security-features)) in ESP32. + +- Secure boot allows only trusted firmware to execute by verifying its signature with public key on device. +- During an OTA update, the firmware image hosted on the server should be signed with ECDSA NIST256p (secure boot v1 scheme) or RSA-3072 (secure boot v2 scheme) based private key. Signature is calculated on SHA256 checksum of firmware image, offering constant time verification, and then it is appended to it. +- As mentioned earlier in the flowchart diagram, the OTA workflow on application side includes image validation stage. For non secure boot enabled cases, validation includes only integrity checks in the form of image header magic bytes and plain SHA256 checksum. For secure boot enabled cases, it involves verification of signature using public key stored in device. +- After the secure boot verification stage, the firmware is marked as valid (non-rollback case) or new (rollback case). If signature is found to be invalid, its marked as invalid right away aborting the OTA update procedure. +- For flash encryption case there are no additional steps are required on server or device side. Firmware image hosted on the server is still in plain text format with (optional) secure boot signature appended to it. During flash write stage on the device, if flash encryption is enabled then firmware gets written in encrypted manner using hardware AES engine and key from EFuse. + +## Important Notes + +- Above discussed features like “rollback” and “anti-rollback” must be enabled before device ships out of factory. Since these features enable certain code path in bootloader, which in itself can not be updated on-field. +- It is recommended that any sort of power save modes (e.g. WiFi modem sleep) should be disabled during OTA update. This allows optimal throughput for data transfer. ESP-IDF provided examples take explicit care for this. +- During OTA update flash goes through programming operations (erase/write) and hence flash cache stays disabled. If there are any interrupts that are required to kept enabled, then they should be registered with their handler in internal code memory (IRAM). More information on this can be found [here](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/storage/spi_flash.html#iram-safe-interrupt-handlers). + +Getting robust OTA update for IoT product is very essential and some of the considerations mentioned above can be helpful in making right design decisions! diff --git a/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-1.webp b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-1.webp new file mode 100644 index 000000000..7141ba44f Binary files /dev/null and b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-1.webp differ diff --git a/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-2.webp b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-2.webp new file mode 100644 index 000000000..265464698 Binary files /dev/null and b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-2.webp differ diff --git a/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-3.webp b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-3.webp new file mode 100644 index 000000000..ca4e78212 Binary files /dev/null and b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-3.webp differ diff --git a/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-4.webp b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-4.webp new file mode 100644 index 000000000..abf77231d Binary files /dev/null and b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-4.webp differ diff --git a/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-5.webp b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-5.webp new file mode 100644 index 000000000..fd6392100 Binary files /dev/null and b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-5.webp differ diff --git a/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-6.webp b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-6.webp new file mode 100644 index 000000000..2c9509002 Binary files /dev/null and b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-6.webp differ diff --git a/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-7.webp b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-7.webp new file mode 100644 index 000000000..dc5e1da37 Binary files /dev/null and b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-7.webp differ diff --git a/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-8.webp b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-8.webp new file mode 100644 index 000000000..3fdcefb03 Binary files /dev/null and b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/img/presenting-8.webp differ diff --git a/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/index.md b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/index.md new file mode 100644 index 000000000..aa4e0c3b7 --- /dev/null +++ b/content/blog/presenting-the-advantages-of-esp32-s3-box-espressifs-ai-voice-development-kit/index.md @@ -0,0 +1,115 @@ +--- +title: "Presenting the Advantages of ESP32-S3-BOX, Espressif’s AI Voice Development + Kit" +date: 2021-11-22 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - amey-inamdar +tags: + - Sign up + - Sign in + - Sign up + - Sign in + - Follow + - '' + - '' + - Esp32 S3 + - Espressif + - Ai Voice Assistant + - IoT + - '' + - '' + - '' + - Follow + - '' + - Follow + - '' + +--- +{{< figure + default=true + src="img/presenting-1.webp" + >}} + +Espressif Systems has recently released an AI voice development kit dubbed ESP32-S3-BOX, based on ESP32-S3 Wi-Fi + Bluetooth 5 (LE) SoC. It provides a platform for developing the control of smart devices with offline and online voice assistants. ESP32-S3-BOX is ideal for developing AIoT applications with reconfigurable AI voice functions, such as smart speakers, and IoT devices that achieve human-computer voice interaction directly. Not only does ESP32-S3-BOX address connectivity use cases, but it also targets various machine-learning (AI on the edge) and HMI application scenarios. ESP32-S3-BOX comes in an attractive form-factor that differentiates it from regular PCB development boards, since users can quickly build with it applications that are fairly close to actual end products. Furthermore, ESP32-S3-BOX functions as a versatile and extensible development kit that facilitates a multitude of interesting use-cases, the most characteristic of which we will examine in this blogpost. + +{{< figure + default=true + src="img/presenting-2.webp" + >}} + +First, let’s take a look at the ESP32-S3-BOX specifications. In general, ESP32-S3-BOX is a compact, extensible kit with many features of a finished product. It is equipped with a 2.4-inch display (with a 320 x 240 resolution) integrated with a capacitive touch panel, a Type-C USB interface that supports 5 V of power input and serial/JTAG debugging, and two [Pmod](https://digilent.com/reference/pmod/start)™-compatible headers for connecting peripheral modules that expand the functionality of the original board. The two Pmod™ headers offer 16 programmable GPIOs that are able to provide 3.3 V of power supply to peripherals. + +At the core of ESP32-S3-BOX is [ESP32-S3](https://www.espressif.com/en/products/socs/esp32-s3), a Wi-Fi (802.11b/g/n) + Bluetooth 5 (LE) SoC which has a 240 MHz Xtensa® 32-bit LX7 dual-core processor with powerful AI instruction extensions that enable neural network acceleration, and efficient audio processing. Moreover, ESP32-S3-BOX has 16MB of flash and 8MB of PSRAM, in addition to the internal SRAM of ESP32-S3. + +Now, let’s look at some of the most important use cases that are readily supported by ESP32-S3-BOX. + +{{< figure + default=true + src="img/presenting-3.webp" + >}} + +## Online and Offline Voice Assistant + +ESP32-S3-BOX features an online and offline voice assistant which can be used as either a stand-alone voice assistant, or a voice-enablement module that can be integrated into other devices. + +For every high-quality voice assistant, a high-performance audio front-end and a wake-word engine are essential. Indeed, ESP32-S3-BOX supports Espressif’s Audio Front-End (AFE) algorithms that take advantage of the AI accelerator available in the ESP32-S3 SoC. Hence, ESP32-S3-BOX achieves a great performance, without requiring an external DSP co-processor. The combination of the AI accelerator and Espressif’s AFE algorithms achieves a 360-degree and far-field 5 m pickup with only two microphones, while ensuring high-quality, stable audio data; it also improves the quality of the target audio source in high-SNR scenarios, thus achieving an excellent performance in voice interaction. On this note, Espressif’s AFE algorithms have been qualified by Amazon as a “Software Audio Front-End” solution for Alexa built-in devices. + +Espressif’s [ESP-Skainet](https://github.com/espressif/esp-skainet) SDK provides a reliable offline voice assistant that enables developers to configure up to 200 commands. Espressif’s [Alexa for IoT SDK](https://github.com/espressif/esp-va-sdk) provides an easy way to integrate the Alexa functionality into IoT devices. Both of these assistants are available on ESP32-S3-BOX, thus addressing any developer requirements for offline and online voice assistants. Practical examples of these will be made available shortly. + +## HMI Touch Screen + +{{< figure + default=true + src="img/presenting-4.webp" + >}} + +ESP32-S3-BOX has a 320x240 capacitive touch screen that can be used for HMI applications, such as control panels. ESP32-S3 SoC’s improved PSRAM interface and computing power support a touch screen with a high refresh rate. Espressif has integrated [LVGL](https://github.com/espressif/esp-iot-solution/blob/release/v1.1/documents/hmi_solution/littlevgl/littlevgl_guide_en.md) into its SDK, as a component, thus making it easy for developers to evaluate and port LVGL into their product designs. LVGL is a free and open-source graphics library, providing users with everything they need for creating an embedded GUI in ESP32-S3-BOX, with easy-to-use graphical elements and advanced visual effects, including animations and anti-aliasing. + +## Smart Gateways + +ESP32-S3-BOX can support several Espressif chip series through its Pmod™ headers, so that developers can easily build a smart gateway and integrate into it various communication protocols. This ensures connectivity for a variety of devices in a seamless way. + +{{< figure + default=true + src="img/presenting-5.webp" + >}} + +For instance, we can combine ESP32-S3-BOX with the ESP32-H2 module, which supports 802.15.4 (Thread 1.x/ZigBee 3.x) and Bluetooth 5 (LE), to build a Thread Border Router that connects a low-power Thread network to a Wi-Fi network. The router can also work as a Zigbee gateway, allowing users to control Zigbee devices through [Matter](https://buildwithmatter.com), a connectivity protocol for smart home. + +{{< figure + default=true + src="img/presenting-6.webp" + >}} + +ESP32-S3-BOX can also work as a Wi-Fi/Bluetooth gateway. After it connects to the Internet via a router, it can share its connection with neighbouring devices via hotspots . By connecting to a mobile network module (e.g. LTE, 5G, NB-IoT) through the Pmod™ headers, ESP32-S3-BOX can also be used as a portable Wi-Fi hotspot that provides neighbouring devices with internet access. + +{{< figure + default=true + src="img/presenting-7.webp" + >}} + +In addition, ESP32-S3-BOX also supports multiple third-party cloud platforms to ensure device interoperability in different ecosystems. With the help of Espressif’s one-stop AIoT could platform, [ESP RainMaker®](https://rainmaker.espressif.com), developers can use phone apps to communicate with ESP32-S3-BOX, configure GPIO pins at will, customize voice commands, and upgrade firmware via OTA. With ESP RainMaker and ESP-S3-BOX, you can convert any offline product into a connected product, just by using the Pmod™ interface. Bridge support in the ESP RainMaker integration also extends ESP-S3-BOX’s capability to control devices easily, with BLE or 802.15.4 radio, via the cloud. + +## Extensible Pmod™ Interface + +{{< figure + default=true + src="img/presenting-8.webp" + >}} + +ESP32-S3-BOX also provides two Pmod™-compatible headers (with 16 programmable GPIOs) that support interfacing with various peripherals for flexibly expanding the functions of the board. Here are a few examples of how to use ESP32-S3-BOX in this way: + +- Connect to a Micro SD card to make ESP32-S3-BOX work as a multimedia player that can store images and audio files. +- Connect to an infrared sensor to make ESP32-S3-BOX simulate a voice-enabled, infrared, remote control for an air conditioner, TV set, projector or other equipment, with offline voice commands. +- Connect to a temperature and humidity sensor or PM2.5 sensor to make ESP32-S3-BOX work as an air-quality detector that supports voice control, and displays sensor data on a screen. +- Connect to an RGB LED module to build with ESP32-S3-BOX a smart-lighting solution that supports offline voice control. +- Connect to a USB OTG module to achieve various USB applications involving a camera, 4G networking, a Wi-Fi USB disk, a USB touchpad, etc. +- Connect to a camera module to make ESP32-S3-BOX support face detection and recognition + +## Additional Resources + +Espressif provides developers with full access to its open-source technical resources, i.e. the ESP32-S3-BOX [hardware reference design and user guide](https://github.com/espressif/esp-box), [LVGL guide](https://github.com/espressif/esp-iot-solution/blob/release/v1.1/documents/hmi_solution/littlevgl/littlevgl_guide_en.md), [ESP-SR speech-recognition model library](https://github.com/espressif/esp-sr/tree/66e21f6cc384d6b4aec077c187ebb0f5fbb4c5ff) (including the wake-work detection model, speech-command recognition model, and acoustic algorithms), as well as [ESP-DL deep-learning library](https://github.com/espressif/esp-dl/blob/master/README.md) that provides APIs for Neural Network (NN) Inference, Image Processing, Math Operations and some Deep Learning Models. Furthermore, [Espressif’s IoT Development Framework (ESP-IDF)](https://www.espressif.com/en/products/sdks/esp-idf) simplifies secondary development around ESP32-S3-BOX, and supports high-performance AI applications to run on the board, thus speeding up time-to-market for the end product. Please, keep watching this space, because we shall update specific example pointers shortly. + +Espressif will continue offering its customers innovative technologies and high-performance products. We look forward to collaborating with our partners to develop more state-of-the-art applications for the AIoT industry. If you are interested in ordering ESP32-S3-BOX, please go to [AliExpress](https://www.aliexpress.com/item/1005005920207976.html), [Adafruit](https://www.adafruit.com/product/5290) or [Amazon](https://www.amazon.com/dp/B09JZ8XWCN?ref=myi_title_dp). If you want to know more about the product, please contact our [customer support team](https://www.espressif.com/en/contact-us/sales-questions), who will try and assist you as soon as possible. diff --git a/content/blog/preview-release-nimble-support-in-esp-idf/index.md b/content/blog/preview-release-nimble-support-in-esp-idf/index.md new file mode 100644 index 000000000..b8ec7082f --- /dev/null +++ b/content/blog/preview-release-nimble-support-in-esp-idf/index.md @@ -0,0 +1,20 @@ +--- +title: "Preview Release: NimBLE support in ESP-IDF" +date: 2019-03-19 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - hrishikesh-dhayagude +tags: + - Bluetooth + - Esp32 + - IoT + +--- +ESP-IDF now supports Apache Mynewt NimBLE host stack which is ported for the ESP32 platform and FreeRTOS. NimBLE is an open-source Bluetooth Low Energy (BLE) or Bluetooth Smart stack (both host and controller) fully compliant with Bluetooth 5 specifications and with support for BLE Mesh. More details can be found here: [https://mynewt.apache.org/](https://mynewt.apache.org/). NimBLE, being BLE only, is a footprint optimised stack and can be used in a variety of applications involving BLE. + +The NimBLE preview release is made available on ESP-IDF Github: [https://github.com/espressif/esp-idf/tree/feature/nimble-preview](https://github.com/espressif/esp-idf/tree/feature/nimble-preview) + +A few examples, ported from the NimBLE repository, can be found here: [https://github.com/espressif/esp-idf/tree/feature/nimble-preview/examples/bluetooth/nimble](https://github.com/espressif/esp-idf/tree/feature/nimble-preview/examples/bluetooth/nimble) + +The porting layer is kept cleaner by maintaining all the existing APIs of NimBLE along with a single ESP-NimBLE API for initialisation, making it simpler for the application developers. The documentation of NimBLE APIs can be found at: [https://mynewt.apache.org/](https://mynewt.apache.org/) diff --git a/content/blog/rainmaker-projects-firmware-considerations/img/rainmaker-1.webp b/content/blog/rainmaker-projects-firmware-considerations/img/rainmaker-1.webp new file mode 100644 index 000000000..194dee183 Binary files /dev/null and b/content/blog/rainmaker-projects-firmware-considerations/img/rainmaker-1.webp differ diff --git a/content/blog/rainmaker-projects-firmware-considerations/img/rainmaker-2.webp b/content/blog/rainmaker-projects-firmware-considerations/img/rainmaker-2.webp new file mode 100644 index 000000000..1379d0201 Binary files /dev/null and b/content/blog/rainmaker-projects-firmware-considerations/img/rainmaker-2.webp differ diff --git a/content/blog/rainmaker-projects-firmware-considerations/img/rainmaker-3.webp b/content/blog/rainmaker-projects-firmware-considerations/img/rainmaker-3.webp new file mode 100644 index 000000000..ec5c291a9 Binary files /dev/null and b/content/blog/rainmaker-projects-firmware-considerations/img/rainmaker-3.webp differ diff --git a/content/blog/rainmaker-projects-firmware-considerations/index.md b/content/blog/rainmaker-projects-firmware-considerations/index.md new file mode 100644 index 000000000..c20c1f59b --- /dev/null +++ b/content/blog/rainmaker-projects-firmware-considerations/index.md @@ -0,0 +1,73 @@ +--- +title: "RainMaker Projects: Firmware Considerations" +date: 2020-05-01 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Rainmaker + +--- +Recently we released [ESP RainMaker](https://rainmaker.espressif.com) that easily allows makers to build connected devices. Beyond the part of connecting with the phone applications, the way the applications are structured makes it much easier to build an easy to distribute firmware. Many of these features are the guidelines that are part of the [ESP-Jumpstart](https://docs.espressif.com/projects/esp-jumpstart/en/latest/) framework. Let’s look at some of these features. + +## Wi-Fi Network Configuration + +In many projects, the Wi-Fi network’s credentials (SSID/Password) are embedded within the code itself. This makes it harder to make the project easily usable by others. + +RainMaker applications utilise the [Wi-Fi Provisioning](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/provisioning/provisioning.html) firmware component, that lets users configure the Wi-Fi SSID/passphrase into the device securely over the SoftAP/BLE interface. This configuration can easily be done by users with iOS/Android phone apps. The phone applications for both, iOS and Android, with full source-code, are available for easy customisation and integration. + +{{< figure + default=true + src="img/rainmaker-1.webp" + >}} + +{{< figure + default=true + src="img/rainmaker-2.webp" + >}} + +{{< figure + default=true + src="img/rainmaker-3.webp" + >}} + +## QR Code — Security with Proof of Possession + +The Wi-Fi provisioning IDF component includes an optional field called *pop (proof of possession).* The proof-of-possession field is a per-device unique secret, that only a person with physical possession of the device has access to. The Wi-Fi provisioning step validates that the user has access to this secret before initiating the provisioning. This ensures that when the device is being provisioned, your neighbour can’t just configure it to connect to their own Wi-Fi network (since they don’t have access to the proof of possession). + +Many makers hesitated from using this, since it increases a step in the end-user’s device provisioning user-experience: the users had to look-up and enter this proof of possession secret into the phone-apps. + +The RainMaker agent makes it much easier to include the proof of possession handling by embedding it in the QR code. Each device has a unique QR code, which is displayed on the device console, or can be easily printed on a sheet of paper. + +## Reset to Factory + +This is a common feature requirement, so users can erase the earlier configuration and re-configure the device with updated settings. In RainMaker applications, all the configuration information, like the Wi-Fi credentials, is stored in an NVS partition. + +Implemented like this, the reset-to-factory is nothing but a simple *nvs-erase* operation. + +## Manufacturing Partition + +Many devices want to have some per-device unique information that should be configured at the time of building the device. This may include the unique key that the device’s use to authenticate with the RainMaker service, or any other information like UUID, and other secrets. We don’t want this information to be erased with a *Reset to Factory *action. + +The RainMaker infrastructure uses a “[manufacturing](/blog/building-products-creating-unique-factory-data-images)” partition for storing such unique information. This ensures that, + +- this unique information isn’t erased across a reset-to-factory event +- the device firmware is common across all devices, since all unique information is partitioned out +- IDF already contains the [mass_mfg ](https://github.com/espressif/esp-idf/tree/master/tools/mass_mfg)utility that lets you build these mfg partition easily and in large numbers + +## Over the Air Firmware Upgrades + +The default partitioning mechanism for RainMaker applications includes the active-passive firmware partition support from IDF. So currently, you can easily create a RainMaker parameter (of type *string*) that accepts a URL as the value. And then once you get data on this parameter, you can initiate upgrade from that link using the [esp_https_ota](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/esp_https_ota.html) component. + +## Remote Sync + +The RainMaker agent internally synchronises the state of the device with the RainMaker service over MQTT/TLS. + +The agent manages the initial communication required to [associate](https://rainmaker.espressif.com/docs/user-node-mapping.html) the end-user and the device. The other part of this implementation is implemented in the phone applications. + +Additionally the agent syncs the device state. A concept of “device parameters” is used to identify the parameters of the device (power, brightness, speed etc.). Any local changes to these parameters are published to the RainMaker service, while any remote updates are delivered to the application using a callback. + +--- + +Those were some of the highlights of the considerations that have been taken on the RainMaker applications so far. If you have a request to add as a feature, or believe we missed any other considerations, please let us know in the comments below. diff --git a/content/blog/reducing-costs-and-complexity-for-deploying-connected-devices-with-esp-hosted/img/reducing-1.webp b/content/blog/reducing-costs-and-complexity-for-deploying-connected-devices-with-esp-hosted/img/reducing-1.webp new file mode 100644 index 000000000..c40d88815 Binary files /dev/null and b/content/blog/reducing-costs-and-complexity-for-deploying-connected-devices-with-esp-hosted/img/reducing-1.webp differ diff --git a/content/blog/reducing-costs-and-complexity-for-deploying-connected-devices-with-esp-hosted/img/reducing-2.webp b/content/blog/reducing-costs-and-complexity-for-deploying-connected-devices-with-esp-hosted/img/reducing-2.webp new file mode 100644 index 000000000..1c5440063 Binary files /dev/null and b/content/blog/reducing-costs-and-complexity-for-deploying-connected-devices-with-esp-hosted/img/reducing-2.webp differ diff --git a/content/blog/reducing-costs-and-complexity-for-deploying-connected-devices-with-esp-hosted/img/reducing-3.webp b/content/blog/reducing-costs-and-complexity-for-deploying-connected-devices-with-esp-hosted/img/reducing-3.webp new file mode 100644 index 000000000..72e122071 Binary files /dev/null and b/content/blog/reducing-costs-and-complexity-for-deploying-connected-devices-with-esp-hosted/img/reducing-3.webp differ diff --git a/content/blog/reducing-costs-and-complexity-for-deploying-connected-devices-with-esp-hosted/index.md b/content/blog/reducing-costs-and-complexity-for-deploying-connected-devices-with-esp-hosted/index.md new file mode 100644 index 000000000..3075eed8a --- /dev/null +++ b/content/blog/reducing-costs-and-complexity-for-deploying-connected-devices-with-esp-hosted/index.md @@ -0,0 +1,90 @@ +--- +title: "Reducing costs and complexity for deploying connected devices with ESP-Hosted" +date: 2022-07-31 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - anant-raj-gupta +tags: + - Esp32 + - Espressif + - Wifi + - IoT + - Connectivity + +--- +Connecting your devices to the cloud is a topic which is actively discussed across multiple industries as it is not a hidden fact that there are numerous advantages to doing so. To name a few common advantages across various industries — + +- __Accessibility:__ With devices connected to the cloud, accessing them anywhere, anytime across the globe is possible with a click of a button or a fingertip. +- __Back up your data__ : Most cloud services will provide facilities to back up your critical data collected through these connected devices. +- __Over-The-Air (OTA) updates:__ One of the most important benefits is the capability of updating your devices' FW/SW remotely. This is critical to keep your devices secure and reduces maintenance costs significantly. +- __Improved Productivity:__ With automation and increased collaboration between different devices (Machine-to-Machine), the time spent by valuable resources on getting things done is reduced drastically which results in much higher productivity. + +These well-known advantages are making the technology widely accepted across various industries so much so that *“Over 60% of organisations currently use IoT, with only 9% of them currently having none at all.”* (*IoT Developer Survey, Eclipse Foundation[1]*) + +But still, there are challenges for the adoption of the technology with I__ntegration with existing technology__ and __cost of implementation__ remaining two of the biggest barriers as per the *GSMA Intelligence Enterprise IoT Survey[2]* + +{{< figure + default=true + src="img/reducing-1.webp" + >}} + +__Espressif’s ESP-Hosted__ is a solution to cater to the above two barriers and is aimed to ease the integration complexities by providing standard software interfaces which require no or minimal changes to the existing solutions, as well as, reduce the development timelines significantly by providing open source solution which works “off-the-shelf” thus lowering the development costs. + +The latest __ESP-Hosted NG__ solution from Espressif is targeted toward Linux or Android-based systems which want to add wireless and cloud connectivity to their existing products as well as for IoT Gateways. This is important as Linux is the number one operating system with a 43% market share amongst all connected devices as per the *IoT Developer survey conducted by the Eclipse organisation[1]*. + +## ESP-Hosted + +ESP-Hosted is an open source solution that provides a way to use Espressif SoCs and modules as a communication co-processor. This solution provides wireless connectivity (Wi-Fi and BT/BLE) to the host microprocessor(MPU) or microcontroller(MCU), allowing it to communicate with other devices. ESP-Hosted communicates with the host processor through commonly available UART, SPI or SDIO peripheral interface. + +{{< figure + default=true + src="img/reducing-2.webp" + >}} + +This architecture which separates the wireless connectivity module from the main host processing module is beneficial as it adds the wireless connectivity to existing MCU/MPU-based solutions providing the following advantages. + +- __Faster development cycles__ — The ESP-Hosted help the connectivity module to connect over the standard 802.11 interface (ESP-Hosted-NG) or an 802.3 interface (ESP-Hosted-FG) and thus acts as a“plug & play” device +- __Reduce re-qualification/re-certification__ __efforts__ — As the ESP-Hosted does not touch the user-space applications, adding the connectivity module will not require developers to re-qualify or re-certify the majority of their software. +- __Power Saving__ — The main MPU/MCU can remain in low power mode without being interrupted to stay connected to the network. The main host needs to only get involved when there are actual tasks to perform offloading all the connectivity overheads to the connectivity module. +- __Easier upgrades and Product variants__ — The architecture enables the developers to easily upgrade for better wireless connectivity or have multiple variants of the same product with different connectivity options. Such an example is shown below in which the developer can use the same Host applications and software but have a variety of options for wireless connectivity from Wi-Fi4 to Wi-Fi6 to Wi-Fi6 dual band. + +{{< figure + default=true + src="img/reducing-3.webp" + >}} + +On top of the above-stated development advantages of the two chip architecture, by choosing the ESP-Hosted solution you also get Espressif’s easy availability of modules and a cost effective solution which has acceptable performance levels for a majority of the applications. + +__ESP-Hosted is open-source__ and Espressif makes the [source code](https://github.com/espressif/esp-hosted) available for developers to take advantage of the rich features of the ESP32 family of SoCs. The developers can make use of the IO and HMI capabilities of the [ESP32](https://www.espressif.com/en/products/socs/esp32) and the [ESP32-S3](https://www.espressif.com/en/products/socs/esp32-s3) or the advanced security features such as the Digital Signature Peripheral of the [ESP32-C3](https://www.espressif.com/en/products/socs/esp32-c3) device. The possibilities are endless. + +## Variants of ESP-Hosted + +The ESP-Hosted solution is available in two variants as mentioned below. The differentiation factor here is the type of network interface presented to the host and the way Wi-Fi on ESP SoC/module is configured/controlled. Both the variants have their respective host and firmware software. + +## ESP-Hosted-FG + +This is a first-generation ESP-Hosted solution. This variant provides a standard 802.3 (Ethernet) network interface to the host. In order to achieve this, the host is presented with the following: + +- A simple 802.3 network interface which essentially is an Ethernet interface +- A lightweight control interface to configure Wi-Fi on the ESP SoC +- A standard HCI interface + +The use of the simple 802.3 interface for this solution makes it ideal to be used with MCU hosts. The MCU application can continue to take advantage of the standard TCP/IP stack and prevents significant changes to the host application for using the AT firmware-based approach or integrating the complex 802.11 interface. + +## ESP-Hosted-NG + +This is the Next-Generation ESP-Hosted solution specifically designed for hosts that run Linux operating system. __*This variant of the solution takes a standard approach while providing a network interface to the host. *__ This allows usage of standard Wi-Fi applications such as wpa_supplicant to be used with ESP SoCs/modules. This solution offers the following: + +- 802.11 network interface which is a standard Wi-Fi interface on a Linux host +- Configuration of Wi-Fi is supported through standard cfg80211 interface of Linux +- A standard HCI interface + +## Our Recommendation + +- If you are using an __*MCU host*__ , you have to use __*ESP-Hosted-FG.*__ +- If you are using a __*Linux host*__ , we recommend __*ESP-Hosted-NG*__ since it takes a standard approach which makes it compatible with widely used user space applications/services such as wpa_supplicant, Network Manager etc. + +__References -__ *1. *[*IoT Developer Survey, Eclipse Foundation*](https://f.hubspotusercontent10.net/hubfs/5413615/2020%20IoT%C2%A0Developer%20Survey%20Report.pdf)*2. *[*GSMA Intelligence Enterprise IoT Survey*](https://data.gsmaintelligence.com/api-web/v2/research-file-download?id=58621970&file=141220-Global-Mobile-Trends.pdf) + +*Thanks to *[*Amey Inamdar*](https://medium.com/u/96a9b11b7090?source=post_page-----63ff9511ddef--------------------------------)* for the review and feedback.* diff --git a/content/blog/running-alexa-cpp-sdk-on-esp32/img/running-1.webp b/content/blog/running-alexa-cpp-sdk-on-esp32/img/running-1.webp new file mode 100644 index 000000000..7ef33d4da Binary files /dev/null and b/content/blog/running-alexa-cpp-sdk-on-esp32/img/running-1.webp differ diff --git a/content/blog/running-alexa-cpp-sdk-on-esp32/index.md b/content/blog/running-alexa-cpp-sdk-on-esp32/index.md new file mode 100644 index 000000000..343f3f4ca --- /dev/null +++ b/content/blog/running-alexa-cpp-sdk-on-esp32/index.md @@ -0,0 +1,52 @@ +--- +title: "Running Alexa CPP SDK on ESP32" +date: 2018-05-18 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Framework + - Alexa + +--- +Back in late 2017, when Amazon launched their C++ SDK for Alexa, we thought it would be fun to port the SDK on ESP32. It not only will showcase the powerful development tools and execution environment that ESP32 currently has, but it will also be a great way to run Alexa on ESP32. + +We recently launched a beta preview of this [Alexa on ESP32](https://github.com/espressif/esp-avs-sdk) on github. + +The Alexa C++ SDK is targetted for micro-processores, and is quite heavy to be run on micro-controllers. We wanted to see what kind of a load would it generate on ESP32. Thankfully, the hardware (ESP [WROVER](https://www.espressif.com/en/products/hardware/esp-wrover-kit/overview) module) and the software development framework ([IDF](https://github.com/espressif/esp-idf)) were very robust to support such performance intensive use case. Here are some details: + +## Threads + +In a normal Wi-Fi connected state, the ESP32 typically forks about __13 threads__ for its operation. These include threads for Wi-Fi, the network stack, application threads among other things. + +In the normal Alexa operation, the SDK forks a whopping __47 threads__ (inclusive of the 13 threads above) to get the job done. All these threads merrily co-ordinate with each other on the ESP32’s two cores performing audio record, transmit, receive, decode and playback operation. + +## Memory + +All these threads need to have their stacks in memory. Additionally, we need significantly large ring buffers for audio record and playback. And then there’s 2 TLS connections (one for HTTP2 for the primary Alexa communication, and the other for HTTP1.1 managing OAuth). + +The __SPIRAM__ (external SPI memory) is heavily used for many of these buffers and thread stacks. Although being accessed over SPI (and hence relatively slower than the main memory), the caches on the ESP32 ensured that we did not see an end-user visible degradation. + +In terms of memory, we try to keep around 15–20KB of free main memory, and the SPIRAM is about half-way (2MB) full. + +{{< figure + default=true + src="img/running-1.webp" + >}} + +## Footprint + +Given the footprint constraints of the platform, and the size of the Alexa CPP SDK, we had to make sure we know what component added how much to the __static memory footprint__ . And then optimize components that added too much. The idf_size.py utility in IDF was a very important tool to identify and check which libraries are adding to the static footprint, and what can be optimized out. + +## A bountiful path + +Additionally, we made a few minor modifications to better support some of the usecases. Listing them down here, if you find them useful. + +Alexa requires an __HTTP/2__ connection with their cloud. So we started with the HTTP/2 client (nghttp2) that is part of IDF. The nghttp2 library is very flexible with its multitude of callbacks. Because of the flexibility though, as you start using it, it is easy to miss the forest for the trees. So we created a tiny layer on top of that called [sh2lib](https://github.com/espressif/esp-idf/tree/master/examples/protocols/http2_request/components/sh2lib) (simple-http2 library). As with any simplifying layer, it does offer simplicity at the cost of flexibility. But by using this simplification we could keep the code more organised, as in this [example](https://github.com/espressif/esp-idf/blob/master/examples/protocols/http2_request/main/http2_request_example_main.c#L124). Maybe that simplicity-flexibility tradeoff is not for everyone, so it’s kept into the IDF’s *examples/ *section for now. + +The next stop was __TLS__ . We created a layer [esp-tls](https://github.com/espressif/esp-idf/tree/master/components/esp-tls) on top of mbedTLS. This layer encoded the common tasks of setting up a TLS session and performing data exchange on this session. Apart from simplicity the layer should try to ensure that it chooses the default secure configurations with minimal scope of error. This was to avoid situations like, *Oh I forgot to perform server certificate validation, *or *Oh I didn’t setup CN verification*. This layer is also now a part of IDF. + +IDF already includes C++ development support. The Alexa CPP SDK extensively uses features (C++11 included) like threads, shared-locks, smart-pointers, futures and lambda expressions from IDF. + +All in all, the hardware and software platforms have been robust and comprehensive to meet these demands thrown at it. We will continue to improve it even further. It’s been an exciting project to work on. diff --git a/content/blog/rust-embedded-a-development-power-duo/img/rust-1.webp b/content/blog/rust-embedded-a-development-power-duo/img/rust-1.webp new file mode 100644 index 000000000..2fbd3a696 Binary files /dev/null and b/content/blog/rust-embedded-a-development-power-duo/img/rust-1.webp differ diff --git a/content/blog/rust-embedded-a-development-power-duo/img/rust-2.webp b/content/blog/rust-embedded-a-development-power-duo/img/rust-2.webp new file mode 100644 index 000000000..5962d6b05 Binary files /dev/null and b/content/blog/rust-embedded-a-development-power-duo/img/rust-2.webp differ diff --git a/content/blog/rust-embedded-a-development-power-duo/img/rust-3.webp b/content/blog/rust-embedded-a-development-power-duo/img/rust-3.webp new file mode 100644 index 000000000..f45914b14 Binary files /dev/null and b/content/blog/rust-embedded-a-development-power-duo/img/rust-3.webp differ diff --git a/content/blog/rust-embedded-a-development-power-duo/index.md b/content/blog/rust-embedded-a-development-power-duo/index.md new file mode 100644 index 000000000..8f4c3045a --- /dev/null +++ b/content/blog/rust-embedded-a-development-power-duo/index.md @@ -0,0 +1,213 @@ +--- +title: "Rust + Embedded: A Development Power Duo" +date: 2023-04-19 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - juraj-sadel +tags: + - Rust + - Embedded Systems + - Esp32 + - Rust Programming Language + +--- +{{< figure + default=true + src="img/rust-1.webp" + >}} + +__Beginning of Rust__ + +> The initial idea of a Rust programming language was born because of an accident. In 2006, in Vancouver, Mr. Graydon Hoare was returning to his apartment but the elevator was again out of order, because of a software bug. Mr. Hoare lived on the 21st floor and as he climbed the stairs, he started thinking “We computer people couldn’t even make an elevator that works without crashing!”. This accident led Mr. Hoare to work on the design of a new programming language he hoped, would be possible to write small, fast code without memory bugs [[1](https://www.technologyreview.com/2023/02/14/1067869/rust-worlds-fastest-growing-programming-language/)].If you are interested in the more detailed and technical history of Rust, please visit [[2](https://blog.rust-lang.org/2015/05/15/Rust-1.0.html)] and [[3](https://blog.rust-lang.org/2019/05/15/4-Years-Of-Rust.html)]. + +Almost eighteen years later, Rust has become the hottest new language in the world with more and more people interested every year. In __Q1 2020__ there were around __600,000__ Rust developers and in __Q1 2022__ the number increased to __2.2 million__ [[4](https://yalantis.com/blog/rust-market-overview/)]. Huge tech companies like Mozilla, Dropbox, Cloudflare, Discord, Facebook(Meta), Microsoft, and others are using Rust in their codebase. + +{{< figure + default=true + src="img/rust-2.webp" + >}} + +In the past six years, the Rust language remained the most “loved” programming language based on [[5](https://insights.stackoverflow.com/survey/2021#most-loved-dreaded-and-wanted)]. + +__Programming languages in Embedded development__ + +Embedded development is not as popular as web development or desktop development and these are a few examples of why this might be the case: + +- __Hardware constraints__ : The embedded systems will most likely have limited hardware resources, such as performance and memory. This can make it more challenging to develop software for these systems. +- __Limited and niche market__ : The embedded market is more limited than web and desktop applications and it can make it less financially rewarding for developers specializing in embedded programming. +- __Specialized low-level knowledge__ : Specialized knowledge of concrete hardware and low-level programming languages is a must-to-have in embedded development +- __Longer development cycles__ : Developing software for embedded systems can take longer than developing software for web or desktop applications, due to the need for testing and optimization of the code for the specific hardware requirements. +- __Low-level programming languages__ : These languages, such as assembly or C do not provide much of an abstraction to the developer and provide direct access to hardware resources and memory which will lead to memory bugs. + +These are only a few examples of why and how is embedded development unique and is not as famous and lucrative for young programmers as web development. If you are used to the most common and modern programming languages like Python, JavaScript, or C# where you do not have to count every processor cycle and every kilobyte used in memory, it is a very brutal change to start with embedded, that can be very discouraging for coming into the embedded world not even for beginners but also experienced web/desktop/mobile developers. That is why it would be very interesting and needed to have a modern programming language in embedded development. + +__Why Rust?__ + +Rust is a modern and relatively young language with a focus on memory and thread safety that with an intention to produce reliable and secure software. Also, Rust's support for concurrency and parallelism is particularly relevant for embedded development, where efficient use of resources is critical. Rust's growing popularity and ecosystem make it an attractive option for developers, especially those who are looking for a modern language that is both efficient and safe. These are the main reasons why Rust is becoming an increasingly popular choice not only in embedded development but especially for projects that prioritize __safety__ , __security__ , and __reliability__ . + +__Advantages of Rust (compared with C and C++)__ + +- __Memory safety__ : Rust offers strong memory safety guarantees through its __ownership__ and __borrowing__ system which is very helpful in preventing common memory-related bugs like __null pointer dereferences__ or __buffer overflow__ , for example. In other words, Rust guarantees __memory safety__ at compile time through ownership and borrowing system. This is especially important in embedded development where memory/resource limitations can make such bugs more challenging to detect and resolve. +- __Concurrency__ : Rust provides excellent support for zero-cost abstractions and safe concurrency and multi-threading, with a built-in __async/await__ syntax and a powerful types system that prevents common concurrency bugs like data races. This can make it easier to write safe and efficient concurrent code not only in embedded systems. +- __Performance__ : Rust is designed for high performance and can go toe-to-toe with C and C++ in performance measures while still providing strong memory safety guarantees and concurrency support. +- __Readability__ : Rust’s syntax is designed to be more readable and less error-prone than C and C++, with features like pattern matching, type inference, and functional programming constructs. This can make it easier to write and maintain code, especially for larger and more complex projects. +- __Growing ecosystem__ : Rust has a growing ecosystem of libraries (crates), tools, and resources for (not only) embedded development, which can make it easier to get started with Rust and find necessary support and resources for a particular project. +- __Package manager and build system__ : Rust distribution includes an official tool called __Cargo,__ which is used____ to automate the build, test, and publish process together with creating a new project and managing its dependencies. + +__Disadvantages of Rust (compared with C and C++)__ + +On the other hand, Rust is not a perfect language and has also some disadvantages over other programming languages (not only C and C++). + +- __Learning curve__ : Rust has a steeper learning curve than many programming languages, including C. Its unique features, such as already mentioned ownership and borrowing, may take some time to understand and get used to and therefore are more challenging to get started with Rust. +- __Compilation time__ : Rust’s advanced type system and borrow checker can result in longer compilation times compared to other languages, especially for large projects. +- __Tooling__ : While Rust’s ecosystem is growing rapidly, it may not yet have the same level of tooling support as more established programming languages. For example, C and C++ have been around for decades and have a vast codebase. This can make it more challenging to find and use the right tools for a particular project. +- __Lack of low-level control__ : Rust’s safety features can sometimes limit low-level control to C and C++. This can make it more challenging to perform certain low-level optimizations or interact with hardware directly, but it is possible. +- __Community size__ : Rust is still a relatively new programming language compared to more established languages like C and C++, which means that it may have a smaller community of developers and contributors, and fewer resources, libraries, and tools. + +Overall, Rust offers many advantages over traditional embedded development languages like C and C++, including memory safety, concurrency support, performance, code readability, and a growing ecosystem. As a result, Rust is becoming an increasingly popular choice for embedded development, especially for projects that prioritize safety, security, and reliability. The disadvantages of Rust compared to C and C++ tend to be related to Rust’s relative newness as a language and its unique features. However, many developers find that Rust’s advantages make it a compelling choice for certain projects. + +--- + +__How can Rust run?__ + +There are several ways to run the Rust based firmware, depending on the environment and requirements of the application. The Rust based firmware can typically be used in one of two modes: hosted-environment or bare-metal, let’s look at what these are. + +__What is hosted-environment?__ + +In Rust, the hosted-environment is close to a normal PC environment [[6](https://docs.rust-embedded.org/book/intro/no-std.html#hosted-environments)] which means, you are provided with an Operating System. With the operating system, it is possible to build the [*Rust standard library (std)*](https://doc.rust-lang.org/std/). The std refers to the standard library, which can be seen as a collection of modules and types that are included with every Rust installation. The std provides a set of multiple functionalities for building Rust programs, including __data structures__ , __networking__ , __mutexes and other synchronization primitives__ , __input/output__ , and more. + +With the hosted-environmentapproach you can use the functionality from the C-based development framework called the [*ESP-IDF*](https://github.com/espressif/esp-idf) because it provides a [*newlib*](https://sourceware.org/newlib/)[* *](https://sourceware.org/newlib/)environment that is “powerful” enough to build the Rust standard library on top of it. In other words, with the hosted-environment (sometimes called just std) approach, we use the ESP-IDF as an operating system and build the Rust application on top of it. In this way, we can use all the standard library features listed above and also already implement C functionality from the ESP-IDF API. + +An example, how a [blinky example](https://github.com/esp-rs/esp-idf-hal/blob/master/examples/blinky.rs) running on top of ESP-IDF (FreeRTOS) may look like (more examples can be found in [esp-idf-hal](https://github.com/esp-rs/esp-idf-hal/tree/master/examples)): + +```rust +// Import peripherals we will use in the example +use esp_idf_hal::delay::FreeRtos; +use esp_idf_hal::gpio::*; +use esp_idf_hal::peripherals::Peripherals; + +// Start of our main function i.e entry point of our example +fn main() -> anyhow::Result<()> { + // Apply some required ESP-IDF patches + esp_idf_sys::link_patches(); + + // Initialize all required peripherals + let peripherals = Peripherals::take().unwrap(); + + // Create led object as GPIO4 output pin + let mut led = PinDriver::output(peripherals.pins.gpio4)?; + + // Infinite loop where we are constantly turning ON and OFF the LED every 500ms + loop { + led.set_high()?; + // we are sleeping here to make sure the watchdog isn't triggered + FreeRtos::delay_ms(1000); + + led.set_low()?; + FreeRtos::delay_ms(1000); + } +} +``` + +__When you might want to use hosted-environment__ + +- __Rich functionality__ : If your embedded system requires lots of functionality like support for networking protocols, file I/O, or complex data structures, you will likely want to use hosted-environment approach because std libraries provide a wide range of functionality that can be used to build complex applications relatively quickly and efficiently +- __Portability__ : The std crate provides a standardized set of APIs that can be used across different platforms and architectures, making it easier to write code that is portable and reusable. +- __Rapid development__ : The std crate provides a rich set of functionality that can be used to build applications quickly and efficiently, without worrying about low-level details. + +__What is bare-metal?__ + +Bare-metal means we do not have any operating system to work with. When a Rust program is compiled with the no_std attribute, it means that the program will not have access to certain features (some are listed in the std chapter). This does not necessarily mean that you cannot use networking or complex data structures with no_std, you can do anything without std that you can do with std but it is more complex and challenging. no_std programs rely on a set of [core](https://doc.rust-lang.org/beta/core/index.html) language features that are available in all Rust environments, for example, data types, control structures or low-level memory management. This approach is useful for embedded programming where memory usage is often constrained and low-level control over hardware is required. + +An example, how a [blinky example](https://github.com/esp-rs/esp-hal/blob/main/esp32c3-hal/examples/blinky.rs) running on bare-metal (no operating system) may look like (more examples can be found in [esp-hal](https://github.com/esp-rs/esp-hal/tree/main)): + +```rust +#![no_std] +#![no_main] + +// Import peripherals we will use in the example +use esp32c3_hal::{ + clock::ClockControl, + gpio::IO, + peripherals::Peripherals, + prelude::*, + timer::TimerGroup, + Delay, + Rtc, +}; +use esp_backtrace as _; + +// Set a starting point for program execution +// Because this is `no_std` program, we do not have a main function +#[entry] +fn main() -> ! { + // Initialize all required peripherals + let peripherals = Peripherals::take(); + let mut system = peripherals.SYSTEM.split(); + let clocks = ClockControl::boot_defaults(system.clock_control).freeze(); + + // Disable the watchdog timers. For the ESP32-C3, this includes the Super WDT, + // the RTC WDT, and the TIMG WDTs. + let mut rtc = Rtc::new(peripherals.RTC_CNTL); + let timer_group0 = TimerGroup::new( + peripherals.TIMG0, + &clocks, + &mut system.peripheral_clock_control, + ); + let mut wdt0 = timer_group0.wdt; + let timer_group1 = TimerGroup::new( + peripherals.TIMG1, + &clocks, + &mut system.peripheral_clock_control, + ); + let mut wdt1 = timer_group1.wdt; + + rtc.swd.disable(); + rtc.rwdt.disable(); + wdt0.disable(); + wdt1.disable(); + + // Set GPIO4 as an output, and set its state high initially. + let io = IO::new(peripherals.GPIO, peripherals.IO_MUX); + // Create led object as GPIO4 output pin + let mut led = io.pins.gpio5.into_push_pull_output(); + + // Turn on LED + led.set_high().unwrap(); + + // Initialize the Delay peripheral, and use it to toggle the LED state in a + // loop. + let mut delay = Delay::new(&clocks); + + // Infinite loop where we are constantly turning ON and OFF the LED every 500ms + loop { + led.toggle().unwrap(); + delay.delay_ms(500u32); + } +} +``` + +__When you might want to use bare-metal__ + +- __Small memory footprint__ : If your embedded system has limited resources and needs to have a small memory footprint, you will likely want to use bare-metal because std features add a significant amount of final binary size and compilation time. +- __Direct hardware control__ : If your embedded system requires more direct control over the hardware, such as low-level device drivers or access to specialized hardware features you will likely want to use bare-metal because std adds abstractions that can make it harder to interact directly with the hardware. +- __Real-time constraints or time-critical applications__ : If your embedded system requires real-time performance or low-latency response times because std can introduce unpredictable delays and overhead that can affect real-time performance. +- __Custom requirements__ : bare-metal allows more customization and fine-grained control over the behavior of an application, which can be useful in specialized or non-standard environments. + +{{< figure + default=true + src="img/rust-3.webp" + >}} + +__TL;DR Should I switch from C to Rust?__ + +If you are starting a new project or a task where memory safety or concurrency is required, it may be worth considering moving from C to Rust. However, if your project is already well-established and functional in C, the benefits of switching to Rust may not outweigh the costs of rewriting and retesting your whole codebase. In this case, you can consider keeping the current C codebase and start writing and adding new features, modules, and functionality in Rust — it is relatively simple to call C functions from Rust code. [It is also possible to write ESP-IDF components in Rust](https://github.com/espressif/rust-esp32-example). In the end, the final decision to move from C to Rust should be based on a careful evaluation of your specific needs and the trade-offs involved. + +References1. [How Rust went from a side project to the world’s most-loved programming language | MIT Technology Review](https://www.technologyreview.com/2023/02/14/1067869/rust-worlds-fastest-growing-programming-language/)2. [Announcing Rust 1.0 | Rust Blog (rust-lang.org)](https://blog.rust-lang.org/2015/05/15/Rust-1.0.html)3. [4 years of Rust | Rust Blog (rust-lang.org)](https://blog.rust-lang.org/2019/05/15/4-Years-Of-Rust.html) + +4. [The state of the Rust market in 2023 (yalantis.com)](https://yalantis.com/blog/rust-market-overview/) + +5. [Stack Overflow Developer Survey 2021](https://insights.stackoverflow.com/survey/2021#most-loved-dreaded-and-wanted) + +6. [https://docs.rust-embedded.org/book/intro/no-std.html#hosted-environments](https://docs.rust-embedded.org/book/intro/no-std.html#hosted-environments) diff --git a/content/blog/rust-on-espressif-chips-10-01-2022/index.md b/content/blog/rust-on-espressif-chips-10-01-2022/index.md new file mode 100644 index 000000000..b157a03e0 --- /dev/null +++ b/content/blog/rust-on-espressif-chips-10-01-2022/index.md @@ -0,0 +1,70 @@ +--- +title: "Rust on Espressif chips — 18-10-2021" +date: 2021-10-17 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - scott-mabin +tags: + - Esp32 + - Rust + - Xtensa + +--- +This article was written by Scott Mabin and originally posted [on his blog](https://mabez.dev/). + +Now I am working at Espressif I plan on publishing updates roughly every quarter just to keep the community in the loop around the esp rust effort. + +## Documentation & Planning + +One of the hardest parts in any community project is onboarding new developers, especially in the early stages of a project where API’s, processes and tooling is changing rapidly; it can be frustrating to work on something one week, and in the next you’re fighting to get it compiling again. We began work on [a book](https://esp-rs.github.io/book/) in which we will try to keep as a source of truth for the Rust esp effort. This will include install instructions, tooling guides, ecosystem overviews and much more. + +We have also put together a [road map project](https://github.com/orgs/esp-rs/projects/2) on github, with the aim of managing the project from Espressif’s point of view, but also to allow new contributors to pick up backlog items. Simply comment in the issue if there is something you’d like to take a stab at, we’re more than happy to assist and review. We also host bi-weekly meetings which anyone is welcome to attend, just drop a comment [in the latest discussion thread](https://github.com/esp-rs/rust/discussions). + +## Using the Rust standard library on Espressif chips + +In [the last post](https://mabez.dev/blog/posts/esp-rust-espressif/), I mentioned that was possible to use the Rust standard library thanks to [@ivmarkov](https://github.com/ivmarkov)’s hard work; well, he’s been at it again! He pushed forward and managed to upstream the standard library changes required to build std on top of esp-idf. From Rust 1.56 it the changes will be stable, meaning it's possible to use the upstream Rust toolchain to build the std platform for any RISC-V Espressif chip! Currently, that only includes the esp32c3 but there are more to come. This change also applies to Xtensa chips, however they still require a custom toolchain due to the lack of a backend for Xtensa in upstream LLVM. For more info in the std effort, please see [the book](https://esp-rs.github.io/book/). I'd also like to take this time to thank the upstream Rust developers for the prompt and helpful reviews, in particular [@Amanieu](https://github.com/Amanieu) for helping us push this over the finish line. + +## Compiler + +The custom toolchain is a hindrance to developer onboarding, especially if developers have to build it themselves. We now offer a prebuilt toolchains for all common OS’s under the [esp-rs/rust-build](https://github.com/esp-rs/rust-build) repository. A few days after a new Rust release we typically have the new compiler ready, unless we run into any issues; speaking of, we now test the compiler with a few projects in CI so hopefully we don’t ship a broken compiler. Note that this extra compiler step is only required when targeting Espressif’s Xtensa based chips. + +There have been a couple of improvements to the compiler fork since the last post, for one the patch set we have to manage has reduced in size thanks to the std library changes being upstreamed. There is now asm! support for the Xtensa architecture, which also means we have removed the old llvm_asm! macros from the xtensa crates and ported them to the new syntax. + +## Tooling + +## SVDs + +SVDs have been coming along very nicely, we now [have official SVDs](https://github.com/espressif/svd/tree/main/svd) for the esp32c3, esp32s2 and the esp32. If you have been following this effort for a while, you may be thinking we already had an esp32 SVD, well you would be correct! However, it was very hacky, missed a lot of peripherals and was all around horrible to work with. The new SVD aims to be more complete and importantly more consistent. One thing that has been missing from the official SVDs is interrupt information, however this has recently changed and interrupt information for each peripheral is now available. Overall the SVDs available now are in a great spot to feed into svd2rust and other tooling, ready for HAL creation. + +## espflash + +[espflash](https://github.com/esp-rs/espflash) is a rewrite of Espressif's [esptool.py](https://github.com/espressif/esptool), but also has cargo integration. It's been under heavy development and now has a 1.0 release! Including: + +- Support for flashing: +- esp32 +- esp32c3 +- esp32s2 +- esp8266 +- Compression for faster flashing. +- Support for the esp-idf partition table format. +- Support for flashing a stock esp-idf bootloader. +- Removed support xargo & cargo xbuild, now focusing support on build-std. +- Reading back flash info. +- Reading some EFUSE values. +- elf2image functionality, for writing the formatted image to a file. +- Beautiful & helpful error messages with miette. + +Big thanks to all the contributors in this release, especially [@icewind1991](https://github.com/icewind1991). + +## probe-rs + +We have also started adding support for flashing and debugging Espressif chips with probe-rs. As the RISC-V architecture is already supported in probe-rs, we set out to add support for the esp32c3 initially. We are happy to report that probe-rs master now has a flash algorithm capable of flashing the esp32c3! The [esp-flash-loader](https://github.com/esp-rs/esp-flash-loader) repository contains the code for the esp32c3 flash loader, but thanks for Espressif's ROM API it should be very easy to port the algorithm to the other chips. Xtensa support for probe-rs is planned eventually, but will take some time to implement. A big thank you to the probe-rs folks, in particular [@Yatekii](https://github.com/Yatekii), [@Tiwalun](https://github.com/Tiwalun) and [@Dirbaio](https://github.com/Dirbaio) for the reviews and assistance. + +Having probe-rs support gives us easy access to [RTT](https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/) for fast, low overhead logging. We have the esp32c3 using RTT with probe-rs locally, however a few patches are required due to the esp32c3's lack of atomics. Whilst we have contributed to crates such as [atomic-polyfill](https://github.com/embassy-rs/atomic-polyfill/pull/6) these crates are quite intrusive and require other ecosystem crates to depend on them instead of core::sync::atomic. To combat this, we are in the process of writing an atomic emulation trap handler. This works by treating the esp32c3 like it has atomic support (build as riscv32imac-unknown-none-elf), and when we trap on the atomic instructions, we decode them and emulate them in software transparently. There is a performance penalty that it is roughly 2-4x slower than native instructions based on our testing, but having an atomic story is important in the embedded Rust ecosystem. + +## What’s next? + +Continue to improve the tooling around Rust with Espressif chips, until we have out of the box solutions for most stories. Continue to build and polish standard library use with Espressif chips, as well as the #![no_std] story. We would also like to explore using [rustc_codegen_gcc](https://github.com/rust-lang/rustc_codegen_gcc) to try and target Espressif's Xtensa chips. The end goal will still be to upstream the Xtensa backend to LLVM, but rustc_codegen_gcc may allow targeting Xtensa chips faster as GCC already has a stable Xtensa backend. + +Expect another update early next year! diff --git a/content/blog/secure-boot-with-auto-signing-in-esp-rainmaker-ota/img/secure-1.webp b/content/blog/secure-boot-with-auto-signing-in-esp-rainmaker-ota/img/secure-1.webp new file mode 100644 index 000000000..2dfea8a1c Binary files /dev/null and b/content/blog/secure-boot-with-auto-signing-in-esp-rainmaker-ota/img/secure-1.webp differ diff --git a/content/blog/secure-boot-with-auto-signing-in-esp-rainmaker-ota/img/secure-2.webp b/content/blog/secure-boot-with-auto-signing-in-esp-rainmaker-ota/img/secure-2.webp new file mode 100644 index 000000000..f42112029 Binary files /dev/null and b/content/blog/secure-boot-with-auto-signing-in-esp-rainmaker-ota/img/secure-2.webp differ diff --git a/content/blog/secure-boot-with-auto-signing-in-esp-rainmaker-ota/index.md b/content/blog/secure-boot-with-auto-signing-in-esp-rainmaker-ota/index.md new file mode 100644 index 000000000..7cdb2394a --- /dev/null +++ b/content/blog/secure-boot-with-auto-signing-in-esp-rainmaker-ota/index.md @@ -0,0 +1,66 @@ +--- +title: "Secure boot with auto-signing in ESP RainMaker OTA" +date: 2024-07-29 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - piyush-shah +tags: + - Esp32 + - Espressif + - IoT + - Secure Boot + - Rainmaker + +--- +Security is one of the most important aspects of any IoT system and at Espressif, we take it very seriously. The ESP RainMaker platform offers a secure way to onboard a device onto Wi-Fi network and then control and monitor it through cloud. However, the security of the hardware itself is also critical for the overall system to be secure. Espressif MCUs come with various security features like [secure boot](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/security/secure-boot-v2.html), [flash encryption](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/security/flash-encryption.html), etc. + +{{< figure + default=true + src="img/secure-1.webp" + >}} + +The secure boot feature is especially important as it allows only authorised firmware to run on the MCUs. ESP IDF has made enabling secure boot very easy. However, managing the secure boot keys is still the developer’s responsibility. Some questions that commonly come up for our customers include: + +- How to generate the secure boot key? +- Where to store the key securely, is it stored on the developer’s machine or a server? +- How to protect the key from leakage? What if our engineers leave the organisation? +- How do I know which key is programmed on a device, so I don’t accidentally upgrade with the incorrect keys? +- How to manage a fleet of devices with similar firmware but different secure boot keys? + +The recent addition of “[Secure Signing](https://rainmaker.espressif.com/docs/secure-signing)” feature in ESP RainMaker addresses all its concerns. It offers a way to + +- generate and manage keys +- simplify signing bootloader and firmware images before device manufacturing +- supports transparently “Auto Signing” before deploying OTA firmware upgrades + +## Auto Sign for OTA + +The auto-signing feature in ESP RainMaker allows developers to just upload their unsigned firmware to ESP RainMaker, and deploy an OTA firmware upgrade. The ESP RainMaker backend transparently handles the signing with the correct keys during OTA firmware upgrades. + +{{< figure + default=true + src="img/secure-2.webp" + >}} + +If your fleet includes devices that use distinct keys for key verification, ESP RainMaker will ensure that the correctly signed firmware goes to the right device. + +The developer no more needs to keep track of the keys (or should even have the visibility of the keys), making the fleet management simpler. + +Additionally, since the key management is handled in the cloud, this decouples the development activity from the device-management activity, providing better role based separation. + +## Key Management + +The secure boot signing keys are created and maintained in the cloud with ESP RainMaker. The private key itself is not accessible to the user but can be used only for signing requests. On private deployments, RainMaker uses a FIPS compliant HSM for added security. Access control, for who can trigger signing requests, ensures that only authorised persons in your organisation can utilise this for signing firmware images. This adds another layer of security to the system. + +## First-Time Signing + +Once the signing key is created in ESP RainMaker, you need to sign the firmware images (bootloader and firmware) that gets flashed on your production devices. This is achieved by uploading unsigned images of secure-boot enabled bootloader and firmware and getting them signed for the first time. + +ESP RainMaker provides detailed instruction for flashing and setting up your SoC with the appropriate security configurations for secure boot. + +--- + +The secure signing feature is available in public as well as private RainMaker deployments. Use [backend release 2.1.0](https://customer.rainmaker.espressif.com/docs/rainmaker-releases/#210-22-apr-2024) or later and [frontend release 2.0.1](https://customer.rainmaker.espressif.com/docs/frontend-releases/#201-12-jun-2024) or later for this. + +Check out more usage details in the [ESP RainMaker docs](https://rainmaker.espressif.com/docs/secure-signing). Go ahead and use this to secure your RainMaker powered IoT devices. Let us know (at [esp-rainmaker-support@espressif.com](mailto:esp-rainmaker-support@espressif.com)) if you have any queries. diff --git a/content/blog/secure-signing-using-external-hsm/img/secure-1.webp b/content/blog/secure-signing-using-external-hsm/img/secure-1.webp new file mode 100644 index 000000000..a0210fd53 Binary files /dev/null and b/content/blog/secure-signing-using-external-hsm/img/secure-1.webp differ diff --git a/content/blog/secure-signing-using-external-hsm/index.md b/content/blog/secure-signing-using-external-hsm/index.md new file mode 100644 index 000000000..d09643f72 --- /dev/null +++ b/content/blog/secure-signing-using-external-hsm/index.md @@ -0,0 +1,123 @@ +--- +title: "Secure Signing Using External HSM" +date: 2023-02-09 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - mahavir-jain +tags: + - Esp32 + - Security + - IoT + - Esptool + +--- +## Overview + +ESP32 series of chips supports secure boot scheme to allow only trusted firmware to execute from its flash storage. However, this requires careful management of the secure signing key, it must be generated and stored in a secure manner by the signing entity. + +External [HSM](https://en.wikipedia.org/wiki/Hardware_security_module) (Hardware Security Module) is specially designed cryptographic device that safeguards and manages secrets. HSM also provides specialised cryptographic services like encryption, digital signing etc. Now a days, there are cloud services being offered that provide cloud HSM based solutions. + +## External HSM Signing + +{{< figure + default=true + src="img/secure-1.webp" + >}} + +External HSM offers a standard [PKCS #11](https://en.wikipedia.org/wiki/PKCS_11) based cryptographic interface for availing various services like signing the firmware. With PKCS #11 interface, external HSM could also be a remote cloud HSM based service over the network. + +- Espsecure.py script (part of [Esptool](https://github.com/espressif/esptool) project) has been integrated with standard PKCS #11 interface and thus ensures interoperability with any external HSM for getting the ESP32's firmware signed. +- Please note that, as shown in the above diagram path of the vendor specific PKCS #11 library must be provided in the Espsecure.py configuration to use HSM mode. +- The initial support allows to generate signed application as per our Secure Boot V2 scheme with either RSA-PSS 3072 or ESDSA NISTP256 algorithm. + +## Signing Using YubiKey + +We will be using [YubiKey](https://www.yubico.com/products/yubikey-5-overview/) 5 Series as an external HSM for demonstration here. + +## Installation + +Please find detailed setup guide for YubiKey host tool and PKCS #11 library setup [here](https://developers.yubico.com/yubico-piv-tool/). + +Note: Following are verified steps for Ubuntu 22.10 OS + +```shell +# Install esptool 4.5 release along with HSM dependencies +pip install esptool[hsm]==4.5.dev3 + +# Install tools and PKCS#11 interface library +sudo apt install yubico-piv-tool ykcs11 + +# Generate ECC P256 private key in the 9c (digital signature) slot +yubico-piv-tool -a generate -s 9c -A ECCP256 +``` + +## HSM config file + +Following is a HSM config file that we shall pass to espsecure.py + +```shell +$ cat hsm_cfg.ini + +# Config file for the external YubiKey based Hardware Security Module +[hsm_config] +# PKCS11 shared object/library +pkcs11_lib = /usr/lib/x86_64-linux-gnu/libykcs11.so +# HSM login credentials (default YubiKey pin) +credentials = 123456 +# Slot number to be used (default YubiKey slot) +slot = 0 +# Label of the object used to store the private key (default) +label = Private key for Digital Signature +# Label of the object used to store corresponding public key (default) +label_pubkey = Public key for Digital Signature +``` + +*Please check directory where **libykcs11.so** is installed on your system and update the path accordingly.* + +## Generate signature + +Following command helps to sign the binary using configuration supplied in the hsm_cfg.ini file + +```shell +$ espsecure.py sign_data --version 2 --hsm --hsm-config hsm_cfg.ini --output signed.bin unsigned.bin + +espsecure.py v4.5-dev +Trying to establish a session with the HSM. +Session creation successful with HSM slot 0. +Trying to extract public key from the HSM. +Got public key with label Public key for Digital Signature. +Connection closed successfully +Trying to establish a session with the HSM. +Session creation successful with HSM slot 0. +Got private key metadata with label Private key for Digital Signature. +Signing payload using the HSM. +Signature generation successful. +Connection closed successfully +Pre-calculated signatures found +1 signing key(s) found. +Signed 65536 bytes of data from unsigned.bin. Signature sector now has 1 signature blocks. +``` + +## Verify signature + +For sanity purpose, we can verify the signature using public key from the external HSM + +```shell +$ espsecure.py verify_signature --version 2 --hsm --hsm-config hsm_cfg.ini signed.bin + +espsecure.py v4.5-dev +Trying to establish a session with the HSM. +Session creation successful with HSM slot 0. +Trying to extract public key from the HSM. +Got public key with label Public key for Digital Signature. +Connection closed successfully +Signature block 0 is valid (ECDSA). +Signature block 0 verification successful using the supplied key (ECDSA). +``` + +## Documentation + +Please refer to the Esptool documentation [here](https://docs.espressif.com/projects/esptool/en/latest/esp32/espsecure/index.html#remote-signing-using-an-external-hsm) for more details. + +Please note that this feature shall be available in Esptool v4.5 release. For now, you may use Esptool dev release using pip install esptool[hsm]==4.5.dev3to try out this feature. diff --git a/content/blog/securely-booting-user-application-in-esp-privilege-separation/img/securely-1.webp b/content/blog/securely-booting-user-application-in-esp-privilege-separation/img/securely-1.webp new file mode 100644 index 000000000..30a3d41a8 Binary files /dev/null and b/content/blog/securely-booting-user-application-in-esp-privilege-separation/img/securely-1.webp differ diff --git a/content/blog/securely-booting-user-application-in-esp-privilege-separation/img/securely-2.webp b/content/blog/securely-booting-user-application-in-esp-privilege-separation/img/securely-2.webp new file mode 100644 index 000000000..6561ef80d Binary files /dev/null and b/content/blog/securely-booting-user-application-in-esp-privilege-separation/img/securely-2.webp differ diff --git a/content/blog/securely-booting-user-application-in-esp-privilege-separation/index.md b/content/blog/securely-booting-user-application-in-esp-privilege-separation/index.md new file mode 100644 index 000000000..280f8bec2 --- /dev/null +++ b/content/blog/securely-booting-user-application-in-esp-privilege-separation/index.md @@ -0,0 +1,67 @@ +--- +title: "Securely booting user application in ESP Privilege Separation" +date: 2023-02-18 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - sachin-parekh +tags: + - Esp Privilege Separation + - Esp32 + - IoT + - Security + +--- +In the [previous post](/blog/ota-firmware-updates-with-esp-privilege-separation-3b676b49459), we demonstrated the ability to independently update the user application in the ESP Privilege Separation framework. With the separation and isolation of the protected app and user app, it becomes convenient to decouple the ownership of each of these apps and their updates. This also potentially allows the possibility of having multiple user applications for a single protected application, somewhat like an “application store” for user app. As the functionality of these applications increases, the security of these apps becomes mandatory. + +In this post, we will describe the secure boot mechanism implemented for the user application. This mechanism ensures that only the trusted and authorized user application can execute on the device. + +## Secure boot + +> Secure boot is a process that guarantees that only authorized and trusted code executes on the device. This is ensured by building a chain of trust starting from an entity that is trusted and cannot be changed, e.g. one-time programmable memory in hardware + +A project using the ESP Privilege Separation framework has two separate application binaries — protected_app and user_app, which can have independent update cycles. + +The framework supports secure boot for both of these apps. Protected app and user app binaries are verified by establishing a chain of trust with the root of trust. + +## Secure boot for protected app + +Secure boot for protected application follows the secure boot scheme of the traditional application in ESP-IDF. + +{{< figure + default=true + src="img/securely-1.webp" + >}} + +The overview of secure boot process is as follows: + +For more details, please refer to the [Secure boot](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/security/secure-boot-v2.html) section in the ESP-IDF documentation + +## Secure boot for user app + +As previously mentioned, both of these apps can be developed independently so the ownership of these apps can be with different entities. This could mean that both of these apps require separate signing keys. For verifying the protected app, we burn the hash of the protected app public key in eFuse. While we can do the same for the user app public key, it is not scaleable as eFuse memory is scarce. + +We have designed a certificate-based verification mechanism for user app secure boot. + +## Certificate-based verification scheme + +In this scheme, the protected application is considered trusted and thus the protected app will have some information embedded in its firmware that will be used to verify the authenticity of the user app. + +## Requisites + +Let’s look at the requisites for protected app and user app for this scheme + +__Protected app:__ + +__User app:__ + +## Verification process + +The verification flow of this scheme is as follows: + +{{< figure + default=true + src="img/securely-2.webp" + >}} + +For more details about the implementation, please refer to the [Secure boot](https://docs.espressif.com/projects/esp-privilege-separation/en/latest/esp32c3/technical-details/secure_boot.html#) section in the ESP Privilege Separation documentation. diff --git a/content/blog/september-2018/img/september-1.webp b/content/blog/september-2018/img/september-1.webp new file mode 100644 index 000000000..a53eeb329 Binary files /dev/null and b/content/blog/september-2018/img/september-1.webp differ diff --git a/content/blog/september-2018/img/september-2.webp b/content/blog/september-2018/img/september-2.webp new file mode 100644 index 000000000..bf0faea02 Binary files /dev/null and b/content/blog/september-2018/img/september-2.webp differ diff --git a/content/blog/september-2018/img/september-3.webp b/content/blog/september-2018/img/september-3.webp new file mode 100644 index 000000000..e7ca5a0ea Binary files /dev/null and b/content/blog/september-2018/img/september-3.webp differ diff --git a/content/blog/september-2018/img/september-4.webp b/content/blog/september-2018/img/september-4.webp new file mode 100644 index 000000000..2f7359795 Binary files /dev/null and b/content/blog/september-2018/img/september-4.webp differ diff --git a/content/blog/september-2018/img/september-5.webp b/content/blog/september-2018/img/september-5.webp new file mode 100644 index 000000000..8694ee5ef Binary files /dev/null and b/content/blog/september-2018/img/september-5.webp differ diff --git a/content/blog/september-2018/index.md b/content/blog/september-2018/index.md new file mode 100644 index 000000000..af27a0775 --- /dev/null +++ b/content/blog/september-2018/index.md @@ -0,0 +1,74 @@ +--- +title: "September 2018" +date: 2018-09-06 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - here + - Internet Of Things + - Esp32 + - Esp8266 + - Newsletter +--- +{{< figure + default=true + src="img/september-1.webp" + >}} + +Hi everyone, + +It seems that the scorching heat of summer in Shanghai has only fueled our fervor for improving our IoT solutions! We have been hard at work releasing ESP-IDF v3.0.3. This bugfix update is compatible with all apps written for ESP-IDF v.3.0.x. The changes are related to Bluetooth, LWIP, Wi-Fi, System, and Driver. You can check the entire list of changes [here](https://github.com/espressif/esp-idf/releases/tag/v3.0.3), while you can have a look at the [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/) for all the installation instructions. + +Additionally, we have recently released [ESP Mesh](https://www.espressif.com/en/products/software/esp-mesh/overview), our latest solution to achieving stable and secure Wi-Fi coverage across big spaces. With ESP Mesh, a Wi-Fi hotspot expands to a whole network with many more nodes than in traditional networks. Furthermore, ESP Mesh is a “self-healing” and automatically formed network, which makes it significantly more stable. + +At the same time, Microsoft announced that its Azure IoT Workbench has started supporting Arduino development on ESP32. This is integrated into Microsoft Visual Studio, while also supporting OTA updates from, and data-processing in, the Microsoft Azure cloud. For more information, you can see Microsoft’s announcement [here](https://blogs.msdn.microsoft.com/iotdev/2018/08/13/azure-iot-workbench-now-supports-esp32-devices/). + +On a different note, the 2018 IoT Bootcamp by iBHubs in India, which was partially sponsored by Espressif, came to a grand closure last month. This event comprised ten comprehensive bootcamps on IoT, which received a huge response from 110 institutions + +## Espressif Sponsored the IoT Mini-Conf atPyCon AU 2018 + +{{< figure + default=true + src="img/september-2.webp" + >}} + +Espressif always tries and supports important events in the international maker community. One of them is [PyCon AU](https://2018.pycon-au.org/), Australia’s national conference for the Python Programming Community. This year it took place in Sydney on August 24th — 28th. Espressif was delighted to be part of this event by sponsoring the one-day mini-conference that was dedicated to the Internet of Things. This [event](https://2018.pycon-au.org/internet-of-things-track/)included presentations and demonstrations of how Python powers IoT devices, applications and services. + +[Keep Reading](https://www.espressif.com/en/news/Espressif_Sponsored_the_IoT_Mini-Conf_at_PyCon_AU_2018?position=0&list=GrHMyfgczZ0yJEyT1izbDGywoqjo0czbCczUdxyTkBQ) + +## Zerynth Tutorials on ESP32-based Devices + +{{< figure + default=true + src="img/september-3.webp" + >}} + +Zerynth is a middleware for IoT and Industry 4.0 solutions. It speeds up IoT development and enables Python for microcontrollers. In recent weeks, Zerynth has been publishing some really interesting articles focused on ESP32-based devices. For instance, their CW02 development board is based on Espressif’s [ESP32-WROOM-32](https://www.espressif.com/en/products/hardware/esp-wroom-32/overview) module. + +[Keep reading](https://www.espressif.com/en/news/Zerynth_Tutorials_on_ESP32-based_Devices?position=1&list=GrHMyfgczZ0yJEyT1izbDGywoqjo0czbCczUdxyTkBQ) + +## WiFiBoy32 + +{{< figure + default=true + src="img/september-4.webp" + >}} + +WiFiBoy32 is a portable game console and IoT DevKit based on Espressif’s [ESP32-WROOM-32](https://www.espressif.com/en/products/hardware/esp-wroom-32/overview)module. The platform also features a pair of 8-pin GPIOs, along with SPI, DAC, I2S, ADC, and VP/VN connections. It also sports six large gaming/multi-purpose buttons, select and start buttons, as well as Program/Reset buttons, a micro USB, and a 2.4-inch (240 x 320) color SPI TFT LCD display. + +[Keep Reading](https://www.espressif.com/en/news/WiFiBoy32?position=2&list=GrHMyfgczZ0yJEyT1izbDGywoqjo0czbCczUdxyTkBQ) + +## ESP32 WiPhone + +{{< figure + default=true + src="img/september-5.webp" + >}} + +A new project presented on[hackaday.io](https://hackaday.io/project/159811-esp32-wiphone) has piqued our interest. It is an open-source phone which has been made for placing and transmitting telephone calls over the Internet. It is based on an [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview)microprocessor and runs a type of software that is compatible with Arduino. The ESP32-WiPhone measures approximately 120mm x 65mm x 12mm and has a 2.4” LCD screen. + +[Keep Reading](https://www.espressif.com/en/news/ESP32_WiPhone?position=3&list=f8z6dkxh1kZr1F4w-07nc8qT9dNYK3wQrBtIMIjmaLw) + +*Originally published at *[*mailchi.mp*](https://mailchi.mp/64b1d1426a49/espressif-esp-news-september-2018?e=f9593a0e62)*.* diff --git a/content/blog/september-2019/index.md b/content/blog/september-2019/index.md new file mode 100644 index 000000000..3324c53c8 --- /dev/null +++ b/content/blog/september-2019/index.md @@ -0,0 +1,39 @@ +--- +title: "September 2018" +date: 2018-09-06 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - here + - Internet Of Things + - Esp32 + - Esp8266 + - Newsletter +--- +Hi everyone, + +The ESP32-Azure IoT Kit has been granted a Microsoft certification which makes it integral to Microsoft’s Plug-and-Play program. This has been designed to bring the ease of “Plug and Play” to IoT devices. So, developers can plug virtually any peripheral into a Windows PC without having to worry about drivers. As a result, not only has Espressif been featured as an official partner of Microsoft’s IoT Plug and Play program, but also the ESP32-Azure IoT Kit is now featured on the product list of Microsoft’s Azure IoT solutions. + +Another exciting piece of news that came in this month was that Norvi, a Sri Lankan IoT company, rolled out its industrial IoT controller (IIOT), which is based on Espressif Systems’ microcontrollers. To provide a value-adding device to a growing market, Norvi designed the Espressif-based IIOT, which ensures high-quality connectivity for industrial IoT applications. Moreover, it comes with the option of either an ESP32-WROOM-32 module or an ESP8266 microcontroller. + +Norvi’s IIOT offers a dual-core 32-bit CPU that achieves a total of 160 MHz. Moreover, this is combined with a 520KB SRAM and a 4MB Flash. Using such a powerful processor ensures that IIOT also conforms to stringent industrial standards. + +Other news you can read in this month’s newsletter include: + +- Obniz, an all-inclusive IoT platform for ESP32, created by the Japanese company Cambrian Robotics Inc. The obniz solution comprises a dev board, an operating system and cloud services. +- Measuring particulate pollution with ESP32, which may offer a much-needed solution to a growing number of cities across the globe, where CO2 emissions are, sadly, still on the increase. +- IoT-based heart monitoring (ECG) with an AD8232 ECG Sensor and ESP32. This is a solution that may prove valuable to thousands of people facing heart problems. + +## Obniz: A New ESP32-based Dev Board, OS and Cloud + +Obniz is an ESP32-based development board for IoT applications, functioning over Wi-Fi and Bluetooth (Classic and BLE). The obniz dev board can be connected to the obniz cloud, while it can be controlled in various programming languages and environments. The unique hardware of the obniz dev board is based on the powerful ESP32-WROOM-32, Espressif’s Wi-Fi+BT/BLE module that targets a wide variety of applications. + +## ESP32-based Measurement of Particulate Pollution + +A network engineer from Israel, Nir Huri, has created a project that measures particulate pollution — a cause of concern for many people in the present-day climate crisis. Nir Huri’s gadget measures particulate matter with an SDS011 sensor, while ESP32 functions as the brain of the operation, due to its onboard net-working capabilities. + +## IoT-based Heart Monitoring with ESP32 + +A useful tutorial which is on the cusp between technology and healthcare has been recently posted by Alex Newton on how2electronics.com. This post is about IoT-based electrocardiographic (ECG) monitoring with an AD8232 ECG Sensor and ESP32, using the online IoT platform Ubidots. It is important to highlight that the ECG signal from a patient’s heart can be checked online from any part of the world. diff --git a/content/blog/september-2021/img/september-1.webp b/content/blog/september-2021/img/september-1.webp new file mode 100644 index 000000000..25d33006d Binary files /dev/null and b/content/blog/september-2021/img/september-1.webp differ diff --git a/content/blog/september-2021/img/september-2.webp b/content/blog/september-2021/img/september-2.webp new file mode 100644 index 000000000..ea27d4066 Binary files /dev/null and b/content/blog/september-2021/img/september-2.webp differ diff --git a/content/blog/september-2021/img/september-3.webp b/content/blog/september-2021/img/september-3.webp new file mode 100644 index 000000000..a1b6d6948 Binary files /dev/null and b/content/blog/september-2021/img/september-3.webp differ diff --git a/content/blog/september-2021/img/september-4.webp b/content/blog/september-2021/img/september-4.webp new file mode 100644 index 000000000..c04b5ecbb Binary files /dev/null and b/content/blog/september-2021/img/september-4.webp differ diff --git a/content/blog/september-2021/img/september-5.webp b/content/blog/september-2021/img/september-5.webp new file mode 100644 index 000000000..6074608bb Binary files /dev/null and b/content/blog/september-2021/img/september-5.webp differ diff --git a/content/blog/september-2021/index.md b/content/blog/september-2021/index.md new file mode 100644 index 000000000..fb20477b1 --- /dev/null +++ b/content/blog/september-2021/index.md @@ -0,0 +1,70 @@ +--- +title: "September 2021" +date: 2021-11-07 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +A few weeks ago, the [Bluetooth SIG Blog](https://www.bluetooth.com/blog/how-espressif-built-a-bluetooth-mesh-to-unlock-the-infinite-potential-of-the-iot/) interviewed Teo Swee Ann, Espressif Systems’ founder and CEO, who shared his insight into the current and future use cases of Espressif’s open-source Bluetooth mesh protocol stack. [ESP-BLE-MESH](https://www.espressif.com/en/products/sdks/esp-idf/esp-ble-mesh) is widely used across smart-home, smart-lighting, and smart-industry environments. + +“The most common use case for our [Bluetooth® mesh solution in the smart lighting market](https://www.bluetooth.com/learn-about-bluetooth/use-cases/lighting-control/?utm_campaign=connected-lightings&utm_source=internal&utm_medium=blog&utm_content=how-espressif-leverages-bluetooth-mesh-to-unlock-the-infinite-potential-of-the-iot) is connecting the lighting equipment using the Bluetooth mesh topology. This can be implemented effectively in home, enterprise, industrial, or public environments”, said Teo Swee Ann. Regarding the role of Bluetooth mesh in the future of smart lighting, he added: “Based on current market data, we anticipate [an increase in the penetration of Bluetooth® mesh in the smart lighting market](https://www.bluetooth.com/blog/why-bluetooth-technology-is-lighting-the-way/). For example, combining Bluetooth [AoA/AoD technology](https://www.bluetooth.com/learn-about-bluetooth/recent-enhancements/direction-finding/) with Bluetooth mesh will enable indoor positioning through lighting networks that will facilitate various consumer and business-oriented use cases, such as asset tracking. With the ability of Bluetooth mesh to provide device-to-device communication and connect to the internet via a gateway, more smart-lighting systems will be developed.” + +Teo Swee Ann, then, went on to talk about potential future applications of the Bluetooth mesh technology: “Through the combination of Bluetooth mesh, voice-and-image recognition, smart home sensors, and machine learning, technology will adapt to human needs even better, improving the quality of everyday life even further.” To read the whole of Teo Swee Ann’s interview, click [on the picture below](https://www.espressif.com/en/news/how-espressif-built-a-bluetooth-mesh-to-unlock-the-infinite-potential-of-the-iot). + +{{< figure + default=true + src="img/september-1.webp" + >}} + +Other topics you can read about in this month’s newsletter include: + +{{< figure + default=true + src="img/september-2.webp" + >}} + +[__Toit’s Cloud-managed Containers on ESP32__ ](https://www.espressif.com/en/news/ESP_Toit) + +Secure your code on [ESP32](https://www.espressif.com/en/products/socs/esp32) with lightweight containers, and orchestrate them through [Toit](https://toit.io/)’s cloud API. + +{{< figure + default=true + src="img/september-3.webp" + >}} + +[__ESP-USB: Espressif’s Wireless Communication Solution__ ](https://www.espressif.com/en/news/ESP-USB) + +A USB interface is integrated into Espressif’s [ESP32-S](https://www.espressif.com/en/products/socs/esp32-s2) series of SoCs, enabling video streaming over Wi-Fi, accessing the Internet through a 4G hotspot, connecting to a wireless USB disk, and [many other applications](https://www.youtube.com/watch?v=RQOhrgRd7N8&t=25s). + +{{< figure + default=true + src="img/september-4.webp" + >}} + +[__Adding Vision to ESP32 with Edge Impulse__ ](https://www.espressif.com/en/news/ESP32_EdgeImpulse) + +You only need a few lines of additional code to run powerful machine-learning algorithms on [ESP32](https://www.espressif.com/en/products/socs/esp32), especially if you also use the Arduino framework and [Edge Impulse](https://www.edgeimpulse.com/blog/add-sight-to-your-esp32). + +{{< figure + default=true + src="img/september-5.webp" + >}} + +[__UDOO KEY Combines RP2040 and ESP32 in a New AI Dev Board__ ](https://www.espressif.com/en/news/UDOO_KEY) + +[UDOO KEY](https://udoo.org/udookey/#) is a fully programmable board combining RP2040 and [ESP32](https://www.espressif.com/en/products/socs/esp32) into a single solution. It allows you to use either RP2040, or ESP32, or even both, so that you can build any AI project on your terms. + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/september-2022/img/september-1.webp b/content/blog/september-2022/img/september-1.webp new file mode 100644 index 000000000..db244d7bd Binary files /dev/null and b/content/blog/september-2022/img/september-1.webp differ diff --git a/content/blog/september-2022/img/september-2.webp b/content/blog/september-2022/img/september-2.webp new file mode 100644 index 000000000..9098ab55c Binary files /dev/null and b/content/blog/september-2022/img/september-2.webp differ diff --git a/content/blog/september-2022/img/september-3.webp b/content/blog/september-2022/img/september-3.webp new file mode 100644 index 000000000..e34ffab62 Binary files /dev/null and b/content/blog/september-2022/img/september-3.webp differ diff --git a/content/blog/september-2022/img/september-4.webp b/content/blog/september-2022/img/september-4.webp new file mode 100644 index 000000000..faaaa86a7 Binary files /dev/null and b/content/blog/september-2022/img/september-4.webp differ diff --git a/content/blog/september-2022/img/september-5.webp b/content/blog/september-2022/img/september-5.webp new file mode 100644 index 000000000..1f2060d89 Binary files /dev/null and b/content/blog/september-2022/img/september-5.webp differ diff --git a/content/blog/september-2022/index.md b/content/blog/september-2022/index.md new file mode 100644 index 000000000..4516157e3 --- /dev/null +++ b/content/blog/september-2022/index.md @@ -0,0 +1,76 @@ +--- +title: "September 2022" +date: 2023-01-01 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - developer-portal +tags: + - Instagram + - Newsletter + +--- +Hi everyone, + +We are very excited this month, as we are hard at work preparing for Espressif Systems’ first online conference, [Espressif DevCon2022](https://devcon.espressif.com/), which will hopefully become an annual tradition. The event will be broadcast live on 19 and 20 October 2022, starting at 10:00am (Central European Summer Time) and finishing at 20:00 on both days. + +This two-day online conference will highlight certain products and solutions created by Espressif and its partners. This event is designed, structured and put together by Espressif’s developers who wish to communicate and exchange ideas with the global community of developers. Espressif has always been close to the community, not only by offering its solutions on open-source platforms, but also by communicating directly with makers from around the world, responding to their questions and feedback. + +That said, the aim of Espressif DevCon2022 is to bring together the global community of developers *in real time*, and share with them new insights, knowledge and tech tips, along with information about new projects and products. Not only will this event give the opportunity to ESP users from around the world to learn more about Espressif, its products and services, but it will also give Espressif the chance to collect feedback and listen to the needs and questions of its global community of supporters during the live broadcast. + +You can expect more than 30 talks on such topics as Matter, ESP RainMaker, ESP-IDF, Privilege Separation, Embedded Rust, Components Manager, Board Support Packages, third-party frameworks, and more! This conference is open to anyone with a stable connection to the internet at no cost whatsoever. However, prospective attendees need to [register in advance](https://www.espressif.com/en/devcon/register). As ever, Espressif actively supports the spreading of tech knowledge far and wide to people from all walks of life, thus contributing to the democratization of technology. + +{{< figure + default=true + src="img/september-1.webp" + >}} + +Our keynote speakers include Espressif’s Founder and CEO, Teo Swee Ann, and Espressif’s VP of Software Platforms, Ivan Grokhotkov, while we also have invited speakers from Microsoft, Arduino, Adafruit, Golioth, Toit, and Wokwi. Their presentations will be complemented by those of dozens of Espressif engineers whose expertise will keep our global audience spellbound. To view the entire program of the conference and [fill in the registration form](https://www.espressif.com/en/devcon/register), please visit the official website of [Espressif DevCon2022](https://devcon.espressif.com/). + +We can’t wait to chat with as many of you as possible on 19 and 20 October! If you already have any questions or topics you would like to discuss, just drop us a line on our [Facebook event page](https://fb.me/e/30owugZxf). + +Keep reading this month’s newsletter, so you can also learn about: + +{{< figure + default=true + src="img/september-2.webp" + >}} + +[__Espressif Is Now a QuickTrack Solution Provider Certified by Wi-Fi Alliance__ ](https://www.espressif.com/en/news/ESP_QuickTrack) + +With [ESP32-C2](https://www.espressif.com/en/products/socs/esp32-c2) as a QuickTrack-qualified solution, Espressif has made it easier for its customers to achieve Wi-Fi CERTIFIEDTM status for their products. + +{{< figure + default=true + src="img/september-3.webp" + >}} + +[__Impressive UIs for ESP Projects with SquareLine Studio__ ](https://www.espressif.com/en/news/ESP_UIs_SquareLine_Studio) + +By following [our guide](/making-the-fancy-user-interface-on-esp-has-never-been-easier-e44e79c0ae3) and using the free-for-personal-use SquareLine Studio you can create a great-looking user interface for your next ESP project with ease. + +{{< figure + default=true + src="img/september-4.webp" + >}} + +[__ESP32-S2/S3/C3 Now Supported by Arduino Cloud__ ](https://www.espressif.com/en/news/ESP_Arduino_Cloud) + +[Arduino](https://blog.arduino.cc/2022/09/16/arduino-cloud-extends-esp32-support-to-s2-s3-c3-devices/) is committed to making the list of devices it supports on its platforms grow; hence, ESP32-S2, S3, and C3 have been added to this list. + +{{< figure + default=true + src="img/september-5.webp" + >}} + +[__ESP32-DevKitC V4 with Dual-Antenna Module Hits the Market__ ](https://www.espressif.com/en/news/ESP32_DevKitC_V4_available) + +Espressif’s IoT dev board, [ESP32-DevKitC V4](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-devkitc.html#id15), which has an embedded ESP32-WROOM-DA, has become commercially available. With two complementary antennas and the coexistence of Wi-Fi and Bluetooth (Classic & Low-Energy) connectivity, ESP32-DevKitC V4 enhances the quality of wireless connectivity across large areas. + +[Read More >](https://www.espressif.com/en/company/newsroom/news) + +Hope you enjoy reading this month’s newsletter. Keep sending us your messages and requests on [Facebook](https://www.facebook.com/espressif), [Twitter](https://twitter.com/EspressifSystem), [GitHub](https://github.com/espressif), [Instagram](https://www.instagram.com/espressif_systems_official/), [LinkedIn](https://www.linkedin.com/company/espressif-systems/), and [YouTube](https://www.youtube.com/c/EspressifSystems). + +You can also contact us through our [website](https://www.espressif.com/en/contact-us/sales-questions) or you can [email us](mailto:newsletter@espressif.com). We try to respond to all of your messages as quickly as possible! + +Best wishes,John LeeSenior Customer Support Officer. diff --git a/content/blog/simplify-embedded-projects-with-esp-bsp/index.md b/content/blog/simplify-embedded-projects-with-esp-bsp/index.md index f67dc3fd9..2c2599563 100644 --- a/content/blog/simplify-embedded-projects-with-esp-bsp/index.md +++ b/content/blog/simplify-embedded-projects-with-esp-bsp/index.md @@ -2,6 +2,7 @@ title: "Simplify Your Embedded Projects with ESP-BSP" date: 2024-06-18 showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" authors: - "juraj-michalek" tags: ["Embedded Systems", "ESP32", "ESP32-S3", "Espressif", "BSP"] diff --git a/content/blog/smart-curtains-system/img/building-1.webp b/content/blog/smart-curtains-system/img/building-1.webp new file mode 100644 index 000000000..6c56ea0e8 Binary files /dev/null and b/content/blog/smart-curtains-system/img/building-1.webp differ diff --git a/content/blog/smart-curtains-system/img/building-2.webp b/content/blog/smart-curtains-system/img/building-2.webp new file mode 100644 index 000000000..a6ccc585b Binary files /dev/null and b/content/blog/smart-curtains-system/img/building-2.webp differ diff --git a/content/blog/smart-curtains-system/img/building-3.webp b/content/blog/smart-curtains-system/img/building-3.webp new file mode 100644 index 000000000..ff6936712 Binary files /dev/null and b/content/blog/smart-curtains-system/img/building-3.webp differ diff --git a/content/blog/smart-curtains-system/img/building-4.webp b/content/blog/smart-curtains-system/img/building-4.webp new file mode 100644 index 000000000..2f6c662b6 Binary files /dev/null and b/content/blog/smart-curtains-system/img/building-4.webp differ diff --git a/content/blog/smart-curtains-system/img/building-5.webp b/content/blog/smart-curtains-system/img/building-5.webp new file mode 100644 index 000000000..fe00386fd Binary files /dev/null and b/content/blog/smart-curtains-system/img/building-5.webp differ diff --git a/content/blog/smart-curtains-system/img/building-6.webp b/content/blog/smart-curtains-system/img/building-6.webp new file mode 100644 index 000000000..74033f42d Binary files /dev/null and b/content/blog/smart-curtains-system/img/building-6.webp differ diff --git a/content/blog/smart-curtains-system/img/building-7.webp b/content/blog/smart-curtains-system/img/building-7.webp new file mode 100644 index 000000000..c77009456 Binary files /dev/null and b/content/blog/smart-curtains-system/img/building-7.webp differ diff --git a/content/blog/smart-curtains-system/img/building-8.webp b/content/blog/smart-curtains-system/img/building-8.webp new file mode 100644 index 000000000..d8846483f Binary files /dev/null and b/content/blog/smart-curtains-system/img/building-8.webp differ diff --git a/content/blog/smart-curtains-system/img/building-9.webp b/content/blog/smart-curtains-system/img/building-9.webp new file mode 100644 index 000000000..a44ed9df5 Binary files /dev/null and b/content/blog/smart-curtains-system/img/building-9.webp differ diff --git a/content/blog/smart-curtains-system/index.md b/content/blog/smart-curtains-system/index.md new file mode 100644 index 000000000..e1d8c9905 --- /dev/null +++ b/content/blog/smart-curtains-system/index.md @@ -0,0 +1,116 @@ +--- +title: "Building a Smart Curtains System with the ESP32" +date: 2022-11-23 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - marek-fiala +tags: + - Smart Home + - Esp32 + - Smart Curtain + - Home Automation + +--- +Recently, I’ve been sitting behind my computer, which is unluckily situated against a window. Sharp late-afternoon sunlight made me think about some intelligent system that recognizes this light and closes the curtains. As home automation has become more and more widespread in recent years, there are many options available on the market that solve most of the common problems we have daily. However, talking about intelligent curtains systems, most of the available solutions require replacing the whole curtains’ holders like rods or rails. I wanted to develop a system adaptable to curtains that are already in use. + +After several sketches, modeling attempts, and soldering experiments, this is what I came up with: + +{{< figure + default=true + src="img/building-1.webp" + >}} + +## Assembly + +- Stepper motor NEMA17 with driver [TMC2209](https://www.analog.com/en/lp/001/trinamic-support.html) to move the curtains +- [BH1750](https://drive.google.com/file/d/14TgYoCILyeGwoYwKgY8J0QdRMJRrRjMa/view) light sensor that provides information about light intensity +- [thermistor](https://www.vishay.com/docs/29049/ntcle100.pdf) to control the temperature of the motor to prevent overheating +- [reed switch](https://standexelectronics.com/wp-content/uploads/OKI_Reed_Switch_ORD213.pdf) whose function is to initialize the curtains +- [ESP32-DevKitC](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-devkitc.html#get-started-esp32-devkitc-board-front) board controls the stepper motor and communicates with the server/Home Assistant +- [DC/DC buck](https://www.laskakit.cz/user/related_files/lm2596_datasheet.pdf) converter converts 12V powering the Stepper motor into 5V, which powers the ESP32-DevKitC + +All parts used in this project should be easy to buy in any hardware/electronics store. The only exception may be the TMC2209 driver. It was developed to control 3D printers, thus it will definitely be in a 3D printing store. For an easier understanding of how these components work, I have linked datasheets to them. + +## Solution + +A key feature to call this system automated is the reed switch. After plugging the system into electricity, it automatically starts moving the curtains. Neodymium magnets are placed on the belt, which are detected with the reed switch when the system is fully opened or closed. That’s how the system is initialized and ready to move to certain positions. + +{{< figure + default=true + src="img/building-2.webp" + >}} + +I’ve created a custom PCB board to connect all these parts. The schematics diagram can be found in [the GitHub repo](https://github.com/mfialaf/ESP32-Smart-curtains-system/blob/945a8c5d69c5ee703012a8d527f10580258dfe39/pictures/connection_schematics_diagram.png). For better manipulation and modularity, all the peripherals are connected with JST XH connectors and pin sockets soldered to PCB. + +{{< figure + default=true + src="img/building-3.webp" + >}} + +{{< figure + default=true + src="img/building-4.webp" + >}} + +## Software + +I decided to implement three control modes. When one of these modes is active, the functionality is as follows: + +Communication between the user and the system is ensured by Home Assistant. Home Assistant runs as a server on a local network to which the ESP32 connects and communicates using the MQTT protocol (MQTT Broker extension in Home Assistant). + +{{< figure + default=true + src="img/building-5.webp" + >}} + +Every transferred value has its MQTT topic, like: *light, temperature, position, etc. *Most of the messages are just *Integers*, which are easy to send. But *timeTable* sends more than just a number, so the message must be serialized. In my case, into JSON format. + +``` +void Week::processRequrst(DynamicJsonDocument doc) +{ + const char *action = doc["action"]; + const char *day = doc["day"]; + int hours = doc["hour"]; + int mins = doc["min"]; + int position = doc["position"]; +... +``` + +Home Assistant provides friendly GUI, where the user can change and set values of desired modes. When the whole system is fully initialized, there is an asynchronous function *callback*, that process an incoming message and based on the topic changes the relevant values. The program cycles in an infinite loop and processes the position of the curtains based on the active mode, sensor values and actual position. It also reads new sensor data every 15 seconds, which is sent to the server. + +{{< figure + default=true + src="img/building-6.webp" + >}} + +{{< figure + default=true + src="img/building-7.webp" + >}} + +## Mechanics + +For easy adaptation to existing curtains, I designed 3D models of required holders that can be attached to the curtain rod. 3D models were made in Fusion 360 and can also be found in the repository. + +{{< figure + default=true + src="img/building-8.webp" + >}} + +{{< figure + default=true + src="img/building-9.webp" + >}} + +## Testing + +After assembling all parts into a prototype, came the moment of truth: How is it going to work altogether? After some debugging, the moving with all required modes works just fine. One of the problems is that I could not reach the required speed, probably caused by the stepper motor library I used.A future improvement could be motor overload detection. This function is called [StallGuard](https://www.analog.com/en/lp/001/building-better-stepper-motor-system.html) and is supported by the TMC2209 driver. It can be used to detect a foreign object in the way of curtains to prevent the stepper motor from overloading. + +## Conclusion + +This project was created as a Bachelor’s degree project at the Faculty of Information Technology, Brno University of Technology. I decided to implement the project in Arduino IDE, because of multiple choices of existing libraries to control time, motor, or WiFi connection. This was my first project using an embedded device and all its belongings like creating PCB, 3D modeling, soldering, etc… + +## Reference + +Link to GitHub repo with all used libraries and models can be found here: [Smart curtains system](https://github.com/mfialaf/ESP32-Smart-curtains-system) diff --git a/content/blog/software-bill-of-materials/img/software-1.webp b/content/blog/software-bill-of-materials/img/software-1.webp new file mode 100644 index 000000000..59f2b5f76 Binary files /dev/null and b/content/blog/software-bill-of-materials/img/software-1.webp differ diff --git a/content/blog/software-bill-of-materials/img/software-2.webp b/content/blog/software-bill-of-materials/img/software-2.webp new file mode 100644 index 000000000..dd785c804 Binary files /dev/null and b/content/blog/software-bill-of-materials/img/software-2.webp differ diff --git a/content/blog/software-bill-of-materials/img/software-3.webp b/content/blog/software-bill-of-materials/img/software-3.webp new file mode 100644 index 000000000..971234d99 Binary files /dev/null and b/content/blog/software-bill-of-materials/img/software-3.webp differ diff --git a/content/blog/software-bill-of-materials/index.md b/content/blog/software-bill-of-materials/index.md new file mode 100644 index 000000000..121d757b1 --- /dev/null +++ b/content/blog/software-bill-of-materials/index.md @@ -0,0 +1,222 @@ +--- +title: "Software Bill of Materials" +date: 2023-11-02 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - mahavir-jain +tags: + - Esp32 + - Esp Idf + - Security + - IoT + - Tools + +--- +## Overview + +The “software bill of materials” (SBOM) has emerged as a key building block in software security and [software supply chain](https://en.wikipedia.org/wiki/Software_supply_chain) risk management. An SBOM is a comprehensive list of all the software components, dependencies, and metadata associated with an application. + +Espressif believes that this information is a key step towards ensuring the security of the connected devices. And as such, we have now enabled easy to use tools and solutions to track and analyze this information. + +In this blog post, we shall look through the Espressif’s SBOM generator and analysis tool, [__ESP-IDF-SBOM__ ](https://github.com/espressif/esp-idf-sbom). + +## SBOM + +According to National Telecommunications and Information Administration’s (NTIA) SBOM FAQ, the official definition of SBOM goes as follows: + +A Software Bill of Materials (SBOM) is a complete, formally structured list of components, libraries, and modules that are required to build (i.e., compile and link) a given piece of software and the supply chain relationships between them. These components can be open source or proprietary, free or paid, and widely available or restricted access. + +Key data fields for each component includes: + +- Supplier Name +- Component Name +- Version of the Component +- Other Unique Identifiers +- Dependency Relationship +- Author of SBOM Data +- Timestamp + +SBOM data needs to be presented in consistent and digestible formats. Some formats to handle the data representation are SPDX, CycloneDX etc. + +Simple conceptual SBOM tree for wifi_provisioning component from ESP-IDF looks like below: + +{{< figure + default=true + src="img/software-1.webp" + >}} + +## SPDX + +[Software Package Data Exchange](https://spdx.github.io/spdx-spec/v2.3/) (SPDX) is an open standard for communicating software bill of materials (SBOM) information that supports accurate identification of software components, explicit mapping of relationships between components, and the association of security and licensing information with each component. + +The image below outlines what data can be found in an SPDX document. + +{{< figure + default=true + src="img/software-2.webp" + >}} + +## ESP-IDF-SBOM + +[ESP-IDF-SBOM](https://github.com/espressif/esp-idf-sbom) is a SBOM generator tool. It generates SPDX format SBOM for ESP-IDF based applications. This tool also allows to check the generated SBOM for known security vulnerabilities against [National Vulnerabilitiy Database](https://nvd.nist.gov/) (NVD). + +## SBOM Generator Workflow + +{{< figure + default=true + src="img/software-3.webp" + >}} + +Brief tool workflow goes like: + +- Collect sbom.yml ([a manifest file](https://github.com/espressif/esp-idf-sbom#manifest-file)) files from dependant components +- Parse project description file generated by the ESP-IDF build system +- Generate SPDX report +- Scan generated SPDX against the CVE databse to generate final report + +## Getting Started + +Install the tool and checkout its help: + +```shell +$ pip install esp-idf-sbom +$ esp-idf-sbom --help + +usage: esp-idf-sbom [-h] [-q] [-n] [-f] [-v] [-d] [--no-progress] {create,check,manifest} ... + +ESP-IDF SBOM tool + +positional arguments: + {create,check,manifest} + sub-command help + create Create SBOM file based on the ESP-IDF project_description.json file. + check Check components/submodules in the ESP-IDF SBOM file for possible + vulnerabilities reported in the National Vulnerability Database. + manifest Commands operating atop of manifest files. + +options: + -h, --help show this help message and exit + -q, --quiet By default auxiliary messages like errors, warnings, debug messages + or progress are reported to the standard error stream. With this + option set, all such messages are suppressed. + -n, --no-colors Do not emit color codes. By default color codes are used when stdout + or stderr is connected to a terminal. + -f, --force-colors Emit color codes even when stdout or stderr is not connected to a + terminal. + -v, --verbose Be verbose. Messages are printed to standard error output. + -d, --debug Print debug information. Messages are printed to standard error + output. + --no-progress Disable progress bar. +``` + +Generate the SBOM file: + +```shell +$ cd esp-idf/examples/provisioning/wifi_prov_mgr +$ idf.py build +$ esp-idf-sbom create --output-file prj.spdx +``` + +The project description file is a path to the project_description.json file, which is by default created by the ESP-IDF build system in the project's build directory. + +Check SBOM against the security vulnerabilities: + +```shell +$ esp-idf-sbom check prj.spdx + + Report summary +┌───────────────────────────────────┬─────────────────────────────────────────────────────────┐ +│ Date: │ 2023-10-10T08:21:39Z │ +│ Project name: │ project-wifi_prov_mgr │ +│ Project version: │ v5.2-dev-3250-g7d8f015a4c │ +│ Vulnerability database: │ NATIONAL VULNERABILITY DATABASE (https://nvd.nist.gov) │ +│ Generated by tool: │ esp-idf-sbom (0.8.0) │ +│ Generated with command: │ esp-idf-sbom check prj.spdx │ +│ Number of scanned packages: │ 57 │ +├───────────────────────────────────┼─────────────────────────────────────────────────────────┤ +│ CRITICAL CVEs found: │ │ +│ Packages affect by CRITICAL CVEs: │ │ +│ Number of CRITICAL CVEs: │ 0 │ +├───────────────────────────────────┼─────────────────────────────────────────────────────────┤ +│ HIGH CVEs found: │ │ +│ Packages affect by HIGH CVEs: │ │ +│ Number of HIGH CVEs: │ 0 │ +├───────────────────────────────────┼─────────────────────────────────────────────────────────┤ +│ MEDIUM CVEs found: │ │ +│ Packages affect by MEDIUM CVEs: │ │ +│ Number of MEDIUM CVEs: │ 0 │ +├───────────────────────────────────┼─────────────────────────────────────────────────────────┤ +│ LOW CVEs found: │ │ +│ Packages affect by LOW CVEs: │ │ +│ Number of LOW CVEs: │ 0 │ +├───────────────────────────────────┼─────────────────────────────────────────────────────────┤ +│ UNKNOWN CVEs found: │ │ +│ Packages affect by UNKNOWN CVEs: │ │ +│ Number of UNKNOWN CVEs: │ 0 │ +├───────────────────────────────────┼─────────────────────────────────────────────────────────┤ +│ All CVEs found: │ │ +│ All packages affect by CVEs: │ │ +│ Total number of CVEs: │ 0 │ +└───────────────────────────────────┴─────────────────────────────────────────────────────────┘ + + +Packages with No Identified Vulnerabilities + +┏━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃ Package ┃ Version ┃ CPE ┃ +┡━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ +│ project-wifi_prov_mgr │ v5.2-dev-3250-g7d8f015a4c │ cpe:2.3:a:espressif:esp-idf:5.2-dev-325 │ +│ │ │ 0-g7d8f015a4c:*:*:*:*:*:*:* │ +├───────────────────────┼───────────────────────────┼─────────────────────────────────────────┤ +│ lwip │ 2.1.3 │ cpe:2.3:a:lwip_project:lwip:2.1.3:*:*:* │ +│ │ │ :*:*:*:* │ +├───────────────────────┼───────────────────────────┼─────────────────────────────────────────┤ +│ cjson │ 1.7.16 │ cpe:2.3:a:cjson_project:cjson:1.7.16:*: │ +│ │ │ *:*:*:*:*:* │ +├───────────────────────┼───────────────────────────┼─────────────────────────────────────────┤ +│ protobuf-c │ 1.4.1 │ cpe:2.3:a:protobuf-c_project:protobuf-c │ +│ │ │ :1.4.1:*:*:*:*:*:*:* │ +├───────────────────────┼───────────────────────────┼─────────────────────────────────────────┤ +│ mbed_tls │ 3.4.1 │ cpe:2.3:a:arm:mbed_tls:3.4.1:*:*:*:*:*: │ +│ │ │ *:* │ +├───────────────────────┼───────────────────────────┼─────────────────────────────────────────┤ +│ freertos │ 10.4.3 │ cpe:2.3:o:amazon:freertos:10.4.3:*:*:*: │ +│ │ │ *:*:*:* │ +└───────────────────────┴───────────────────────────┴─────────────────────────────────────────┘ + +...snip +``` + +Some highlights from the SBOM vulnerability check: + +- wifi_prov_mgr application from ESP-IDF v5.2-dev was used for the exercise +- It is possible to scan the components which are not linked into final executable by adding --check-all-packages in the check command shown above +- It is also possible to generate the SBOM report for the ESP-IDF bootloader. Bootloader specific build description file can be found in the build/bootloader directory inside the project +- Some key components like RTOS, Networking Stack, TLS Stack etc. having [Common Platform Enumeration](https://nvd.nist.gov/products/cpe/search) entries have been highlighted in the above output +- Tool also displays information about other component and libraries (not shown in the above log) which are part of the build process + +## Report Format + +This tool supports multiple formats for the generated output report like JSON, CSV etc. Please refer to the tool help for more details. + +## Compatibility + +SPDX being a standard format for SBOM, also offers compatibility with the external tools. SBOM files generated from esp-idf-sbom can also be scanned using tools like [cve-bin-tool](https://github.com/intel/cve-bin-tool). This offers an added advantage if you already have any external tools integrated in your system and want to take advantage of its specific features (e.g., more extended scan against different CVE databases). + +--- + +## Summary + +To summarize, some key advantages of SBOM are: + +- Forms inventory of the components building the software artifacts +- Lists software licenses, component versions and helps to keep them up-to-date +- Helps to perform security vulnerability analysis +- Becoming a pre-requisite in many security related certifications + +[ESP-IDF-SBOM](https://github.com/espressif/esp-idf-sbom) tool is useful to generate SBOM for ESP-IDF based projects. The tool can also further help to scan and setup process for continuous security vulnerability scanning of the project. + +We are actively working on to enable wider SBOM coverage across our software solutions and looking for feedback on the __ESP-IDF-SBOM__ tool. + +Please do try and share your experience! diff --git a/content/blog/support-for-lts-release-of-aws-iot-device-sdk-for-embedded-c-on-esp3/img/releasing-1.webp b/content/blog/support-for-lts-release-of-aws-iot-device-sdk-for-embedded-c-on-esp3/img/releasing-1.webp new file mode 100644 index 000000000..ecd6d9efc Binary files /dev/null and b/content/blog/support-for-lts-release-of-aws-iot-device-sdk-for-embedded-c-on-esp3/img/releasing-1.webp differ diff --git a/content/blog/support-for-lts-release-of-aws-iot-device-sdk-for-embedded-c-on-esp3/img/releasing-2.webp b/content/blog/support-for-lts-release-of-aws-iot-device-sdk-for-embedded-c-on-esp3/img/releasing-2.webp new file mode 100644 index 000000000..3f226ff87 Binary files /dev/null and b/content/blog/support-for-lts-release-of-aws-iot-device-sdk-for-embedded-c-on-esp3/img/releasing-2.webp differ diff --git a/content/blog/support-for-lts-release-of-aws-iot-device-sdk-for-embedded-c-on-esp3/index.md b/content/blog/support-for-lts-release-of-aws-iot-device-sdk-for-embedded-c-on-esp3/index.md new file mode 100644 index 000000000..b8b4d0d73 --- /dev/null +++ b/content/blog/support-for-lts-release-of-aws-iot-device-sdk-for-embedded-c-on-esp3/index.md @@ -0,0 +1,85 @@ +--- +title: "Releasing LTS of AWS IoT Device SDK for Embedded C on ESP32" +date: 2021-08-25 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - dhaval-gujar +tags: + - ESP32 + - Aws Iot + - Embedded Systems + - Aws Iot Core + - Espressif +aliases: + - support-for-lts-release-of-aws-iot-device-sdk-for-embedded-c-on-esp32 +--- +{{< figure + default=true + src="img/releasing-1.webp" + >}} + +Since 2017, Espressif SoCs have been capable of connecting to the AWS IoT Core and related services. There are two ways to connect Espressif Wi-Fi SoCs to the AWS IoT Core. + +The first one is by using [Amazon provided FreeRTOS distribution](https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html). The FreeRTOS distribution is an all-inclusive solution, providing the kernel, the connectivity libraries, and its own build system. This offers a seamless way of connecting qualified SoCs to AWS IoT and related services. Yet, there are certain limitations on using this FreeRTOS distribution with Espressif SoCs. The SMP support to utilise multiple cores of SoCs like ESP32, as well as support for newer SoCs like ESP32-C3 are not yet available through the FreeRTOS distribution. + +The second way of connecting an Espressif Wi-Fi SoC to the AWS IoT Core, is by using the [IoT Device SDK for Embedded C](https://github.com/espressif/esp-aws-iot/) which is a stand-alone library, that includes support for MQTT and Device Shadow. However, support for other AWS services like OTA and Device Defender, was not available in this agent until recently. + +202009.00 and newer releases of the IoT Device SDK for Embedded C include a larger set of libraries for connecting to various AWS services (AWS IoT MQTT Broker, Device Shadow, AWS IoT Jobs, AWS IoT Device Defender, AWS IoT Over-the-air Update Library etc.). Additionally, the above-mentioned newer releases provide maximum flexibility by allowing the LTS releases of the AWS libraries to be used separately. This option gives developers the freedom to choose from different Espressif SoCs and versions of ESP-IDF, which allows for effective integration. + +On that account, we have just launched support for the 202103.00 release of the SDK in beta, for Espressif boards: [https://github.com/espressif/esp-aws-iot/tree/release/beta](https://github.com/espressif/esp-aws-iot/tree/release/beta) + +{{< figure + default=true + src="img/releasing-2.webp" + >}} + +At the time of writing this article, the beta release supports the following __AWS Standard LTS libraries__ : + +- coreHTTP +- coreJSON +- coreMQTT +- corePKCS11 + +and the following __AWS LTS libraries__ : + +- AWS IoT Device Shadow +- AWS IoT Jobs +- AWS IoT OTA + +To simplify the use of these libraries, we have made the following examples available: + +- [coreMQTT with TLS Mutual Authentication](https://github.com/espressif/esp-aws-iot/tree/release/beta/examples/mqtt/tls_mutual_auth) +- [Device Shadow Example](https://github.com/espressif/esp-aws-iot/tree/release/beta/examples/thing_shadow) +- [Jobs Example](https://github.com/espressif/esp-aws-iot/tree/release/beta/examples/jobs) +- [OTA over MQTT](https://github.com/espressif/esp-aws-iot/tree/release/beta/examples/ota/ota_mqtt) +- [coreHTTP with TLS Mutual Authentication](https://github.com/espressif/esp-aws-iot/tree/release/beta/examples/http/http_mutual_auth) +- [OTA over HTTP](https://github.com/espressif/esp-aws-iot/tree/release/beta/examples/ota/ota_http) + +Let us take take a look at the *Device Shadow* library and the corresponding example to see how we can use it easily: + +__Note:__ The following section assumes that the reader is familiar with using AWS IoT from the Web console, and has ESP-IDF setup on their computer.If have not setup the AWS IoT Core, follow steps given [here](https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs.html#aws-iot-get-started).[](https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs.html#aws-iot-get-started)If you have not installed ESP-IDF, follow steps given [here](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/). + +Begin by cloning the repository, checking out the `release/beta` branch and updating the submodule.Then, navigate to the Device Shadow example and set the AWS IoT endpoint, identifier and port. + +__Note:__ The example has been tested with ports 8883 and 443. In general, port 8883 is for secured MQTT connections. Port 443 requires the use of the ALPN TLS extension with the ALPN protocol name, which is not required when using port 8883.More on this here: [https://aws.amazon.com/blogs/iot/mqtt-with-tls-client-authentication-on-port-443-why-it-is-useful-and-how-it-works/](https://aws.amazon.com/blogs/iot/mqtt-with-tls-client-authentication-on-port-443-why-it-is-useful-and-how-it-works/) + +Open menuconfig and set the required values.Add the device certificates, as shown [here](https://github.com/espressif/esp-aws-iot/tree/release/beta/examples#configuring-your-device).Finally, build and flash the example onto your Espressif SoC. + +```shell +git clone --recursive https://github.com/espressif/esp-aws-iot +cd esp-aws-iot +git checkout release/beta +git submodule update --init --recursive +cd examples/thing_shadow +idf.py menuconfig # Set example and connection configuration here. +idf.py build flash monitor –p +``` + +You should now start seeing logs on your console every few seconds, describing the current status.The [README within the example](https://github.com/espressif/esp-aws-iot/blob/release/beta/examples/thing_shadow/README.md) contains more detailed steps and troubleshooting instructions, should you run into any issues. + +While the port of these libraries to the ESP32 platform is in beta, they are ready to be used for development. We will continue to work on adding more examples and porting other available LTS libraries.They will be out of beta once the qualification is complete. + +If you have any questions or face any problems, you can file an issue on [our repository](https://github.com/espressif/esp-aws-iot/tree/release/beta/). + +Thanks Amey Inamdar diff --git a/content/blog/switch-between-firmware-binaries/index.md b/content/blog/switch-between-firmware-binaries/index.md index 152615880..6e4fe202e 100644 --- a/content/blog/switch-between-firmware-binaries/index.md +++ b/content/blog/switch-between-firmware-binaries/index.md @@ -2,6 +2,7 @@ title: "How to switch between multiple ESP32 firmware binaries stored in the flash memory" date: 2024-07-24 showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" authors: - "juraj-michalek" tags: ["Embedded Systems", "ESP32", "ESP32-S3", "ESP32-P4", "GUI", "OTA", "Espressif", "BSP"] diff --git a/content/blog/trying-out-esp32-c3s-security-features-using-qemu/img/trying-1.webp b/content/blog/trying-out-esp32-c3s-security-features-using-qemu/img/trying-1.webp new file mode 100644 index 000000000..37001355f Binary files /dev/null and b/content/blog/trying-out-esp32-c3s-security-features-using-qemu/img/trying-1.webp differ diff --git a/content/blog/trying-out-esp32-c3s-security-features-using-qemu/index.md b/content/blog/trying-out-esp32-c3s-security-features-using-qemu/index.md new file mode 100644 index 000000000..a8ef123c3 --- /dev/null +++ b/content/blog/trying-out-esp32-c3s-security-features-using-qemu/index.md @@ -0,0 +1,469 @@ +--- +title: "Trying out ESP32-C3’s security features using QEMU" +date: 2024-04-04 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - harshal-patil +tags: + - latest release + - releases section + - Esp32 + - Esp Idf + - Security + - Emulator + - IoT + +--- +## Overview + +ESP32 series of SoCs supports multiple [security features ](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/security/security.html)like trusted boot, flash encryption, secure storage etc. There are also dedicated peripherals to support use-cases like HMAC and digital signature. For most of these features the eFuse storage in the ESP32-C3 is responsible for storing the private keys and also the configuration bits. + +eFuse memory is one time programmable and hence care must be taken whilst enabling the security features. eFuse programming being an irreversible operation, it is desired to have some playground available to first try out security features (e.g., under emulator) and then move to the real hardware. + +This article talks about exercising different security features in ESP32-C3 under QEMU (emulator). + +## QEMU + +> QEMU, which stands for Quick EMUlator, is an open-source virtualization tool that allows users to create and run virtual machines (VMs) on a host system. It can emulate various architectures, including x86, ARM, RISCV, and others, enabling users to run operating systems and software designed for different hardware platforms. + +Espressif has been developing a system-level emulation of RISC-V based ESP32-C3 using [QEMU](https://github.com/qemu/qemu/) and its [latest release](https://github.com/espressif/qemu/releases/tag/esp-develop-8.2.0-20240122) supports all the security features for ESP32-C3. Binary compatibility has been maintained to directly run the firmware built for ESP32-C3 target under QEMU. + +Emulator approach provides an advantage to iterate various security configurations without risk of bricking the hardware. Once the workflow is established under QEMU, it can be easily adapted for the real hardware. + +## How does QEMU help in trying out the security features? + +QEMU is a system-level emulator composed of instruction set emulation, memory and MMU emulation, and peripheral emulation. It also supports various virtual disk formats and networking configurations as well. + +{{< figure + default=true + src="img/trying-1.webp" + >}} + +This helps us to emulate the complete hardware SoC that includes peripherals emulation as well. Peripherals like eFuses, XTS-AES, RSA play a key role in supporting security features. + +We will deep-dive into how to use these emulated host files while using QEMU in the upcoming sections. + +## Trying out the security features + +Espressif’s [security guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/security/index.html) mentions two workflows for enabling the security features: + +- Internal first boot-up workflow +- [Host-based workflow](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/security/host-based-security-workflows.html) + +We will use a [demo example](https://github.com/Harshal5/esp-idf-security-example) which enabled and allows us to try out all the supported security features: + +- [Secure Boot V2](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/security/secure-boot-v2.html) +- [Flash Encryption](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/security/flash-encryption.html) +- [NVS Encryption](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/storage/nvs_encryption.html) ([using the HMAC based workflow](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/storage/nvs_encryption.html#nvs-encryption-hmac-peripheral-based-scheme)) + +Let us check out the boot internal first boot-up workflow: + +## Installing QEMU release versions + +``` +# Linux +wget https://github.com/espressif/qemu/releases/download/esp-develop-8.2.0-20240122/qemu-riscv32-softmmu-esp_develop_8.2.0_20240122-x86_64-linux-gnu.tar.xz -P ~/Downloads +tar xvf ~/Downloads/qemu-riscv32-softmmu-esp_develop_8.2.0_20240122-x86_64-linux-gnu.tar.xz -C ~/Downloads + +# MacOS (M1 silicon) +wget https://github.com/espressif/qemu/releases/download/esp-develop-8.2.0-20240122/qemu-riscv32-softmmu-esp_develop_8.2.0_20240122-aarch64-apple-darwin.tar.xz -P ~/Downloads +tar xvf ~/Downloads/qemu-riscv32-softmmu-esp_develop_8.2.0_20240122-aarch64-apple-darwin.tar.xz -C ~/Downloads +``` + +You could also consider adding it to your environment’s $PATH variable for ease of use. For example, in case of Linux/MacOS, if after extracting the downloaded release file is in the Downloads directory, you may run following command: + +``` +export PATH=$PATH:~/Downloads/qemu/bin +``` + +2. In case you are interested in trying out the development versions you could also opt for cloning and building Espressif’s GitHub QEMU [fork](https://github.com/espressif/qemu) using the configuration instructions mentioned in the [documentation](https://github.com/espressif/esp-toolchain-docs/tree/main/qemu/esp32c3). + +3. In case you are using ESP-IDF’s master branch for developing your firmware, the easiest way to install the QEMU is getting the release binaries that are packaged with ESP-IDF (master) using the following command: + +``` +python $IDF_PATH/tools/idf_tools.py install qemu-riscv32 +``` + +The above command exports the path to the ESP-IDF packaged QEMU release binaries into your $PATH variable as well. + +## Internal first boot-up workflow + +In this workflow, the security features are incrementally enabled during the first boot up by the bootloader. + +1. __Clone the demo project__ + +In a new terminal window, activate the ESP-IDF environment, using the . ./export.sh as mentioned in the ESP-IDF installation [section](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/get-started/linux-macos-setup.html#step-4-set-up-the-environment-variables). + +Use the following commands to clone the [demo](https://github.com/Harshal5/esp-idf-security-example) project: + +``` +git clone https://github.com/Harshal5/esp-idf-security-example.git +cd esp-idf-security-example +``` + +2. __Enable the security related configs__ + +Starting off with the first step, set project target to esp32c3 by entering the command: + +``` +idf.py set-target esp32c3 +``` + +The project we are using already has all the security configs listed below enabled by default (sdkconfig.defaults), so you do not need to enable them by yourselves. + +Security-related configs that have been enabled: + +``` +# Secure Boot related configs +CONFIG_SECURE_SIGNED_ON_BOOT=y +CONFIG_SECURE_SIGNED_ON_UPDATE=y +CONFIG_SECURE_SIGNED_APPS=y + +CONFIG_SECURE_BOOT_V2_RSA_ENABLED=y +CONFIG_SECURE_SIGNED_APPS_RSA_SCHEME=y +CONFIG_SECURE_BOOT=y +CONFIG_SECURE_BOOT_V2_ENABLED=y +CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES=y +CONFIG_SECURE_BOOT_SIGNING_KEY="secure_boot_signing_key.pem" +CONFIG_SECURE_BOOT_FLASH_BOOTLOADER_DEFAULT=y + +# Flash Encryption related configs +CONFIG_SECURE_FLASH_ENC_ENABLED=y +CONFIG_FLASH_ENCRYPTION_ENABLED=y +CONFIG_SECURE_FLASH_ENCRYPTION_MODE_RELEASE=y +CONFIG_SECURE_FLASH_HAS_WRITE_PROTECTION_CACHE=y +CONFIG_SECURE_FLASH_ENCRYPT_ONLY_IMAGE_LEN_IN_APP_PART=y +CONFIG_SECURE_FLASH_CHECK_ENC_EN_IN_APP=y +CONFIG_SECURE_ENABLE_SECURE_ROM_DL_MODE=y + +# NVS Encryption related configs +CONFIG_NVS_ENCRYPTION=y +CONFIG_NVS_SEC_KEY_PROTECT_USING_HMAC=y +CONFIG_NVS_SEC_HMAC_EFUSE_KEY_ID=3 +``` + +Setting these configs assume that we have a pre-generated secure boot key named *secure_boot_signing_key.pem*, flash encryption key would be generated by the device (esp32c3), and an HMAC key (say *hmac_key.bin*) that would be used to derive the NVS encryption key needs to be pre-burnt in the eFuse KEY_BLOCK3. + +The secure boot signing key being an RSA key, can be generated using the command: + +``` +espsecure.py generate_signing_key --version 2 secure_boot_signing_key.pem +``` + +whereas the NVS encryption key being an AES key can be created using the command: + +``` +dd if=/dev/random of=hmac_key.bin bs=1 count=32 +``` + +3. __Generate the flash image__ + +Once we are done with the configurations, we need to build the firmware using the command: + +``` +idf.py build +``` + +that would create the bootloader, partition-table, and the application images individually in the build directory. + +The QEMU flash image should be generated by merging the boot loader, partition-table and the application binary images present in the project'sbuild directory of the project. A straightforward way to generate such a flash image is by using the esptool.py merge_bin command with the parameter flash_args file, which contains the entries of all the binary images that are needed to be flash using the command idf.py flash. + +Use the below command to generate a complete flash image (flash_image) for the firmware: + +``` +(cd build; esptool.py --chip esp32c3 merge_bin --fill-flash-size 4MB -o flash_image.bin @flash_args) +``` + +As we have already enabled the config CONFIG_SECURE_BOOT_FLASH_BOOTLOADER_DEFAULT, the bootloader entry gets added into the flash_args file, which is needed because as mentioned in secure boot [guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/security/secure-boot-v2.html), bootloader does not get flashed by default with the idf.py flash command when secure boot is enabled. + +4. __Get the eFuses file ready__ + +A simple eFuses file could be created using: + +``` +dd if=/dev/zero bs=1K count=1 of=build/qemu_efuse.bin +``` + +This command creates a 1KB (1024 bytes) file, which is the total size of ESP32-C3 eFuse blocks, filled with zeros. + +Now you have your eFuse file ready and you can view the eFuses summary by running QEMU ESP32-C3 in download mode and attaching the above generated eFuses file. Run QEMU in the download mode using the following command in the terminal in which we have updated the *PATH *variable: + +``` +qemu-system-riscv32 -nographic \ + -machine esp32c3 \ + -global driver=esp32c3.gpio,property=strap_mode,value=0x02 \ + -drive file=build/qemu_efuse.bin,if=none,format=raw,id=efuse \ + -global driver=nvram.esp32c3.efuse,property=drive,value=efuse \ + -serial tcp::5555,server,nowait +``` + +(Once you run the above command you will be able to see the version of the QEMU binary in such format QEMU 8.2.0 monitor. Make sure the version is ≥ 8.2.0) + +Once QEMU is up running in the download mode, you should be able to check the eFuses summary using espefuse.py in the ESP-IDF environment terminal window: + +``` +export ESPPORT=socket://localhost:5555 + +espefuse.py -p $ESPPORT --before=no_reset summary +``` + +Note: While running QEMU in the download mode the serial output can be redirected to a TCP port. As done in the above QEMU command we have used port 5555, thus you need to set the variable ESPPORT to socket://localhost:5555 or use the port directly for all the related operations. + +You should now be able to view an empty or clean eFuses summary similar to a physical hardware chip. + +__You would also need to set the ECO version as required__ . For example, if an ESP32-C3 v0.3 is to be used, you need to set the eFuse WAFER_VERSION_MINOR_LO to value 3. + +``` +espefuse.py -p $ESPPORT --before=no_reset burn_efuse WAFER_VERSION_MINOR_LO 3 +``` + +Finally burn the HMAC key in KEY_BLOCK3 with the key purpose HMAC_UP that would be used for NVS encryption: + +``` +espefuse.py -p $ESPPORT --before=no_reset burn_key BLOCK_KEY3 hmac_key.bin HMAC_UP +``` + +Once you are done with burning all the required eFuses, you need to close QEMU by entering the “quit” command. + +5. __Run the firmware using QEMU__ + +We are now ready to run the firmware by running QEMU in the boot mode using the command: + +``` +qemu-system-riscv32 -nographic \ + -M esp32c3 \ + -drive file=build/flash_image.bin,if=mtd,format=raw \ + -drive file=build/qemu_efuse.bin,if=none,format=raw,id=efuse \ + -global driver=nvram.esp32c3.efuse,property=drive,value=efuse \ + -serial mon:stdio +``` + +Note: Supply the same merged flash image and the updated eFuses file generated in the previous steps. + +As we have used stdio as output destination to the serial port, we should now be able to see the following success logs of enabling secure boot, flash encryption and NVS encryption respectively along with their corresponding eFuses burned in the eFuse file, and the merged flash_image being encrypted: + +``` +> qemu-system-riscv32 -nographic \ + -M esp32c3 \ + -drive file=build/flash_image.bin,if=mtd,format=raw \ + -drive file=build/qemu_efuse.bin,if=none,format=raw,id=efuse \ + -global driver=nvram.esp32c3.efuse,property=drive,value=efuse \ + -serial mon:stdio + +Adding SPI flash device +ESP-ROM:esp32c3-api1-20210207 +Build:Feb 7 2021 +rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT) +SPIWP:0xee +mode:DIO, clock div:1 +load:0x3fcd5990,len:0x3b48 +load:0x403cc710,len:0xb9c +load:0x403ce710,len:0x5b78 +entry 0x403cc71a +I (1) boot: ESP-IDF v5.3-dev-2547-g8b3821ca67 2nd stage bootloader +I (2) boot: compile time Mar 14 2024 15:09:57 +I (5) boot: chip revision: v0.3 +I (7) boot.esp32c3: SPI Speed : 80MHz +I (7) boot.esp32c3: SPI Mode : SLOW READ +I (8) boot.esp32c3: SPI Flash Size : 2MB +I (11) boot: Enabling RNG early entropy source... +I (17) boot: Partition Table: +I (17) boot: ## Label Usage Type ST Offset Length +I (18) boot: 0 nvs WiFi data 01 02 0000e000 00006000 +I (18) boot: 1 storage Unknown data 01 ff 00014000 00001000 +I (19) boot: 2 factory factory app 00 00 00020000 00100000 +I (19) boot: 3 nvs_key NVS keys 01 04 00120000 00001000 +I (20) boot: 4 custom_nvs WiFi data 01 02 00121000 00006000 +I (20) boot: End of partition table +I (22) esp_image: segment 0: paddr=00020020 vaddr=3c030020 size=0c1d8h ( 49624) map +I (36) esp_image: segment 1: paddr=0002c200 vaddr=3fc8b600 size=01548h ( 5448) load +I (38) esp_image: segment 2: paddr=0002d750 vaddr=40380000 size=028c8h ( 10440) load +I (42) esp_image: segment 3: paddr=00030020 vaddr=42000020 size=21034h (135220) map +I (76) esp_image: segment 4: paddr=0005105c vaddr=403828c8 size=08c84h ( 35972) load +I (86) esp_image: segment 5: paddr=00059ce8 vaddr=00000000 size=062e8h ( 25320) +I (93) esp_image: Verifying image signature... +I (95) secure_boot_v2: Secure boot V2 is not enabled yet and eFuse digest keys are not set +I (97) secure_boot_v2: Verifying with RSA-PSS... +I (103) secure_boot_v2: Signature verified successfully! +I (104) boot: Loaded app from partition at offset 0x20000 +I (105) secure_boot_v2: enabling secure boot v2... +I (109) efuse: Batch mode of writing fields is enabled +I (110) esp_image: segment 0: paddr=00000020 vaddr=3fcd5990 size=03b48h ( 15176) +I (114) esp_image: segment 1: paddr=00003b70 vaddr=403cc710 size=00b9ch ( 2972) +I (116) esp_image: segment 2: paddr=00004714 vaddr=403ce710 size=05b78h ( 23416) +I (122) esp_image: Verifying image signature... +I (124) secure_boot_v2: Secure boot V2 is not enabled yet and eFuse digest keys are not set +I (125) secure_boot_v2: Verifying with RSA-PSS... +I (127) secure_boot_v2: Signature verified successfully! +I (127) secure_boot_v2: Secure boot digests absent, generating.. +I (141) secure_boot_v2: Digests successfully calculated, 1 valid signatures (image offset 0x0) +I (141) secure_boot_v2: 1 signature block(s) found appended to the bootloader. +I (142) secure_boot_v2: Burning public key hash to eFuse +I (143) efuse: Writing EFUSE_BLK_KEY0 with purpose 9 +I (208) secure_boot_v2: Digests successfully calculated, 1 valid signatures (image offset 0x20000) +I (209) secure_boot_v2: 1 signature block(s) found appended to the app. +I (210) secure_boot_v2: Application key(0) matches with bootloader key(0). +I (210) secure_boot_v2: Revoking empty key digest slot (1)... +I (211) secure_boot_v2: Revoking empty key digest slot (2)... +I (211) secure_boot_v2: blowing secure boot efuse... +I (212) secure_boot: Enabling Security download mode... +I (212) secure_boot: Disable hardware & software JTAG... +I (215) efuse: BURN BLOCK4 +I (236) efuse: BURN BLOCK4 - OK (write block == read block) +I (236) efuse: BURN BLOCK0 +I (256) efuse: BURN BLOCK0 - OK (all write block bits are set) +I (259) efuse: Batch mode. Prepared fields are committed +I (259) secure_boot_v2: Secure boot permanently enabled +I (260) boot: Checking flash encryption... +I (263) efuse: Batch mode of writing fields is enabled +I (264) flash_encrypt: Generating new flash encryption key... +I (265) efuse: Writing EFUSE_BLK_KEY1 with purpose 4 +I (266) flash_encrypt: Disable UART bootloader encryption... +I (266) flash_encrypt: Disable UART bootloader cache... +I (266) flash_encrypt: Disable JTAG... +I (267) efuse: BURN BLOCK5 +I (293) efuse: BURN BLOCK5 - OK (write block == read block) +I (293) efuse: BURN BLOCK0 +I (313) efuse: BURN BLOCK0 - OK (all write block bits are set) +I (316) efuse: Batch mode. Prepared fields are committed +I (316) esp_image: segment 0: paddr=00000020 vaddr=3fcd5990 size=03b48h ( 15176) +I (321) esp_image: segment 1: paddr=00003b70 vaddr=403cc710 size=00b9ch ( 2972) +I (322) esp_image: segment 2: paddr=00004714 vaddr=403ce710 size=05b78h ( 23416) +I (329) esp_image: Verifying image signature... +I (331) secure_boot_v2: Verifying with RSA-PSS... +I (333) secure_boot_v2: Signature verified successfully! +I (479) flash_encrypt: bootloader encrypted successfully +I (492) flash_encrypt: partition table encrypted and loaded successfully +I (493) flash_encrypt: Encrypting partition 1 at offset 0x14000 (length 0x1000)... +I (505) flash_encrypt: Done encrypting +I (505) esp_image: segment 0: paddr=00020020 vaddr=3c030020 size=0c1d8h ( 49624) map +I (518) esp_image: segment 1: paddr=0002c200 vaddr=3fc8b600 size=01548h ( 5448) +I (520) esp_image: segment 2: paddr=0002d750 vaddr=40380000 size=028c8h ( 10440) +I (524) esp_image: segment 3: paddr=00030020 vaddr=42000020 size=21034h (135220) map +I (558) esp_image: segment 4: paddr=0005105c vaddr=403828c8 size=08c84h ( 35972) +I (567) esp_image: segment 5: paddr=00059ce8 vaddr=00000000 size=062e8h ( 25320) +I (574) esp_image: Verifying image signature... +I (575) secure_boot_v2: Verifying with RSA-PSS... +I (577) secure_boot_v2: Signature verified successfully! +I (577) flash_encrypt: Encrypting partition 2 at offset 0x20000 (length 0x100000)... +I (3532) flash_encrypt: Done encrypting +I (3532) flash_encrypt: Encrypting partition 3 at offset 0x120000 (length 0x1000)... +I (3544) flash_encrypt: Done encrypting +I (3545) flash_encrypt: Setting CRYPT_CNT for permanent encryption +I (3548) efuse: BURN BLOCK0 +I (3568) efuse: BURN BLOCK0 - OK (all write block bits are set) +I (3573) flash_encrypt: Flash encryption completed +I (3574) boot: Resetting with flash encryption enabled... +ESP-ROM:esp32c3-api1-20210207 +Build:Feb 7 2021 +rst:0x3 (RTC_SW_SYS_RST),boot:0x8 (SPI_FAST_FLASH_BOOT) +SPIWP:0xee +mode:DIO, clock div:1 +Valid secure boot key blocks: 0 +secure boot verification succeeded +load:0x3fcd5990,len:0x3b48 +load:0x403cc710,len:0xb9c +load:0x403ce710,len:0x5b78 +entry 0x403cc71a +I (3657) boot: ESP-IDF v5.3-dev-2547-g8b3821ca67 2nd stage bootloader +I (3658) boot: compile time Mar 14 2024 15:09:57 +I (3662) boot: chip revision: v0.3 +I (3664) boot.esp32c3: SPI Speed : 80MHz +I (3664) boot.esp32c3: SPI Mode : SLOW READ +I (3665) boot.esp32c3: SPI Flash Size : 2MB +I (3668) boot: Enabling RNG early entropy source... +I (3673) boot: Partition Table: +I (3673) boot: ## Label Usage Type ST Offset Length +I (3674) boot: 0 nvs WiFi data 01 02 0000e000 00006000 +I (3674) boot: 1 storage Unknown data 01 ff 00014000 00001000 +I (3675) boot: 2 factory factory app 00 00 00020000 00100000 +I (3675) boot: 3 nvs_key NVS keys 01 04 00120000 00001000 +I (3676) boot: 4 custom_nvs WiFi data 01 02 00121000 00006000 +I (3676) boot: End of partition table +I (3678) esp_image: segment 0: paddr=00020020 vaddr=3c030020 size=0c1d8h ( 49624) map +I (3694) esp_image: segment 1: paddr=0002c200 vaddr=3fc8b600 size=01548h ( 5448) load +I (3698) esp_image: segment 2: paddr=0002d750 vaddr=40380000 size=028c8h ( 10440) load +I (3704) esp_image: segment 3: paddr=00030020 vaddr=42000020 size=21034h (135220) map +I (3741) esp_image: segment 4: paddr=0005105c vaddr=403828c8 size=08c84h ( 35972) load +I (3752) esp_image: segment 5: paddr=00059ce8 vaddr=00000000 size=062e8h ( 25320) +I (3761) esp_image: Verifying image signature... +I (3765) secure_boot_v2: Verifying with RSA-PSS... +I (3767) secure_boot_v2: Signature verified successfully! +I (3768) boot: Loaded app from partition at offset 0x20000 +I (3769) secure_boot_v2: enabling secure boot v2... +I (3769) secure_boot_v2: secure boot v2 is already enabled, continuing.. +I (3770) boot: Checking flash encryption... +I (3770) flash_encrypt: flash encryption is enabled (0 plaintext flashes left) +I (3771) boot: Disabling RNG early entropy source... +I (3776) cpu_start: Unicore app +I (3802) cpu_start: Pro cpu start user code +I (3802) cpu_start: cpu freq: 160000000 Hz +I (3803) app_init: Application information: +I (3803) app_init: Project name: security +I (3803) app_init: App version: 26b03ca +I (3803) app_init: Compile time: Mar 14 2024 15:09:53 +I (3803) app_init: ELF file SHA256: 5ed173a2f... +I (3804) app_init: ESP-IDF: v5.3-dev-2547-g8b3821ca67 +I (3804) efuse_init: Min chip rev: v0.3 +I (3804) efuse_init: Max chip rev: v1.99 +I (3804) efuse_init: Chip rev: v0.3 +I (3805) heap_init: Initializing. RAM available for dynamic allocation: +I (3806) heap_init: At 3FC8DCD0 len 00032330 (200 KiB): RAM +I (3806) heap_init: At 3FCC0000 len 0001C710 (113 KiB): Retention RAM +I (3806) heap_init: At 3FCDC710 len 00002950 (10 KiB): Retention RAM +I (3806) heap_init: At 50000010 len 00001FD8 (7 KiB): RTCRAM +I (3815) spi_flash: detected chip: gd +I (3815) spi_flash: flash io: dio +W (3816) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the size in the binary image header. +I (3817) flash_encrypt: Flash encryption mode is RELEASE +I (3820) nvs_sec_provider: NVS Encryption - Registering HMAC-based scheme... +I (3821) sleep: Configure to isolate all GPIO pins in sleep state +I (3822) sleep: Enable automatic switching of GPIO sleep configuration +I (3827) main_task: Started on CPU0 +I (3827) main_task: Calling app_main() + +Example to check Flash Encryption status +This is esp32c3 chip with 1 CPU core(s), WiFi/BLE, silicon revision v0.3, 2MB external flash +FLASH_CRYPT_CNT eFuse value is 7 +Flash encryption feature is enabled in RELEASE mode +Erasing partition "storage" (0x1000 bytes) +Writing data with esp_partition_write: +I (3827) example: 0x3fc8fa00 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |................| +I (3827) example: 0x3fc8fa10 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f |................| +Reading with esp_partition_read: +I (3837) example: 0x3fc8fa20 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |................| +I (3837) example: 0x3fc8fa30 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f |................| +Reading with esp_flash_read: +I (3837) example: 0x3fc8fa20 75 75 ca b0 e6 09 a7 c1 bd c0 8a 08 e3 24 25 47 |uu...........$%G| +I (3837) example: 0x3fc8fa30 a5 e7 94 b4 04 1e 55 d5 ff 04 c9 b8 55 a7 0a 7f |......U.....U...| +I (3847) nvs: NVS partition "nvs" is encrypted. +I (3857) example: NVS partition "custom_nvs" is encrypted. +I (3857) main_task: Returned from app_main() +``` + +You can terminate the QEMU session, using *control+A* and then pressing *X.* + +__Just to verify__ : + +As we have selected Flash Encryption Release mode, if you try checking out the eFuses summary by running QEMU in the download mode, you will come across the following error: + +``` +A fatal error occurred: Secure Download Mode is enabled. The tool can not read eFuses. +``` + +As you have the eFuses file with yourself, you can always modify it, and this opens a lot of possibilities to test your firmware with different eFuses combinations. + +## Future Work + +Currently, you can quickly try out any ESP-IDF (master branch) based application using QEMU by just running the command idf.py qemu. This command handles all the intermediary steps like generation of eFuses file and the merged binary. But as of now it does not support using a pre-programmed eFuses file, instead it creates a new one for every instance of the run. We are trying to support usage of pre-programmed eFuses file as this will surely increase the user experience of using the emulator approach for such use-cases. + +## Summary + +Thus, we have seen that the emulator approach surely provides an advantage to iterate over and debug various security configurations and speed up the testing process to finally develop a production-ready configuration that can be tested on the real hardware, without the risk of bricking it due to any misconfigurations. + +In part 2 of this blog, we would go through the host-based workflow for enabling the security features using QEMU. + +Till then, in case you are unsure about the boot loader boot workflow to enable security features, you could safely try it out using ESP32-C3 QEMU first to avoid any hardware damage. + +We are actively working to enable support for any other remaining peripherals of an ESP32-C3 as well, do let us know your feedback and if you come across any issues, feel free to open a discussion/issue at our GitHub repository. diff --git a/content/blog/understanding-esp32s-security-features/img/understanding-1.webp b/content/blog/understanding-esp32s-security-features/img/understanding-1.webp new file mode 100644 index 000000000..0f35eae0c Binary files /dev/null and b/content/blog/understanding-esp32s-security-features/img/understanding-1.webp differ diff --git a/content/blog/understanding-esp32s-security-features/img/understanding-2.webp b/content/blog/understanding-esp32s-security-features/img/understanding-2.webp new file mode 100644 index 000000000..2dfea8a1c Binary files /dev/null and b/content/blog/understanding-esp32s-security-features/img/understanding-2.webp differ diff --git a/content/blog/understanding-esp32s-security-features/img/understanding-3.webp b/content/blog/understanding-esp32s-security-features/img/understanding-3.webp new file mode 100644 index 000000000..cb9455526 Binary files /dev/null and b/content/blog/understanding-esp32s-security-features/img/understanding-3.webp differ diff --git a/content/blog/understanding-esp32s-security-features/img/understanding-4.webp b/content/blog/understanding-esp32s-security-features/img/understanding-4.webp new file mode 100644 index 000000000..c867dff82 Binary files /dev/null and b/content/blog/understanding-esp32s-security-features/img/understanding-4.webp differ diff --git a/content/blog/understanding-esp32s-security-features/img/understanding-5.webp b/content/blog/understanding-esp32s-security-features/img/understanding-5.webp new file mode 100644 index 000000000..d99cfdca3 Binary files /dev/null and b/content/blog/understanding-esp32s-security-features/img/understanding-5.webp differ diff --git a/content/blog/understanding-esp32s-security-features/index.md b/content/blog/understanding-esp32s-security-features/index.md new file mode 100644 index 000000000..d20a2c3e5 --- /dev/null +++ b/content/blog/understanding-esp32s-security-features/index.md @@ -0,0 +1,98 @@ +--- +title: "Understanding ESP32’s Security Features" +date: 2018-05-31 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Security + - Building Products + +--- +[This document discusses security features for ESP32v3. If you are looking for the security features of the latest [ESP32-S2](https://www.espressif.com/en/news/espressif-announces-%E2%80%A8esp32-s2-secure-wi-fi-mcu) SoC, that article is available [here](/blog/esp32-s2-security-improvements).] + +The ESP32v3 has two interesting features, secure boot and flash encryption. Let’s have a quick overview of these features. + +Typically when a device is shipped, any firmware or data is stored in the SPI flash connected to the ESP32v3. Since typically flashes are external to the SoC, a sufficiently inclined person could read the contents of this flash if she so desires for their benefit. What’s more, the contents could also be modified or tampered with to affect the flow of execution. + +The flash encryption and secure boot features protect from the side-effects of these types of unwanted accesses to the flash. + +## The eFUSE: One Time Programmable + +The eFUSE plays an important role in the functioning of these security features. So let’s quickly look into the eFUSE before we get into the security features. + +The ESP32 has a 1024-bit eFUSE, which is a one-time programmable memory. This eFUSE is divided into 4 blocks of 256-bits each. + +{{< figure + default=true + src="img/understanding-1.webp" + >}} + +Of primary interest to us right now are blocks 1 and 2. These blocks store keys for flash encryption and secure boot respectively. Also, once the keys are stored in the eFUSE, it can be configured such that any software running on ESP32 cannot read (or update) these keys (__disable software readout__ ). Once enabled, only the ESP32 hardware can read and use these keys for ensuring secure boot and flash encryption. + +## Secure Boot + +> The secure boot support ensures that when the ESP32 executes any software from flash, that software is trusted and signed by a known entity. If even a single bit in the software bootloader and application firmware is modified, the firmware is not trusted, and the device will refuse to execute this untrusted code. + +This is achieved by building a chain of trust from the hardware, to the software bootloader to the application firmware. + +{{< figure + default=true + src="img/understanding-2.webp" + >}} + +## Validating the Software Bootloader + +The Bootloader image, as stored in flash, contains the following logical parts: + +{{< figure + default=true + src="img/understanding-3.webp" + >}} + +- __Bootloader Image:__ This is the bootloader executable that contains the bootloader +- __RSA Signature:__ This is the RSA3072 based signature of the bootloader image. +- __RSA 3072 Public Key:__ The public key that can be used to validate the signature. + +The validation progresses as follows: + +This way, it is validated that the bootloader is trusted. The RSA __private__ key that was used to generate the signature is kept safely with the manufacturer. + +## Validating the Application Firmware + +In the previous step, the Bootloader is confirmed to be trusted. Once trust is established, the BootROM transfers execution control to the Bootloader. + +The Bootloader will now, in turn, validate the Application Firmware. The validation of application firmware is exactly similar to that of the bootloader as shown below. + +{{< figure + default=true + src="img/understanding-4.webp" + >}} + +And that’s how secure boot on ESP32 works. + +## Flash Encryption + +> The flash encryption support ensures that any application firmware, that is stored in the flash of the ESP32, stays encrypted. This allows manufacturers to ship encrypted firmware in their devices. + +When flash encryption is enabled, all memory-mapped read accesses to flash are transparently, and at-runtime, decrypted. The flash controller uses the AES key stored in the eFUSE to perform the AES decryption. Similarly, any memory-mapped write operation causes the corresponding data to be transparently encrypted before being written to flash. + +{{< figure + default=true + src="img/understanding-5.webp" + >}} + +Because the key is locked into the eFUSE, only the hardware can use it to decrypt the contents of the flash. + +## Disabling JTAG/UART Boot + +The eFuse has one-time programmable bit fields that allow you to disable support for JTAG debugging, as well as the support for UART Boot. Once disabled, these features cannot be re-enabled on the device under consideration. + +__Previous versions of ESP32__ + +The previous versions of ESP32 (prior to ESP32v3), did not support RSA. This is called [Secure Boot v1](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/security/secure-boot-v1.html) (as opposed to Secure Boot v2 supported in ESP32v3 onwards). + +If you are looking for network security using TLS (Transport Layer Security), please go to this article: [TLS and IoT](https://link.medium.com/dAVg4xqtkR). + +If you are looking for more information or would like to try it out, please head over to the step-by-step documentation for [Secure Boot](http://esp-idf.readthedocs.io/en/latest/security/secure-boot.html) and [Flash Encryption](http://esp-idf.readthedocs.io/en/latest/security/flash-encryption.html). diff --git a/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/img/unleashing-1.webp b/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/img/unleashing-1.webp new file mode 100644 index 000000000..e01f10a1e Binary files /dev/null and b/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/img/unleashing-1.webp differ diff --git a/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/img/unleashing-2.webp b/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/img/unleashing-2.webp new file mode 100644 index 000000000..12654620f Binary files /dev/null and b/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/img/unleashing-2.webp differ diff --git a/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/img/unleashing-3.webp b/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/img/unleashing-3.webp new file mode 100644 index 000000000..6d63d4611 Binary files /dev/null and b/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/img/unleashing-3.webp differ diff --git a/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/img/unleashing-4.webp b/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/img/unleashing-4.webp new file mode 100644 index 000000000..2d8e6cca1 Binary files /dev/null and b/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/img/unleashing-4.webp differ diff --git a/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/index.md b/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/index.md new file mode 100644 index 000000000..5ffa00d26 --- /dev/null +++ b/content/blog/unleashing-the-power-of-openai-and-esp-box-a-guide-to-fusing-chatgpt-with-espressif-socs/index.md @@ -0,0 +1,495 @@ +--- +title: "Unleashing the Power of OpenAI and ESP-BOX: A Guide to Fusing ChatGPT with + Espressif SOCs" +date: 2023-06-12 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - ali-hassan-shah +tags: + - AI + - Chatgpt Chatbot + - ChatGPT + - Esp + - OpenAI + +--- +The world is witnessing a technological revolution, and OpenAI is at the forefront of this change. One of its most exciting innovations is ChatGPT — that utilizes natural language processing to create more engaging and intuitive user experiences. The integration of OpenAI APIs with IoT devices has opened up a world of possibilities. + +{{< figure + default=true + src="img/unleashing-1.webp" + >}} + +__*In this article, we will explore the potential of ChatGPT with ESP-BOX, a powerful combination that can take IoT devices to the next level.*__ + +## ESP-BOX + +The [ESP-BOX](https://github.com/espressif/esp-box) is a new generation AIoT development platform that includes the ESP32-S3-BOX and ESP32-S3-BOX-Lite development boards. These boards are based on the [ESP32-S3](https://products.espressif.com/#/product-selector?names=&filter={%22Series%22:[%22ESP32-S3%22]}) Wi-Fi + Bluetooth 5 (LE) SoC and provide a flexible and customizable solution for developing AIoT applications that integrate with various sensors, controllers, and gateways. + +{{< figure + default=true + src="img/unleashing-2.webp" + >}} + +The ESP-BOX is packed with a wide range of features that make it an ideal AIoT development platform. Let’s take a closer look at some of the key features + +## Case Study + +Developing a Voice-Controlled Chatbot using ESP-BOX and OpenAI APIs. + +## Description + +This case study outlines the development process for a voice-controlled chatbot that utilizes the combination of ESP-BOX and OpenAI API. The system is capable of receiving speech commands from users, displaying them on the screen, and processing them through the OpenAI APIs to generate a response. The response is then displayed on the screen and played through the ESP-BOX. The step-by-step workflow provides a detailed explanation of how to integrate these technologies to create an efficient and effective voice-controlled chatbot. + +{{< figure + default=true + src="img/unleashing-3.webp" + >}} + +## Environment Setup + +Setting up a suitable environment and installing the correct version is critical to avoid errors. + +- __ESP-IDF__ + +In this demonstration, we’ll be utilizing ESP-IDF version 5.0 (master branch). If you need guidance on how to set up ESP-IDF, please refer to the official [IDF Programming guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.0/esp32/index.html) for detailed information. + +__**As of writing of this blog, the current IDF commit head is df9310ada2.*__ + +- __ChatGPT API__ + +To utilize ChatGPT, a powerful language model based on the GPT-3.5 architecture, you must first obtain a secure API key. This can be achieved by creating an account on the [OpenAI platform](https://openai.com/) and obtaining tokens through creation or purchase. With an API key, you gain access to a wide range of features and capabilities that can be customized to meet your specific needs, such as natural language processing and generation, text completion, and conversation modeling. Follow the [official API reference link](https://platform.openai.com/docs/api-reference). + +__**Maintaining the confidentiality and security of the API key is crucial to prevent unauthorized access to the user’s account and data.*__ + +## Adding Offline Speech Recognition + +Espressif Systems, has as developed an innovative speech recognition framework called [ESP-SR](https://github.com/espressif/esp-sr). This framework is designed to enable devices to recognize spoken words and phrases without relying on external cloud-based services, making it an ideal solution for offline speech recognition applications. + +ESP-SR framework consists of various modules, including the Audio Front-end (AFE), Wake Word Engine (WakeNet), Speech Command Word Recognition (MultiNet), and Speech Synthesis (which currently only supports the Chinese language). Follow the official [Documentation](https://docs.espressif.com/projects/esp-sr/en/latest/esp32/index.html) for more information. + +## Integrating OpenAI API + +The OpenAI API provides numerous [functions](https://platform.openai.com/docs/api-reference) that developers can leverage to enhance their applications. In our project, we utilized the Audio-to-Text and Completion APIs and implemented them using C-language code based on ESP-IDF. The following section provides a brief overview of the code we employed. + +- __Audio to Text__ + +To extract text from audio, we utilize HTTPS and OpenAI [Audio API](https://platform.openai.com/docs/api-reference/audio). The following code is used for this task. + +```c +esp_err_t create_whisper_request_from_record(uint8_t *audio, int audio_len) +{ + // Set the authorization headers + char url[128] = "https://api.openai.com/v1/audio/transcriptions"; + char headers[256]; + snprintf(headers, sizeof(headers), "Bearer %s", OPENAI_API_KEY); + // Configure the HTTP client + esp_http_client_config_t config = { + .url = url, + .method = HTTP_METHOD_POST, + .event_handler = response_handler, + .buffer_size = MAX_HTTP_RECV_BUFFER, + .timeout_ms = 60000, + .crt_bundle_attach = esp_crt_bundle_attach, + }; + + // Initialize the HTTP client + esp_http_client_handle_t client = esp_http_client_init(&config); + + // Set the headers + esp_http_client_set_header(client, "Authorization", headers); + + // Set the content type and the boundary string + char boundary[] = "boundary1234567890"; + char content_type[64]; + snprintf(content_type, sizeof(content_type), "multipart/form-data; boundary=%s", boundary); + esp_http_client_set_header(client, "Content-Type", content_type); + + // Set the file data and size + char *file_data = NULL; + size_t file_size; + file_data = (char *)audio; + file_size = audio_len; + + // Build the multipart/form-data request + char *form_data = (char *)malloc(MAX_HTTP_RECV_BUFFER); + assert(form_data); + ESP_LOGI(TAG, "Size of form_data buffer: %zu bytes", sizeof(*form_data) * MAX_HTTP_RECV_BUFFER); + int form_data_len = 0; + form_data_len += snprintf(form_data + form_data_len, MAX_HTTP_RECV_BUFFER - form_data_len, + "--%s\r\n" + "Content-Disposition: form-data; name=\"file\"; filename=\"%s\"\r\n" + "Content-Type: application/octet-stream\r\n" + "\r\n", boundary, get_file_format(file_type)); + ESP_LOGI(TAG, "form_data_len %d", form_data_len); + ESP_LOGI(TAG, "form_data %s\n", form_data); + + // Append the audio file contents + memcpy(form_data + form_data_len, file_data, file_size); + form_data_len += file_size; + ESP_LOGI(TAG, "Size of form_data: %zu", form_data_len); + + // Append the rest of the form-data + form_data_len += snprintf(form_data + form_data_len, MAX_HTTP_RECV_BUFFER - form_data_len, + "\r\n" + "--%s\r\n" + "Content-Disposition: form-data; name=\"model\"\r\n" + "\r\n" + "whisper-1\r\n" + "--%s--\r\n", boundary, boundary); + + // Set the headers and post field + esp_http_client_set_post_field(client, form_data, form_data_len); + + // Send the request + esp_err_t err = esp_http_client_perform(client); + if (err != ESP_OK) { + ESP_LOGW(TAG, "HTTP POST request failed: %s\n", esp_err_to_name(err)); + } + + // Clean up client + esp_http_client_cleanup(client); + + // Return error code + return err; +} +``` + +This code is a function named “*whisper_from_record*”, which takes in a pointer to a buffer containing the audio data and an integer “*audio_len *” that represents the length of the audio data. This function sends a POST request to the OpenAI API endpoint to transcribe the given audio data. + +The function starts by initializing the URL of the OpenAI API and setting the authorization headers with the bearer token “*OPENAI_API_KEY*”. Then, an HTTP client is configured and initialized with the provided configuration, including the URL, HTTP method, event handler, buffer size, timeout, and SSL certificate. + +After that, the content type and the boundary string for the multipart form-data request are set as headers to the HTTP client. The file data and its size are also set, and a multipart/form-data request is built. The “*form_data*” buffer is allocated with a malloc() function, and the necessary information is added to it. This includes the filename and Content-Type of the audio file, the file contents, and the name of the model that will be used for transcription. + +Once the “*form_data *”is built, it is set as the post field in the HTTP client, and the client sends the POST request to the OpenAI API endpoint. If there is an error during the request, the function logs an error message. Finally, the HTTP client is cleaned up, and the resources allocated for form_data are freed. + +The function returns an esp_err_t error code, which indicates whether the HTTP request was successful or not. + +- __Chat Completion__ + +The OpenAI [Chat Completion API](https://platform.openai.com/docs/api-reference/chat/create) is utilized to send HTTPS requests for chat completion. This process involves utilizing the create_chatgpt_request function, which takes in a content parameter representing the input text to the GPT-3.5 model. + +```c +esp_err_t create_chatgpt_request(const char *content) +{ + char url[128] = "https://api.openai.com/v1/chat/completions"; + char model[16] = "gpt-3.5-turbo"; + char headers[256]; + snprintf(headers, sizeof(headers), "Bearer %s", OPENAI_API_KEY); + + esp_http_client_config_t config = { + .url = url, + .method = HTTP_METHOD_POST, + .event_handler = response_handler, + .buffer_size = MAX_HTTP_RECV_BUFFER, + .timeout_ms = 30000, + .crt_bundle_attach = esp_crt_bundle_attach, + }; + + // Set the headers + esp_http_client_handle_t client = esp_http_client_init(&config); + esp_http_client_set_header(client, "Content-Type", "application/json"); + esp_http_client_set_header(client, "Authorization", headers); + + // Create JSON payload with model, max tokens, and content + snprintf(json_payload, sizeof(json_payload), json_fmt, model, MAX_RESPONSE_TOKEN, content); + esp_http_client_set_post_field(client, json_payload, strlen(json_payload)); + + // Send the request + esp_err_t err = esp_http_client_perform(client); + if (err != ESP_OK) { + ESP_LOGW(TAG, "HTTP POST request failed: %s\n", esp_err_to_name(err)); + } + + // Clean up client + esp_http_client_cleanup(client); + + // Return error code + return err; +} +``` + +The function first sets up the URL, model, and headers needed for the HTTP POST request, and then creates a JSON payload with the model, max tokens, and content. + +Next, the function sets the headers for the HTTP request and sets the JSON payload as the post field for the request. + +The HTTP POST request is then sent using “*esp_http_client_perform()*”, and if the request fails, an error message is logged. + +Finally, the HTTP client is cleaned up and the error code is returned. + +- __Handling Response__ + +Callback function “*response_handler *”that is used by the ESP-IDF HTTP client library to handle events that occur during an HTTP request/response exchange. + +```c +esp_err_t response_handler(esp_http_client_event_t *evt) +{ + static char *data = NULL; // Initialize data to NULL + static int data_len = 0; // Initialize data to NULL + + switch (evt->event_id) { + case HTTP_EVENT_ERROR: + ESP_LOGI(TAG, "HTTP_EVENT_ERROR"); + break; + + case HTTP_EVENT_ON_CONNECTED: + ESP_LOGI(TAG, "HTTP_EVENT_ON_CONNECTED"); + break; + + case HTTP_EVENT_HEADER_SENT: + ESP_LOGI(TAG, "HTTP_EVENT_HEADER_SENT"); + break; + + case HTTP_EVENT_ON_HEADER: + if (evt->data_len) { + ESP_LOGI(TAG, "HTTP_EVENT_ON_HEADER"); + ESP_LOGI(TAG, "%.*s", evt->data_len, (char *)evt->data); + } + break; + + case HTTP_EVENT_ON_DATA: + ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA (%d +)%d\n", data_len, evt->data_len); + ESP_LOGI(TAG, "Raw Response: data length: (%d +)%d: %.*s\n", data_len, evt->data_len, evt->data_len, (char *)evt->data); + + // Allocate memory for the incoming data + data = heap_caps_realloc(data, data_len + evt->data_len + 1, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT); + if (data == NULL) { + ESP_LOGE(TAG, "data realloc failed"); + free(data); + data = NULL; + break; + } + memcpy(data + data_len, (char *)evt->data, evt->data_len); + data_len += evt->data_len; + data[data_len] = '\0'; + break; + + case HTTP_EVENT_ON_FINISH: + ESP_LOGI(TAG, "HTTP_EVENT_ON_FINISH"); + if (data != NULL) { + // Process the raw data + parsing_data(data, strlen(data)); + // Free memory + free(data); + data = NULL; + data_len = 0; + } + break; + + case HTTP_EVENT_DISCONNECTED: + ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED"); + break; + + default: + break; + } + return ESP_OK; +} +``` + +In case of “*HTTP_EVENT_ON_DATA*”, the function allocates memory for the incoming data, copies the data into the buffer and increments the “*data_len *”variable accordingly. This is done to accumulate the response data. + +In case of “*HTTP_EVENT_ON_FINISH*”, the function prints a message indicating that the HTTP exchange has finished, and then calls the “*parsing_data *”function to process the accumulated/raw data. It then frees the memory and resets the data and “*data_len *”variables to zero. It then frees the allocated memory and resets the buffer and its length to zero. + +Finally, the function returns “*ESP_OK *”indicating that the operation was successful. + +- __Parsing Raw Data__ + +The JSON [parser component](https://components.espressif.com/components/espressif/json_parser) is utilized to parse the raw response obtained from ChatGPT API and Whisper AI API over HTTPS. To perform this task, a function is used, which employs the parser component. Further details about this tool can be found on [GitHub](https://github.com/espressif/json_parser). + +```c +void parse_response (const char *data, int len) +{ + jparse_ctx_t jctx; + int ret = json_parse_start(&jctx, data, len); + if (ret != OS_SUCCESS) { + ESP_LOGE(TAG, "Parser failed"); + return; + } + printf("\n"); + int num_choices; + + /* Parsing Chat GPT response*/ + if (json_obj_get_array(&jctx, "choices", &num_choices) == OS_SUCCESS) { + for (int i = 0; i < num_choices; i++) { + if (json_arr_get_object(&jctx, i) == OS_SUCCESS && json_obj_get_object(&jctx, "message") == OS_SUCCESS && + json_obj_get_string(&jctx, "content", message_content, sizeof(message_content)) == OS_SUCCESS) { + ESP_LOGI(TAG, "ChatGPT message_content: %s\n", message_content); + } + json_arr_leave_object(&jctx); + } + json_obj_leave_array(&jctx); + } + + /* Parsing Whisper AI response*/ + else if (json_obj_get_string(&jctx, "text", message_content, sizeof(message_content)) == OS_SUCCESS) { + ESP_LOGI(TAG, "Whisper message_content: %s\n", message_content); + } else if (json_obj_get_object(&jctx, "error") == OS_SUCCESS) { + if (json_obj_get_string(&jctx, "type", message_content, sizeof(message_content)) == OS_SUCCESS) { + ESP_LOGE(TAG, "API returns an error: %s", message_content); + } + } +} +``` + +## Integrating TTS API + +At the moment, OpenAI doesn’t offer public access to their Text-to-Speech (TTS) API. However, there are various other TTS APIs available, including [Voicerss](https://voicerss.org/api/), [TTSmaker](https://ttsmaker.com/zh-cn), and [TalkingGenie](https://www.talkinggenie.com/tts). These APIs can generate speech from text input, and you can find more information about them on their respective websites. + +For the purposes of this tutorial, we will be using the [TalkingGenie](https://www.talkinggenie.com/tts) API, which is one of the best options available for generating high-quality, natural-sounding speech both in English and Chinese. One of the unique features of TalkingGenie is its ability to translate mixed language text, such as Chinese and English, into speech seamlessly. This can be a valuable tool for creating content that appeals to a global audience. The following code sends a text response generated by ChatGPT to the TalkingGenie API using HTTPS, and then plays the resulting speech through an ESP-BOX. + +```c +esp_err_t text_to_speech_request(const char *message, AUDIO_CODECS_FORMAT code_format) +{ + int j = 0; + size_t message_len = strlen(message); + char *encoded_message; + char *language_format_str, *voice_format_str, *codec_format_str; + + // Encode the message for URL transmission + encoded_message = heap_caps_malloc((3 * message_len + 1), MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT); + url_encode(message, encoded_message); + + // Determine the audio codec format + if (AUDIO_CODECS_MP3 == code_format) { + codec_format_str = "MP3"; + } else { + codec_format_str = "WAV"; + } + + // Determine the required size of the URL bu + int url_size = snprintf(NULL, 0, "https://dds.dui.ai/runtime/v1/synthesize?voiceId=%s&text=%s&speed=1&volume=%d&audiotype=%s", \ + VOICE_ID, \ + encoded_message, \ + VOLUME, \ + codec_format_str); + + // Allocate memory for the URL buffer + char *url = heap_caps_malloc((url_size + 1), MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT); + if (url == NULL) { + ESP_LOGE(TAG, "Failed to allocate memory for URL"); + return ESP_ERR_NO_MEM; + } + + // Format the URL string + snprintf(url, url_size + 1, "https://dds.dui.ai/runtime/v1/synthesize?voiceId=%s&text=%s&speed=1&volume=%d&audiotype=%s", \ + VOICE_ID, \ + encoded_message, \ + VOLUME, \ + codec_format_str); + + // Configure the HTTP client + esp_http_client_config_t config = { + .url = url, + .method = HTTP_METHOD_GET, + .event_handler = http_event_handler, + .buffer_size = MAX_FILE_SIZE, + .buffer_size_tx = 4000, + .timeout_ms = 30000, + .crt_bundle_attach = esp_crt_bundle_attach, + }; + + // Initialize and perform the HTTP request + esp_http_client_handle_t client = esp_http_client_init(&config); + esp_err_t err = esp_http_client_perform(client); + if (err != ESP_OK) { + ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err)); + } + + // Free allocated memory and clean up the HT + heap_caps_free(url); + heap_caps_free(encoded_message); + esp_http_client_cleanup(client); + + // Return the result of the function call + return err; +} +``` + +The function “*text_to_speech *” takes a message string and an “*AUDIO_CODECS_FORMAT*” parameter as input. The message string is the text that will be synthesized into speech, while the “*AUDIO_CODECS_FORMAT *” parameter specifies whether the speech should be encoded in MP3 or WAV format. + +The function first encodes the message string using “*url_encode*” function that replace some non-valid characters to its ASCII code, and then converts that code to a two-digit hexadecimal representation. Next allocates memory for the resulting encoded string. It then checks the “*AUDIO_CODECS_FORMAT*” parameter and sets the appropriate codec format string to be used in the “*url*”. + +Next, the function determines the size of the “*url*” buffer needed to make a GET request to the TalkingGenie API, and allocates memory for the “*url*” buffer accordingly. It then formats the “*url*” string with the appropriate parameters, including the voiceId (which specifies the voice to be used), the encoded text, the speed and volume of the speech, and the audiotype (either “MP3” or “WAV”). + +The function then sets up an “*esp_http_client_config_t*” struct with the “*url*” and other configuration parameters, initializes an esp_http_client_handle_t with the struct, and performs a GET request to the TalkingGenie API using “*esp_http_client_perform*”. If the request is successful, the function returns ESP_OK, otherwise it returns an error code. + +Finally, the function frees the memory allocated for the “*url*” buffer and the encoded message, cleans up the “*esp_http_client_handle_t*”, and returns the error code. + +- __Handling TTS Response__ + +In the similar fashion Callback function “*http_event_handler*” is defined to handle events that occur during an HTTP request/response exchange. + +```c +static esp_err_t http_event_handler(esp_http_client_event_t *evt) +{ + switch (evt->event_id) { + // Handle errors that occur during the HTTP request + case HTTP_EVENT_ERROR: + ESP_LOGE(TAG, "HTTP_EVENT_ERROR"); + break; + + // Handle when the HTTP client is connected + case HTTP_EVENT_ON_CONNECTED: + ESP_LOGI(TAG, "HTTP_EVENT_ON_CONNECTED"); + break; + + // Handle when the header of the HTTP request is sent + case HTTP_EVENT_HEADER_SENT: + ESP_LOGI(TAG, "HTTP_EVENT_HEADER_SENT"); + break; + + // Handle when the header of the HTTP response is received + case HTTP_EVENT_ON_HEADER: + ESP_LOGI(TAG, "HTTP_EVENT_ON_HEADER"); + file_total_len = 0; + break; + + // Handle when data is received in the HTTP response + case HTTP_EVENT_ON_DATA: + ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len); + if ((file_total_len + evt->data_len) < MAX_FILE_SIZE) { + memcpy(record_audio_buffer + file_total_len, (char *)evt->data, evt->data_len); + file_total_len += evt->data_len; + } + break; + + // Handle when the HTTP request finishes + case HTTP_EVENT_ON_FINISH: + ESP_LOGI(TAG, "HTTP_EVENT_ON_FINISH:%d, %d K", file_total_len, file_total_len / 1024); + audio_player_play(record_audio_buffer, file_total_len); + break; + + // Handle when the HTTP client is disconnected + case HTTP_EVENT_DISCONNECTED: + ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED"); + break; + + // Handle when a redirection occurs in the HTTP request + case HTTP_EVENT_REDIRECT: + ESP_LOGI(TAG, "HTTP_EVENT_REDIRECT"); + break; + } + return ESP_OK; +} +``` + +“*HTTP_EVENT_ON_DATA”* event is used to handle the audio data received from the server. The audio data is stored in a buffer called “*record_audio_buffer” *and the total length of the audio data received is stored in a variable called “*file_total_len*”. If the total length of the audio data received is less than a predefined “*MAX_FILE_SIZE*”, the data is copied into the “*record_audio_buffer*”. + +Finally, the “*HTTP_EVENT_ON_FINISH *”event is used to handle the end of the HTTP response. In this case, the “*record_audio_buffer” *is passed to a function called “*audio_player_play*”which plays the audio. + +## Display + +For display we uses LVGL, an open-source embedded graphics library that is gaining popularity for its powerful and visually appealing features and low memory footprints. LVGL has also released a visual drag-and-drop UI editor called [SquareLine](https://squareline.io/) Studio. It’s a powerful tool that makes it easy to create beautiful GUIs for your applications.To integrate LVGL with your project, Espressif Systems provides an official [package manager](https://components.espressif.com/components/lvgl/lvgl) tool. This tool allows you to directly add LVGL and related porting components to your project, saving you time and effort. For more information follow the official [blogs](/blog/making-the-fancy-user-interface-on-esp-has-never-been-easier) and [documentations](https://docs.lvgl.io/master/index.html). + +## Conclusion + +The integration of OpenAI’s ChatGPT with Espressif’s ESP-BOX has opened up new possibilities for creating powerful and intelligent IoT devices. The ESP-BOX provides a flexible and customizable AIoT development platform with features like far-field voice interaction, offline speech commands recognition, and a reusable GUI framework. By combining these capabilities with the OpenAI API, developers can create voice-controlled chatbots and enhance user experiences in IoT applications. + +{{< figure + default=true + src="img/unleashing-4.webp" + >}} + +Don’t forget to check out [Espressif Systems](https://www.espressif.com/)’ [GitHub ](https://github.com/orgs/espressif/repositories)repository for more open-source demos on [ESP-IoT-Solution](https://github.com/espressif/esp-iot-solution), [ESP-SR](https://github.com/espressif/esp-sr), and [ESP-BOX](https://github.com/espressif/esp-box). The source code for this project will be found [__*here*__ ](https://github.com/espressif/esp-box/tree/master/examples)*.* As part of our future plans, we aim to introduce a component for the OpenAI API that will offer a user-friendly functions. diff --git a/content/blog/vscode-esp-idf-v1.8.0/index.md b/content/blog/vscode-esp-idf-v1.8.0/index.md index f0ba8c489..10675fd44 100644 --- a/content/blog/vscode-esp-idf-v1.8.0/index.md +++ b/content/blog/vscode-esp-idf-v1.8.0/index.md @@ -2,6 +2,7 @@ title: "ESP-IDF VS Code Extension v1.8.0 release" date: 2024-07-12T16:07:09+08:00 showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" tags: ["News", "ESP-IDF extension", "VSCode", "Visual Studio Code"] authors: - "brian-ignacio" diff --git a/content/blog/what-does-matter-mean-to-you/img/what-1.webp b/content/blog/what-does-matter-mean-to-you/img/what-1.webp new file mode 100644 index 000000000..d11c74edc Binary files /dev/null and b/content/blog/what-does-matter-mean-to-you/img/what-1.webp differ diff --git a/content/blog/what-does-matter-mean-to-you/img/what-2.webp b/content/blog/what-does-matter-mean-to-you/img/what-2.webp new file mode 100644 index 000000000..f4691cc4b Binary files /dev/null and b/content/blog/what-does-matter-mean-to-you/img/what-2.webp differ diff --git a/content/blog/what-does-matter-mean-to-you/img/what-3.webp b/content/blog/what-does-matter-mean-to-you/img/what-3.webp new file mode 100644 index 000000000..16bb93fdb Binary files /dev/null and b/content/blog/what-does-matter-mean-to-you/img/what-3.webp differ diff --git a/content/blog/what-does-matter-mean-to-you/index.md b/content/blog/what-does-matter-mean-to-you/index.md new file mode 100644 index 000000000..47fd938e0 --- /dev/null +++ b/content/blog/what-does-matter-mean-to-you/index.md @@ -0,0 +1,89 @@ +--- +title: "What does Matter mean to you?" +date: 2021-11-23 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - IoT + - Esp32 + - Matter + +--- +[*Espressif Matter Series*](/matter-38ccf1d60bcd)* #1* + +You may have recently read about the newly introduced standard, [Matter](/blog/announcing-matter-previously-chip-on-esp32). Matter is an initiative of the [Connectivity Standards Alliance](http://csa-iot.org/), and developed through collaboration amongst all the leaders of the IoT industry. + +There is a high level of excitement about Matter and what it aims to achieve. We often hear questions from device-makers and end-users as to how they can benefit from the Matter standard. In this article, let’s look at what does Matter mean to you as an end-user and as a device-maker. + +## For End Users + +If you are an end-user, Matter will make smart-home much more natural and intuitive for you. + +{{< figure + default=true + src="img/what-1.webp" + >}} + +__No More Silos:__ + +Gone would be the days where one vendor’s app only worked with its own smart home devices. *A Matter enabled app, will work with any Matter enabled device.* + +So also no more of: “Oh this is an iOS ecosystem device, so my wife on Android can’t use it that well”. + +[Amazon](https://developer.amazon.com/en-US/alexa/matter), [Apple](https://developer.apple.com/videos/play/wwdc2021/10298/), [Google](https://blog.google/products/google-nest/four-google-smart-home-updates-matter/) and [Samsung](https://news.samsung.com/global/samsung-smartthings-integrates-matter-into-ecosystem-bringing-matter-device-control-to-multiple-samsung-products) all have announced integrated support for Matter in their latest announcements. So the typical devices that let us interact with smart devices: phones (iOS as well as Android) and voice assistants/smart speakers will support Matter based devices out of the box. *You might not even require a separate phone app to use devices that run Matter.* + +{{< figure + default=true + src="img/what-2.webp" + >}} + +__More automation:__ Matter allows effective device-to-device communication without any other intermediary involved. A Matter smart switch or sensor can directly switch on/off a Matter lightbulb (or a group of bulbs), without having to go through any app, cloud or a skill. Once devices are setup, the control happens completely locally over the local network. + +__No more transport silos:__ Matter works with devices that support Wi-Fi, as well as Thread/802.15.4. Your phone app will be able to control devices using any of these transports equally well. + +You could also setup automations that allow an 802.15.4-based sensor to directly switch-on a Wi-Fi based light-bulb without an app or a cloud into the picture. Yes, you read that right. A device called a border router (that includes both Wi-Fi and 802.15.4 transports) helps bridge these two networks, allowing direct addressability from one to another. + +Additionally, all the communication happens over the local Wi-Fi/802.15.4 network. So smart control continues to work within devices in the local network even across Internet outages. + +For existing products that use ZigBee or BLE Mesh, Matter bridges can help you make these devices reachable through the Matter ecosystems. + +{{< figure + default=true + src="img/what-3.webp" + >}} + +__More ecosytems:__ Solution providers may offer higher level ecosystems based on Matter, that provide additional features to end users. The Matter specification makes it easier for devices to work with multiple ecosystems. So the same device could, *simultaneously*, work with multiple heterogenous ecosystems. What’s more, device vendors themselves [can create their own ecosystems](/matter-multi-admin-identifiers-and-fabrics-a291371af365) (not just restricted to phone OSes or voice assistants) and provide innovative features as part of these ecosystems. Please watch out for a follow-on blog post for more details about Matter Ecosystems. + +__Better security:__ The Matter specification has baked in secure features, agreed and reviewed by the best in the tech industry. This guarantees that devices that pass Matter certification rely on well reviewed and strong industry standards. + +All in all, Matter should help accelerate pervasive intelligence in the smart home by delivering seamless integrations and new possibilities. + +## For Device Makers + +If you are a device maker, firstly your customers will benefit from all the advantages of Matter described above. Secondly, Matter will help you build and scale smart devices much faster, with no encumbrances. + +__Ease of Development:__ Device makers no more have to spend engineering effort in painstakingly supporting and, importantly, certifying multiple ecosystems. This is often an engineering/cost overhead, but also a launch timeline overhead. Matter makes building devices much easier and faster. + +__Power of Open:__ The Matter implementation is built [openly](https://github.com/project-chip/connectedhomeip) and for a wide variety of vendors. This makes evaluation and development faster. + +You can try out a Matter-enabled device even today, just head over to the [Git repository](https://github.com/project-chip/connectedhomeip/tree/master/examples/all-clusters-app/esp32). + +__Device — Device Automations:__ The device-to-device automations make it easier to introduce intelligence in a smart-home: a sensor coupled with light-bulb, that work by themselves. Your bulb or sensor, could work with any other Matter vendor’s devices. + +If you are a device maker that builds devices like sensors or switches that always works in conjunction with other devices, this is great news for you. This means you could build smart devices, leaving up to the customer’s imagination what they tie the output of your device to (a bulb or a fan or anything else, from any vendor). + +__Matter Ecosystems:__ Matter ecosystems is a way to implement an ecosystem of smart devices that may talk to each other and build compelling multi-device scenarios. The Matter specification allows vendors to create such an ecosystem so that these features can be layered on top. + +__Manufacturer-specific Innovations:__ The Matter specification has an evolving list of device-types, the typical attributes they will have, and the commands they will obey. If your device has certain innovative features that cannot be expressed through these, you could define your own attributes that allow you to make the best use of these. + +## Espressif and Matter + +Espressif has been actively working with Matter since its inception. Support for Espressif SoCs is already [available upstream](https://github.com/project-chip/connectedhomeip/tree/master/examples/all-clusters-app/esp32) in the Matter repositories. You may take it for a spin on an ESP32 or ESP32-C3 by following the instructions in [this article](/announcing-matter-previously-chip-on-esp32-84164316c0e3#gettingstarted). + +We are currently working on building tools and documentation, to assist our customers in every step of the product development process, right from solution architecture, to certification, manufacturing and diagnostics. + +We are excited about this journey, and look forward to hearing how you envision building with Matter. + +This article is a part of a series of articles [*Espressif Matter Series*](/matter-38ccf1d60bcd). You may read the next article that talks about [Matter’s Data Model](/matter-clusters-attributes-commands-82b8ec1640a0). diff --git a/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-1.webp b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-1.webp new file mode 100644 index 000000000..3e9ba2d38 Binary files /dev/null and b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-1.webp differ diff --git a/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-2.webp b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-2.webp new file mode 100644 index 000000000..53e59a0d2 Binary files /dev/null and b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-2.webp differ diff --git a/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-3.webp b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-3.webp new file mode 100644 index 000000000..eafcdd507 Binary files /dev/null and b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-3.webp differ diff --git a/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-4.webp b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-4.webp new file mode 100644 index 000000000..d8b777953 Binary files /dev/null and b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-4.webp differ diff --git a/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-5.webp b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-5.webp new file mode 100644 index 000000000..fa58b5347 Binary files /dev/null and b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-5.webp differ diff --git a/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-6.webp b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-6.webp new file mode 100644 index 000000000..52ca31597 Binary files /dev/null and b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/img/whats-6.webp differ diff --git a/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/index.md b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/index.md new file mode 100644 index 000000000..de9d16442 --- /dev/null +++ b/content/blog/whats-new-in-espressif-ide-2-8-0-and-a-way-forward/index.md @@ -0,0 +1,100 @@ +--- +title: "What’s New in Espressif-IDE 2.8.0 and a Way Forward" +date: 2023-02-01 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kondal-kolipaka +tags: + - Espressif-IDE 2.8.0 + - Espresif-IDE + - bug fixes + - Espressif Ide + - Esp Idf + - Espressif + - Eclipse + +--- +{{< figure + default=true + src="img/whats-1.webp" + >}} + +[Espressif-IDE 2.8.0](https://github.com/espressif/idf-eclipse-plugin/releases/tag/v2.8.0) was released recently, featuring a Partition table editor NVS Partition Editor along with enhancements in the Debugger Configuration and many more bug fixes to stabilize and improve the overall quality of the plugin. + +You can get the latest version using the [update site](https://dl.espressif.com/dl/idf-eclipse-plugin/updates/latest/), but if you’re starting for the first time and you’re a Windows user, I would recommend using the [Espressif-IDE Windows Offline installer](https://dl.espressif.com/dl/esp-idf/) which does most of the work of installing all the prerequisites, esp-idf, esp-idf tools, and device drivers required to work with espressif chips. Here is the current version of [Espressif-IDE 2.8.0 with ESP-IDF 5.0 Installer](https://dl.espressif.com/dl/esp-idf/). If you’re a mac or Linux user, get [Espresif-IDE](https://github.com/espressif/idf-eclipse-plugin/releases/tag/v2.8.0) instead of Eclipse CDT and then installing the IDF Eclipse Plugin separately. + +Espressif-IDE 2.8.0 is bundled with the Eclipse CDT 2022–09 package and it has Java 11 support. We would recommend not updating to the latest version of Eclipse CDT 2022–12 as we have not added support yet. + +## Here are the new features and improvements added in the 2.8.0 release + +## Partition Table Editor + +Eclipse Plugin offers UI for editing your [partition table](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/partition-tables.html) and flash it to your chip, instead of editing the CSV files directly. This offer editing the existing Partition table and creating a new one. + +{{< figure + default=true + src="img/whats-2.webp" + >}} + +To launch the Partition editor + +## NVS Table Editor + +NVS Table Editor can help you to edit [NVS Partition](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/storage/nvs_partition_gen.html?highlight=nvs+partition#introduction) CSV file, and generate encrypted and non-encrypted partitions through UI without interacting directly with the CSV files. + +Eclipse plugin uses the [nvs_partition_gen.py](https://github.com/espressif/esp-idf/blob/2707c95a5f/components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py) utility from esp-idf for creating a binary file based on key-value pairs provided in the editor. + +{{< figure + default=true + src="img/whats-3.webp" + >}} + +To launch the NVS Partition editor + +## Multiple Build configurations + +The plugin offers to configure the customized build configuration settings using the __Build Settings__ tab in the launch configuration wizard. This would enable the user to define the multiple build configurations with different settings — for example, debug and release configurations. + +There were issues reported earlier on this where changing additional CMake Arguments in one configuration is reflected in the other configuration so there is no way one could configure different settings and this release address this [issue](https://github.com/espressif/idf-eclipse-plugin/pull/669). + +{{< figure + default=true + src="img/whats-4.webp" + >}} + +## GDB Client Remote Timeout + +There were numerous reports from clients saying that GDB Client was unable to connect with the default timeout which was 2 seconds that is to wait for the remote target to respond, otherwise, it use to drop the GDB connection with an error. + +{{< figure + default=true + src="img/whats-5.webp" + >}} + +Now the default GDB Client remote timeout is set for 20 seconds! You could see this in the new OpenOCD Debugger configuration window. + +{{< figure + default=true + src="img/whats-6.webp" + >}} + +## Below are the most notable bug fixes in the new version + +Please find more about other [bug fixes](https://github.com/espressif/idf-eclipse-plugin/releases/tag/v2.8.0) that were part of 2.8.0. + +## A way forward for IDEs and what you could expect in H1 2023 + +It’s been 3 years since we started working on the plugin for Eclipse and VSCode and we have built IDEs with a great set of features to support end-to-end application building with esp-idf using espressif chips. However, we realized it’s time to go back and retrospect ourselves and make a foundation much stronger. Hence we decided to focus more on code refactoring, design changes, automation, test cases, quality, onboarding, and revamping some wizards(for example OpenOCD Debugger configuration has a lot of duplicate config parameters) before we take up any new developments. + +However, will work on news chips support as and when needed. For example, C6 and H2 in H1.2023 and P4 and C5 in H2.2023 + +## How about Eclipse CDT 2022–12 support? + +Eclipse CDT 2022–12 comes with [CDT 11.0](https://github.com/eclipse-cdt/cdt/blob/main/NewAndNoteworthy/CDT-11.0.md) which is a major release and has some breaking changes in our IDF Eclipse Plugin and which also comes with Java 17 dependency. + +Considering our priority on fixing bugs, improving onboarding workflows, and UX/UI we thought of pushing this bit late. Importantly, this brings a Java 17 dependency and that’s a big thing to consider for most of us as we need to update from current Java 11 to Java 17. We started work on this, probably we could expect this by end of H1.2023 or earlier. + +If you’ve some feedback on IDEs and would like to share it with us, please write a mail directly to [ide.support@espressif.com](http://ide.support@espressif.com) or raise an issue on the project [GitHub](https://github.com/espressif/idf-eclipse-plugin/issues) issues section and we will be happy to connect with you! + +Thank you! diff --git a/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-1.webp b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-1.webp new file mode 100644 index 000000000..b1eebdff8 Binary files /dev/null and b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-1.webp differ diff --git a/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-2.webp b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-2.webp new file mode 100644 index 000000000..890ebf67c Binary files /dev/null and b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-2.webp differ diff --git a/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-3.webp b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-3.webp new file mode 100644 index 000000000..73a9e405a Binary files /dev/null and b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-3.webp differ diff --git a/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-4.webp b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-4.webp new file mode 100644 index 000000000..be96e619d Binary files /dev/null and b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-4.webp differ diff --git a/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-5.webp b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-5.webp new file mode 100644 index 000000000..96db694f0 Binary files /dev/null and b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-5.webp differ diff --git a/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-6.webp b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-6.webp new file mode 100644 index 000000000..9089c5eb9 Binary files /dev/null and b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-6.webp differ diff --git a/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-7.webp b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-7.webp new file mode 100644 index 000000000..5969e471b Binary files /dev/null and b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-7.webp differ diff --git a/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-8.webp b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-8.webp new file mode 100644 index 000000000..b37c3b51b Binary files /dev/null and b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/img/whats-8.webp differ diff --git a/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/index.md b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/index.md new file mode 100644 index 000000000..cf5662112 --- /dev/null +++ b/content/blog/whats-new-in-the-esp-idf-extension-for-vscode/index.md @@ -0,0 +1,133 @@ +--- +title: "What’s new in the ESP-IDF extension for VSCode" +date: 2022-01-30 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - brian-ignacio +tags: + - Esp Idf + - Espressif + - Vscode + - Theia + - Esp32 + +--- +Co-authored with Kondal Kolipaka + +The [ESP-IDF extension for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=espressif.esp-idf-extension) aims to help users to write code with Espressif chips using ESP-IDF and other frameworks. We constantly try to improve the extension usability and add features to enhance the user developing experience. + +The latest features we have added are: + +__ESP-IDF QEMU integration__ + +[QEMU](https://www.qemu.org/) is an open-source machine emulator commonly used to emulate operating systems and many hardware devices. Espressif has a [QEMU fork](https://github.com/espressif/qemu) with ESP32 as a possible target which can be used to emulate in software the behavior of a real ESP32 device. + +We added this QEMU fork in a Dockerfile used with the project template file .devcontainer (You can add these files to an existing project with the __ESP-IDF: Add docker container configuration__ command) so the user can open a project in a container using the __Remote-Containers: Open Folder in container…__ command____ from the [Remote Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers). + +The __ESP-IDF: QEMU Manager__ command____ will____ run the current project application binary in an emulated ESP32. If you execute the __ESP-IDF: Monitor QEMU device__ it will open____ a monitor session to observe the application output. You can also use __ESP-IDF: Launch QEMU debug session__ command to start a debug session as shown below. + +Find more information on this feature in [here](https://github.com/espressif/vscode-esp-idf-extension/blob/master/docs/QEMU.md). + +{{< figure + default=true + src="img/whats-1.webp" + >}} + +__Partition Table Editor__ + +Now you should be able to get partition table information for the device connected and be allowed to select any .bin file to flash to a given partition. + +To see the partitions of the current serial port, execute the __ESP-IDF: Refresh partition table__ and use the sdkconfig partition offset or a custom partition offset to see the current partitions of your device in the ESP-IDF Explorer tab. + +When you can click on any partition, either you can flash a .bin file to this partition or launch the __ESP-IDF: Partition Table Editor UI__ to edit the partition table. You could also right-click on the .bin file to flash it to one of the partitions in the Device partition explorer. + +{{< figure + default=true + src="img/whats-2.webp" + >}} + +{{< figure + default=true + src="img/whats-3.webp" + >}} + +{{< figure + default=true + src="img/whats-4.webp" + >}} + +__Importing an existing ESP-IDF Project__ + +Added the __Import ESP-IDF Project__ command to the extension. This command will copy an existing ESP-IDF project and add *.vscode* configuration and *.devcontainer* files into a new project to be saved in a given location and project name. + +__Integrated ESP-IDF Component registry__ + +[IDF Component registry](https://components.espressif.com/) is integrated into the extension and this allows users to add a component to your project. Run the __ESP-IDF: Show Component registry__ command____ to launch components page. + +{{< figure + default=true + src="img/whats-5.webp" + >}} + +IDF Component Registry running in Visual Studio Code + +__Welcome Page__ + +Added a new welcome page with documentation links and buttons for basic features of the extension. You can run the __ESP-IDF: Welcome__ command to launch it. + +{{< figure + default=true + src="img/whats-6.webp" + >}} + +__Other notable improvements and features__ + +- Use gdb commands directly for Heap tracing. Before we were using openOCD TCL commands to start and stop the heap tracing but now we are using gdb commands with a gdb file instead. To learn more about heap tracing please review the [ESP-IDF documentation](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/heap_debug.html#heap-tracing) and the [heap tracing extension tutorial](https://github.com/espressif/vscode-esp-idf-extension/blob/master/docs/tutorial/heap_tracing.md). +- Added idf-size.py output after build task. This is done after executing the __ESP-IDF: Build your project__ or__ESP-IDF: Build, flash and start a monitor__ command. This will help users to understand the amount of memory used in their applications and [reduce the binary size](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/performance/size.html). + +{{< figure + default=true + src="img/whats-7.webp" + >}} + +- Added JTAG flashing type in the Build, flash and monitor command. Before it was only using UART flashing, but now it will use the flash type defined in the __idf.flashType__ configuration setting. +- Added the __Configure project for coverage__ command to set the required values in your project’s sdkconfig file to enable code coverage for your project. This is necessary if you want to enable the code coverage feature in the extension as shown in the [code coverage tutorial](https://github.com/espressif/vscode-esp-idf-extension/blob/master/docs/tutorial/code_coverage.md). +- Using portable git and python in the extension setup workflow for Windows users. Now Windows users don’t need to install any prerequisites when configuring the extension using the __ESP-IDF: Configure ESP-IDF extension__ setup wizard. +- Enable and disable CMakeLists.txt SRCS field update whenever .c files are created or deleted. Use the i__df.enableUpdateSrcsToCMakeListsFile__ configuration setting to enable and disable it. +- Use Espressif download mirrors for the extension setup wizard. Now if downloading from Github is slow in your location you can choose the download server in the __ESP-IDF: Configure ESP-IDF extension__ setup wizard. +- Added serial port and IDF target in the VSCode status bar and add the commands to change them on click. + +{{< figure + default=true + src="img/whats-8.webp" + >}} + +- Now users are allowed to configure pre-build, post-build, pre-flash, post flash, and custom tasks (with status bar icon for the custom task) with added configuration settings. You can use the __idf.preBuildTask__ to define a task before the build task, the __idf.postBuildTask__ after the build task, the __idf.preFlashTask__ before the flash task and the__idf.postFlashTask__ after the flash task. There is also an __idf.customTask__ which can be used with the __ESP-IDF: Execute custom task__ (which has a status bar icon). +- Now you should be able to control the settings to enable/disable notifications for extension commands completion and show the task output when hidden. Using the __idf.notificationSilentMode__ configuration setting to true will hide VSCode notifications from this extension such as *Build Successful* and *flash done* and show the task output directly. + +## ESP-IDF cloud IDE based on Eclipse Theia + +We are fascinated to build robust tools and IDEs to improve the productivity of esp-idf developers by leveraging the latest cloud technologies. + +Eclipse Theia is an extensible framework to develop full-fledged multi-language Cloud & Desktop IDE-like products with state-of-the-art web technologies. It offers to install our existing [IDF VSCode extension](https://github.com/espressif/vscode-esp-idf-extension) and work seamlessly. + +We have been working on this for quite some time and we have shown this work-in-progress model during EclispeCon 2021 conference. It’s an internal project for now! Please take a look to see what it means to be working on Eclipse Theia cloud IDE and what it offers. + +## What’s next? + +The extension is far from complete. We are continuously improving existing and adding new and interesting features for you! Some of the things we are looking into are: + +- Extend QEMU and features related to emulated devices. +- Improve the heap tracing UI and functionality +- Extend debugging experience adding registers and memory view, disassemble view, and data watchpoints. +- Integration with new frameworks such as [NuttX](https://github.com/espressif/esp-nuttx-bootloader) and [Matter](https://github.com/espressif/connectedhomeip) +- Many more! + +## Related links + +- [Make a feature request or report an issue with the extension](https://github.com/espressif/vscode-esp-idf-extension/issues/new/choose) +- [Extension tutorials](https://github.com/espressif/vscode-esp-idf-extension/blob/master/docs/tutorial/toc.md) +- [ESP32 IDE Forum](https://esp32.com/viewforum.php?f=40) + +Espressif also offers an __esp-idf plugin for eclipse__ enthusiasts, please check this out [here](https://github.com/espressif/idf-eclipse-plugin)! diff --git a/content/blog/whats-new-with-esp-zerocode/img/whats-1.webp b/content/blog/whats-new-with-esp-zerocode/img/whats-1.webp new file mode 100644 index 000000000..f4febbb1e Binary files /dev/null and b/content/blog/whats-new-with-esp-zerocode/img/whats-1.webp differ diff --git a/content/blog/whats-new-with-esp-zerocode/index.md b/content/blog/whats-new-with-esp-zerocode/index.md new file mode 100644 index 000000000..8a4f1fe4b --- /dev/null +++ b/content/blog/whats-new-with-esp-zerocode/index.md @@ -0,0 +1,105 @@ +--- +title: "What’s New with ESP ZeroCode" +date: 2024-04-28 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - IoT + - Zero Code + - Esp32 + - Espressif + +--- +*The Fastest Way to Launch Matter-enabled Products* + +{{< figure + default=true + src="img/whats-1.webp" + >}} + +It’s been about 8 months since we launched [ESP ZeroCode](https://zerocode.espressif.com). For all these months, continuous interest and customer activity has kept us busy. Let’s look at some of the highlights of what’s new with ESP ZeroCode. + +## Customer Interest + +Over 11,000 users across 125 countries have visited ESP ZeroCode, building various kinds of Matter-enabled products. Every week we get numerous queries and requests for samples or product-related queries. Many of these have now become products that have completed certification and selling in their respective market places. + +Along the way we have Matter-certified over 100 ESP ZeroCode powered devices. + +## Quality + +We have been rigorously conducting automated QA tests and making continuous fixes in the ZeroCode firmware. These include a variety of tests including, + +- long-duration tests over 30 days +- tests under network stress and RF interference +- tests with multiple simultaneous ecosystem operations +- OTA and rollback tests + +Overall the test framework runs over 1000 tests, and most of these are run for over 50 different products. + +Numerous issues for memory footprint, corner cases, commissioning/uncommissioning have been identified and fixed. + +## Product Enhancements + +We now support 2 different solution types through ESP ZeroCode. + +- __single-chip solution:__ This is the typical solution that we launched with, which today, runs on Wi-Fi (ESP32-C3, ESP32-C2, ESP32) and Thread (ESP32-H2). This solution is the most cost optimised solution and is recommended for all lighting categories. +- __two-chip (hosted) solution:__ Our ESP ZeroCode ExL is a hosted solution that is ideal for __Appliances__ . Appliances often consider connectivity through a “connectivity co-processor”, and work with it over a UART interface. Our two-chip solution addresses the typical Appliance scenarios, particularly MQTT connectivity to cloud platforms (AWS IoT). Read more about it here: [Announcing ESP ZeroCode ExL](/esp-zerocode-exl-module-powered-by-aws-iot-expresslink-simplifying-matter-compatible-6f90fa89abe6). + +--- + +We also extended our portfolio of partnerships. All ESP ZeroCode products can now be easily certified with all of the following ecosystem programs: + +- Works with Alexa +- Works with Apple Home +- Works with Google Home +- Works with Home Assistant +- Works with SmartThings + +--- + +We also collaborated with Amazon with Alexa Connect Kit (ACK) for Matter and created ZeroCode devices using the ACK for Matter. Through the ESP ZeroCode portal, you can now choose ACK for Matter as a solution for the firmware of your devices. + +## Device Catalogue + +As Matter standard evolved from v1.0 to v1.1 and v1.2, it kept introducing support for new device types. We have kept pace with the standard’s evolution and have been incorporating newer device types and a variety of device drivers in our product catalogue. + +Today, with ESP ZeroCode, you can quickly build the following Matter-enabled products: + +- Window Blinds (automatic and manual calibration) +- Sockets: 1, 2, 3, 4 channel +- Power outlets: 1, 2, 3, 4 channel +- LED Lights with options for RGB, RGBW, RGBWW, RGBCW and RGBCCT with the following drivers are supported: WS2812, PWM, BP5758D, BP5758D, BP1658CJ, BP1658CJ, SM2135E, SM2135E, SM2135EH, SM2135EH, SM2135EGH, SM2135EGH, SM2335EGH +- Filament bulbs, Candle bulb, Reflector bulb, Downlights, Flat Panels (Full Colour, Tunable White) +- Dimmers +- Appliances (hosted mode solutions) like Thermostat, Air Conditioner, Laundry Washer, and Refrigerator + +All the above device types are available on both Wi-Fi as well as Thread/802.15.4 transport. + +## Richer Customisations + +With the introduction of text mode configurability, ESP ZeroCode now allows richer set of customisations. + +You can now create multi-channel outlets or sockets. You can also create multi-endpoint device types, like a socket and a light in the same accessory and such. + +A variety of driver specific customisations have been included. A few of these include, + +- Various configurations for lightbulbs, viz: current, gamma, low power +- Configuring indicator colours and patterns for all the device states, viz: setup mode, device ready, network disconnected +- The state of the device after turning the power on, viz: power, brightness, colour +- Factory reset trigger mechanism + +## Shorter Time To Market + +A number of optimisations in our manufacturing and certification processes have been made to provide the shortest production time. + +In the fastest case, some of our customers have gone from concept to production-start (including certification) within 3 weeks. + +--- + +All in all, we are taking great strides to make ESP ZeroCode the fastest, most secure and robust tool to launch Matter products. If you are looking to develop and maintain your own Matter-enabled products, with your specific customisation, please head over to [ESP ZeroCode](https://zerocode.espressif.com) to get started. + +For additional information about ESP ZeroCode, check out this podcast: + +{{< youtube XMh81q81EMA >}} diff --git a/content/blog/wi-fi-certification-with-esp32/img/wifi-1.webp b/content/blog/wi-fi-certification-with-esp32/img/wifi-1.webp new file mode 100644 index 000000000..6a78cd629 Binary files /dev/null and b/content/blog/wi-fi-certification-with-esp32/img/wifi-1.webp differ diff --git a/content/blog/wi-fi-certification-with-esp32/img/wifi-2.webp b/content/blog/wi-fi-certification-with-esp32/img/wifi-2.webp new file mode 100644 index 000000000..6d923d904 Binary files /dev/null and b/content/blog/wi-fi-certification-with-esp32/img/wifi-2.webp differ diff --git a/content/blog/wi-fi-certification-with-esp32/img/wifi-3.webp b/content/blog/wi-fi-certification-with-esp32/img/wifi-3.webp new file mode 100644 index 000000000..868f74d34 Binary files /dev/null and b/content/blog/wi-fi-certification-with-esp32/img/wifi-3.webp differ diff --git a/content/blog/wi-fi-certification-with-esp32/img/wifi-4.webp b/content/blog/wi-fi-certification-with-esp32/img/wifi-4.webp new file mode 100644 index 000000000..ae5b64e78 Binary files /dev/null and b/content/blog/wi-fi-certification-with-esp32/img/wifi-4.webp differ diff --git a/content/blog/wi-fi-certification-with-esp32/img/wifi-5.webp b/content/blog/wi-fi-certification-with-esp32/img/wifi-5.webp new file mode 100644 index 000000000..44bb79245 Binary files /dev/null and b/content/blog/wi-fi-certification-with-esp32/img/wifi-5.webp differ diff --git a/content/blog/wi-fi-certification-with-esp32/index.md b/content/blog/wi-fi-certification-with-esp32/index.md new file mode 100644 index 000000000..0af964288 --- /dev/null +++ b/content/blog/wi-fi-certification-with-esp32/index.md @@ -0,0 +1,81 @@ +--- +title: "Wi-Fi Certification with ESP32" +date: 2018-08-11 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - kedar-sovani +tags: + - Wifi + - Building Products + - Esp32 + +--- +A fair number of questions come up regarding Wi-Fi certification for Wi-Fi enabled IoT products. Here is an attempt to answer some of the relevant ones. + +Wi-Fi certification is a program by Wi-Fi Alliance that ensures that products that pass certification adhere to the interoperability and security requirements as laid out in the standard. It tests for *protocol* compliance. + +This is different from regulatory certification (like FCC in the US) which is mandatory since it tests that the electromagnetic emissions from a product are under safe limits. + +## Is Wi-Fi certification mandatory for all? + +Wi-Fi certification is mandatory if your product will use ‘Wi-Fi certified’ or the ‘Wi-Fi logo’ on the product branding or marketing campaigns. Certain ecosystem programs, like Apple HomeKit, also have Wi-Fi certification as a mandatory requirement. Your organisation must be a member of the Wi-Fi Alliance to have your product tested for Wi-Fi certification. + +## Derivative Certification using ESP32 + +If you have identified that you require Wi-Fi certification, the quickest path is to use the __derivative certification__ . This certification is applicable if you are using an already certified Wi-Fi module into your product, without any modifications. In such a case, the certification of that Wi-Fi module (called the source), can be directly applied to your product. + +> The benefit of derivative certification is that you won’t have to perform all the Wi-Fi certification tests on your product. You just carry forward the results from the source Wi-Fi module to your product. This saves money and importantly, time, for getting the product certified. + +For additional details about the derivative certification please refer to the [Certifications Overview - Derivative Certificate](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&cd=1&cad=rja&uact=8&ved=2ahUKEwj--t_q_ObcAhWKso8KHRmeBCwQFjAAegQIChAB&url=https%3A%2F%2Fwww.wi-fi.org%2Ffile%2Fcertification-overview-derivative-certifications&usg=AOvVaw0EQuZMH38UR39eYLnP_PX3) document on the Wi-Fi Alliance website. + +The modules ESP32-WROVER and ESP32-WROOM-32D are already certified with Wi-Fi Alliance. If you are using these modules in your product you can use derivative certification for certifying your products. If you are using an ESP32 module from another vendor, please check with them for that module’s Wi-Fi Alliance certification status. + +## Steps for Derivative Certification + +- For any certification, you have to first be a member of Wi-Fi Alliance. Details about membership levels, cost and benefits is available [here](https://www.wi-fi.org/membership). +- Once you are a member, login to the certification system and click on __New Derivative Product Certification.__ + +{{< figure + default=true + src="img/wifi-1.webp" + >}} + +- Choose the *Source Company* as Espressif Inc (If you are using Espressif’s WFA certified modules). Choose your organisation’s name as the *Target Company*. +- Choose the* Product* that you are deriving from. If you are using Espressif’s WFA certified module, you may use __WFA77915 for ESP32-WROVER__ , or __WFA77387 for ESP32-WROOM__ . +- Go to the next page:__Product Information__ + +{{< figure + default=true + src="img/wifi-2.webp" + >}} + +{{< figure + default=true + src="img/wifi-3.webp" + >}} + +- Mention any changes you may have done to the subsystems as indicated in the page. +- Go to the next page: __Product Designators__ + +{{< figure + default=true + src="img/wifi-4.webp" + >}} + +- Fill in the appropriate designators for your product. Select the closest matching *Primary Product Category*. For example, if your product is a refrigerator, select Refrigerator from the list. If applicable, also select the *Secondary Product Category*. +- Go to the next page: __Review Application__ + +{{< figure + default=true + src="img/wifi-5.webp" + >}} + +- Make sure everything is in order, make the payment and submit the application. +- The WFA staff will review the submission and if everything is in order, will grant you the Wi-Fi certification. + +## Full Wi-Fi Certification + +If you cannot use the derivative certification as mentioned above, you will have to perform the full Wi-Fi certification. + +## Steps for Wi-Fi Certification diff --git a/content/blog/wireless-connectivity-solutions-for-esp32-p4/img/wireless-1.webp b/content/blog/wireless-connectivity-solutions-for-esp32-p4/img/wireless-1.webp new file mode 100644 index 000000000..4583ea104 Binary files /dev/null and b/content/blog/wireless-connectivity-solutions-for-esp32-p4/img/wireless-1.webp differ diff --git a/content/blog/wireless-connectivity-solutions-for-esp32-p4/img/wireless-2.webp b/content/blog/wireless-connectivity-solutions-for-esp32-p4/img/wireless-2.webp new file mode 100644 index 000000000..3c4b7149b Binary files /dev/null and b/content/blog/wireless-connectivity-solutions-for-esp32-p4/img/wireless-2.webp differ diff --git a/content/blog/wireless-connectivity-solutions-for-esp32-p4/img/wireless-3.webp b/content/blog/wireless-connectivity-solutions-for-esp32-p4/img/wireless-3.webp new file mode 100644 index 000000000..0e748ca01 Binary files /dev/null and b/content/blog/wireless-connectivity-solutions-for-esp32-p4/img/wireless-3.webp differ diff --git a/content/blog/wireless-connectivity-solutions-for-esp32-p4/img/wireless-4.webp b/content/blog/wireless-connectivity-solutions-for-esp32-p4/img/wireless-4.webp new file mode 100644 index 000000000..3eabba027 Binary files /dev/null and b/content/blog/wireless-connectivity-solutions-for-esp32-p4/img/wireless-4.webp differ diff --git a/content/blog/wireless-connectivity-solutions-for-esp32-p4/index.md b/content/blog/wireless-connectivity-solutions-for-esp32-p4/index.md new file mode 100644 index 000000000..a7ded63fa --- /dev/null +++ b/content/blog/wireless-connectivity-solutions-for-esp32-p4/index.md @@ -0,0 +1,85 @@ +--- +title: "Wireless Connectivity Solutions for ESP32-P4" +date: 1970-01-01 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - anant-raj-gupta +tags: + - Esp32 + - Wifi + - Wireless + - Microcontrollers + - Connectivity +--- +The ESP32-P4 is a powerful system-on-chip (SoC) from Espressif, designed for high-performance applications that demand robust features. While the ESP32-P4 offers a range of advanced capabilities, it does not have integrated wireless connectivity and may require additional connectivity solutions to meet the diverse needs of modern embedded systems. Espressif provides three main connectivity solutions for the ESP32-P4: __ESP-AT__ , __ESP-Hosted__ , and __ESP-Extconn__ . Let’s explore each solution's advantages, limitations, and use cases. + +## ESP-AT + +[ESP-AT](https://github.com/espressif/esp-at) allows the ESP32-P4 to connect with external wireless modules using AT commands. It’s a simple and effective way to integrate wireless connectivity without extensive software development. + +{{< figure + default=true + src="img/wireless-1.webp" + >}} + +__Advantages__ :- Simple and easy to use, with a well-established AT command interface- Supports a wide range of WiFi and Bluetooth features- Readily available and widely used in the Espressif ecosystem- Some minor customization is possible on the AT interface to add new commands. + +__Limitations__ :- Limited to basic connectivity functions, with less flexibility for advanced applications- Low performance in terms of throughput, QoS as well as latency + +__Applications and Scenarios__ :- Suitable for simple IoT devices or applications with basic connectivity requirements- Ideal for quick prototyping or projects where a straightforward, out-of-the-box solution is preferred + +## ESP-Hosted-FG + +[ESP-Hosted-FG](https://github.com/espressif/esp-hosted) provides a standard 802.3 (Ethernet) network interface to the host. This setup ensures the microcontroller can handle more complex or demanding processes without compromising wireless performance. + +{{< figure + default=true + src="img/wireless-2.webp" + >}} + +__Advantages:__ - Provides flexibility in choosing different interfaces based on the performance requirement of the application- Supports advanced wireless features compared to ESP-AT like VLAN, Multiple Network interfaces, Network and performance tuning configurations, etc. - Source code in open-source and the slave can be customized to utilize other features of the SoC like peripherals, GPIOs, etc. + +__Limitations:__ - Requires additional development effort to integrate the ESP-Hosted solution with the main application- May have higher resource requirements compared to ESP-AT + +__Applications and Scenarios:__ - Suitable for complex IoT devices or applications that demand advanced wireless features- Useful for applications that require high-performance or resource-intensive wireless feature + +## ESP-Extconn + +[ESP-Extconn](https://github.com/espressif/esp-extconn) provides external wireless connectivity(Wi-Fi & Bluetooth) for ESP chips that do not have built-in wireless capabilities. This component's APIs are compatible with the Wi-Fi and Bluetooth component APIs in the ESP-IDF. + +{{< figure + default=true + src="img/wireless-3.webp" + >}} + +__Advantages__ :- Provides the most flexible and extensible connectivity solution- Allows for ease of integration with the main application logic due to familiarity with the ESP-IDF wireless components APIs. + +__Limitations:__ - Requires more development effort compared to the other solutions.- There may be higher resource requirements for the host- It has zero flexibility in terms of customization of co-processor functionality. + +__Applications and Scenarios:__ - Ideal for applications where the main application logic needs to be tightly integrated with the connectivity features- Useful for projects that require a high degree of flexibility and configurability in the connectivity solution + +## Comparison of the different solutions: + +{{< figure + default=true + src="img/wireless-4.webp" + >}} + +## Choosing the Right Solution + +When selecting a connectivity solution for the ESP32-P4, consider the following factors: + +__1. Connectivity Requirements:__ Assess the specific wireless and connectivity needs of your application. If basic Wi-Fi and Bluetooth features are sufficient, ESP-AT may be the most suitable choice. For more advanced wireless requirements, ESP-Hosted or ESP-Extconn may be better options. + +__2. Application Complexity:__ If your main application logic is straightforward and can be easily combined with the connectivity tasks, ESP-AT may be the simplest solution. For complex applications that require a clear separation between the main logic and connectivity, ESP-Hosted or ESP-Extconn may be more appropriate. + +__3. Development Resources:__ If you have a smaller team or limited development resources, ESP-AT may be the easiest solution to integrate. ESP-Hosted and ESP-Extconn require more development effort but offer greater flexibility and configurability. + +__4. Performance Constraints:__ For high-performance applications, the trade-offs between the solutions should be carefully evaluated. ESP-AT may be more resource-efficient, while ESP-Hosted and ESP-Extconn will provide better performance and throughput. + +__5. Interface Considerations:__ ESP-Hosted provides flexibility to choose from SDIO, SPI, and UART interfaces for your connectivity solution based on the performance requirement of the application. + +6. __Co-processor resource usage:__ If there is a requirement to use other features of the co-processor like GPIOs, peripherals, etc., ESP-Hosted provides the most flexibility in terms of customization of the slave as to the requirement. If using the ESP-AT, users can create custom AT commands for some basic operations. + +By considering these factors, you can determine the most suitable connectivity solution for your ESP32-P4-based application, ensuring the optimal balance between ease of use, flexibility, and performance. diff --git a/content/blog/zephyr-max-wifi-throughput/index.md b/content/blog/zephyr-max-wifi-throughput/index.md index 410acc69f..baefc745d 100644 --- a/content/blog/zephyr-max-wifi-throughput/index.md +++ b/content/blog/zephyr-max-wifi-throughput/index.md @@ -2,6 +2,7 @@ title: "Maximizing Wi-Fi Throughput: Fine-Tuning Zephyr for Peak Performance with ESP32 SoCs in IoT Applications" date: 2024-06-24T14:29:12+08:00 showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" authors: - "marcio-ribeiro" tags: ["ESP32-S3", "Zephyr", "Wi-Fi"] diff --git a/content/blog/zephyr-rtos-on-esp32-first-steps/img/zephyr-1.webp b/content/blog/zephyr-rtos-on-esp32-first-steps/img/zephyr-1.webp new file mode 100644 index 000000000..9b0064861 Binary files /dev/null and b/content/blog/zephyr-rtos-on-esp32-first-steps/img/zephyr-1.webp differ diff --git a/content/blog/zephyr-rtos-on-esp32-first-steps/img/zephyr-2.webp b/content/blog/zephyr-rtos-on-esp32-first-steps/img/zephyr-2.webp new file mode 100644 index 000000000..db92ebca9 Binary files /dev/null and b/content/blog/zephyr-rtos-on-esp32-first-steps/img/zephyr-2.webp differ diff --git a/content/blog/zephyr-rtos-on-esp32-first-steps/img/zephyr-3.webp b/content/blog/zephyr-rtos-on-esp32-first-steps/img/zephyr-3.webp new file mode 100644 index 000000000..73fb35b5d Binary files /dev/null and b/content/blog/zephyr-rtos-on-esp32-first-steps/img/zephyr-3.webp differ diff --git a/content/blog/zephyr-rtos-on-esp32-first-steps/img/zephyr-4.webp b/content/blog/zephyr-rtos-on-esp32-first-steps/img/zephyr-4.webp new file mode 100644 index 000000000..e2d3889e3 Binary files /dev/null and b/content/blog/zephyr-rtos-on-esp32-first-steps/img/zephyr-4.webp differ diff --git a/content/blog/zephyr-rtos-on-esp32-first-steps/index.md b/content/blog/zephyr-rtos-on-esp32-first-steps/index.md new file mode 100644 index 000000000..6a0b406a1 --- /dev/null +++ b/content/blog/zephyr-rtos-on-esp32-first-steps/index.md @@ -0,0 +1,222 @@ +--- +title: "Zephyr RTOS on ESP32 —First Steps" +date: 2021-02-24 +showAuthor: false +featureAsset: "img/featured/featured-espressif.webp" +authors: + - glauber-ferreira +tags: + - Esp32 + - Zephyrrtos + - Zephyr + - Embedded Systems + - Espressif + +--- +{{< figure + default=true + src="img/zephyr-1.webp" + >}} + +> __Attention:__ The installation process outlined in this article has become obsolete. To ensure accurate and up-to-date instructions, kindly consult the [new installation link](https://docs.zephyrproject.org/latest/develop/getting_started/index.html). Your understanding is greatly appreciated. + +Zephyr is a very low footprint RTOS maintained by the Linux Foundation and ported to several architectures. This RTOS has been gaining massive support from many silicon manufacturers and an ever-growing list of contributors on its mainline. + +Espressif has been expanding support for Zephyr RTOS on ESP32, an extremely popular SoC among hobbyists but also widely used in commercial applications. Since its release, this SoC became famous for integrating both Wifi and Bluetooth stacks on a single chip and for being very cost-competitive. In this post, all the required steps to prepare your host’s environment to use Zephyr on ESP32 will be explained. In the end, we will run a __hello world__ application to validate our setup. In this step-by-step guide, the __ESP32 DevKitC__ board will be used. + +{{< figure + default=true + src="img/zephyr-2.webp" + >}} + +The first thing to do is to prepare Zephyr’s development environment. I briefly list the steps required for Linux (Ubuntu 20.04.1 LTS), for the most up-to-date documentation, and for support for other Operating Systems you can see Zephyr’s official [Getting Started](https://docs.zephyrproject.org/latest/getting_started/index.html) guide and, specifically, you can see most of the original instructions included in this post in the [ESP32 SoC section](https://docs.zephyrproject.org/latest/boards/espressif/index.html) of the Zephyr Project documentation. + +## Updating Linux + +Before we start, update your repositories list. + +``` +sudo apt update +sudo apt upgrade +``` + +## Installing dependencies + +Run __apt__ to install dependencies: + +``` +sudo apt install --no-install-recommends git cmake \ +ninja-build gperf ccache dfu-util device-tree-compiler wget \ +python3-dev python3-pip python3-setuptools python3-tk \ +python3-wheel xz-utils file make gcc gcc-multilib \ +g++-multilib libsdl2-dev +``` + +Check the __CMake__ version on your host. + +``` +cmake --version +``` + +If the version displayed is __3.13.1__ or above then skip to the next section. Otherwise, follow these three steps to update CMake: + +Add the Kitware signing key: + +``` +wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add - +``` + +Add the Kitware apt repository for your OS release. For Ubuntu 20.04 LTS: + +``` +sudo apt-add-repository \ +'deb https://apt.kitware.com/ubuntu/ focal main' +``` + +Reinstall CMake + +``` +sudo apt update +sudo apt install cmake +``` + +## Getting Zephyr and installing Python dependencies + +Install __west__ and ensure that __~/.local/bin__ is part of your __PATH__ environment variable: + +``` +pip3 install -- user -U west +echo ‘export PATH=~/.local/bin:”$PATH”’ >> ~/.bashrc +source ~/.bashrc +``` + +Here is a worthy observation: west is the tool that manages the entire life-cycle of a Zephyr-based project. This is made clearer below. Now, get Zephyr’s source code: + +``` +west init ~/zephyrproject +cd ~/zephyrproject +west update +west espressif update +``` + +Be patient, these last commands will fetch Zephyr’s repository and all the HALs (including ESP32’s) already ported to this RTOS. Note that we do not explicitly call a git command to clone the repositories, __west__ takes care of everything. Now, export a Zephyr CMake package. This causes CMake to automatically load some boilerplate code. + +``` +west zephyr-export +``` + +Zephyr’s __requirements.txt__ file declares additional Python dependencies. Install them through pip3. + +``` +pip3 install --user -r \ +~/zephyrproject/zephyr/scripts/requirements.txt +``` + +## Installing Zephyr’s toolchain + +Zephyr’s SDK adds several additional tools for the host. Download the SDK installer: + +``` +cd ~ +wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.12.2/zephyr-sdk-0.12.2-x86_64-linux-setup.run +``` + +Run the installer, this will install the SDK under the __~/zephyr-sdk-0.12.2__ folder. + +``` +chmod +x zephyr-sdk-0.12.2-x86_64-linux-setup.run +./zephyr-sdk-0.12.2-x86_64-linux-setup.run -- -d ~/zephyr-sdk-0.12.2 +``` + +This is one of the default locations recommended for SDK installation, for other locations check Zephyr’s official documentation. + +## Adding ESP32 toolchain to the project + +Before building, we need to tell Zephyr where to find the toolchain for ESP32’s Xtensa architecture. Open your terminal, and type the following commands: + +``` +export ZEPHYR_TOOLCHAIN_VARIANT="espressif" +export ESPRESSIF_TOOLCHAIN_PATH="${HOME}/.espressif/tools/xtensa-esp32-elf/esp-2020r3-8.4.0/xtensa-esp32-elf" +export PATH=$PATH:$ESPRESSIF_TOOLCHAIN_PATH/bin +``` + +Alternatively, you can add the above commands to your __~/.bashrc__ configuration file, making those variables available at any time on your current working session. Finally, install the toolchain: + +``` +cd ~/zephyrproject +west espressif install +``` + +## Building the application + +Remember I mentioned __west__ takes part in all stages of a Zephyr’s project life-cycle? Well, we’ll see it in action here again. Build the __hello_world__ project for the ESP32 board from the sample code folder. + +``` +cd ~/zephyrproject/zephyr/samples/hello_world +west build -p auto -b esp32 +``` + +If the previous build fails with a message indicating missing Python packages, your OS likely uses __python2.x__ by default. If so, make __python3__ its preferred choice by running the following: + +``` +sudo update-alternatives --install \ +/usr/bin/python python /usr/bin/python3 10 && alias pip=pip3 +``` + +Then, run the build command again. + +We will need a serial program utility to see the logs, use the one of your preference. Here I use __minicom__ . + +``` +sudo apt install minicom +``` + +To open minicom’s serial settings, type this command: + +``` +sudo minicom -s +``` + +After __minicom__ is opened, chose the __serial port setup__ option and set it to __115200 8N1__ . + +{{< figure + default=true + src="img/zephyr-3.webp" + >}} + +## Flashing the binary + +Flashing the binary is quite simple, just do the following: + +``` +west flash; minicom +``` + +In older ESP32 DevKitC boards, the chip may run to standby mode until the __BOOT__ button is pressed, which triggers the flashing action. Newer boards start flashing immediately. + +If you have been following everything up to this point, after some ESP32’s boot messages, you should see the expected hello message. + +{{< figure + default=true + src="img/zephyr-4.webp" + >}} + +There you have it! Your development environment was properly configured and you have run your first application using Zephyr on ESP32! + +## Supported Features + +ESP32 support for Zephyr is growing. By the time I am writing this post, it includes basic peripherals such as: + +- UART +- I2C +- GPIO +- SPI Master +- Timers + +WiFi native driver support for ESP32 is also coming to Zephyr’s upstream, you can check it by clicking on its [PR link](https://github.com/zephyrproject-rtos/zephyr/pull/32081). Additionally, please follow [here](https://github.com/zephyrproject-rtos/zephyr/issues/29394) for overall future road-map for ESP32 support. + +## Summary + +In this post, we saw how to set the environment for Zephyr RTOS and how to build a sample project for an ESP32 based board. The whole process has been greatly simplified since Xtensa’s toolchain installation has been incorporated into the west tool commands. + +Stay tuned to Zephyr’s documentation and repository for the most recent supported peripherals. Espressif Team keeps actively working on porting and supporting its SoCs on Zephyr. diff --git a/data/authors/aditya-patwardhan.json b/data/authors/aditya-patwardhan.json new file mode 100644 index 000000000..b13e03610 --- /dev/null +++ b/data/authors/aditya-patwardhan.json @@ -0,0 +1,5 @@ +{ + "name": "Aditya Patwardhan", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/adwait-patankar.json b/data/authors/adwait-patankar.json new file mode 100644 index 000000000..489cd42ae --- /dev/null +++ b/data/authors/adwait-patankar.json @@ -0,0 +1,5 @@ +{ + "name": "Adwait Patankar", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/ali-hassan-shah.json b/data/authors/ali-hassan-shah.json new file mode 100644 index 000000000..72f5d2760 --- /dev/null +++ b/data/authors/ali-hassan-shah.json @@ -0,0 +1,5 @@ +{ + "name": "Ali Hassan Shah", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/amey-inamdar.json b/data/authors/amey-inamdar.json new file mode 100644 index 000000000..ef8e8d7c2 --- /dev/null +++ b/data/authors/amey-inamdar.json @@ -0,0 +1,5 @@ +{ + "name": "Amey Inamdar", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/anant-raj-gupta.json b/data/authors/anant-raj-gupta.json new file mode 100644 index 000000000..ca591698e --- /dev/null +++ b/data/authors/anant-raj-gupta.json @@ -0,0 +1,5 @@ +{ + "name": "Anant Raj Gupta", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/chirag-atal.json b/data/authors/chirag-atal.json new file mode 100644 index 000000000..b20262a89 --- /dev/null +++ b/data/authors/chirag-atal.json @@ -0,0 +1,5 @@ +{ + "name": "Chirag Atal", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/david-cermak.json b/data/authors/david-cermak.json new file mode 100644 index 000000000..58b501a07 --- /dev/null +++ b/data/authors/david-cermak.json @@ -0,0 +1,5 @@ +{ + "name": "David Cermak", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/deepakumar-v-u.json b/data/authors/deepakumar-v-u.json new file mode 100644 index 000000000..ce4f11bfa --- /dev/null +++ b/data/authors/deepakumar-v-u.json @@ -0,0 +1,5 @@ +{ + "name": "Deepakumar V U", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/developer-portal.json b/data/authors/developer-portal.json new file mode 100644 index 000000000..4a33ff8ff --- /dev/null +++ b/data/authors/developer-portal.json @@ -0,0 +1,5 @@ +{ + "name": "Esp Bot", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/dhaval-gujar.json b/data/authors/dhaval-gujar.json new file mode 100644 index 000000000..fc8cc5307 --- /dev/null +++ b/data/authors/dhaval-gujar.json @@ -0,0 +1,5 @@ +{ + "name": "Dhaval Gujar", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/glauber-ferreira.json b/data/authors/glauber-ferreira.json new file mode 100644 index 000000000..e74f8353c --- /dev/null +++ b/data/authors/glauber-ferreira.json @@ -0,0 +1,5 @@ +{ + "name": "Glauber Ferreira", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/guo-jiacheng.json b/data/authors/guo-jiacheng.json new file mode 100644 index 000000000..9d4158eea --- /dev/null +++ b/data/authors/guo-jiacheng.json @@ -0,0 +1,5 @@ +{ + "name": "Guo Jiacheng", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/harshal-patil.json b/data/authors/harshal-patil.json new file mode 100644 index 000000000..a0860df2b --- /dev/null +++ b/data/authors/harshal-patil.json @@ -0,0 +1,5 @@ +{ + "name": "Harshal Patil", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/hrishikesh-dhayagude.json b/data/authors/hrishikesh-dhayagude.json new file mode 100644 index 000000000..a63053b90 --- /dev/null +++ b/data/authors/hrishikesh-dhayagude.json @@ -0,0 +1,5 @@ +{ + "name": "Hrishikesh Dhayagude", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/juraj-sadel.json b/data/authors/juraj-sadel.json new file mode 100644 index 000000000..d992a739a --- /dev/null +++ b/data/authors/juraj-sadel.json @@ -0,0 +1,5 @@ +{ + "name": "Juraj Sadel", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/kedar-sovani.json b/data/authors/kedar-sovani.json new file mode 100644 index 000000000..1e57ae74c --- /dev/null +++ b/data/authors/kedar-sovani.json @@ -0,0 +1,5 @@ +{ + "name": "Kedar Sovani", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/lucas-tamborrino.json b/data/authors/lucas-tamborrino.json new file mode 100644 index 000000000..a6a9346ba --- /dev/null +++ b/data/authors/lucas-tamborrino.json @@ -0,0 +1,5 @@ +{ + "name": "Lucas Tamborrino", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/mahavir-jain.json b/data/authors/mahavir-jain.json new file mode 100644 index 000000000..c008a3ae8 --- /dev/null +++ b/data/authors/mahavir-jain.json @@ -0,0 +1,5 @@ +{ + "name": "Mahavir Jain", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/marek-fiala.json b/data/authors/marek-fiala.json new file mode 100644 index 000000000..8caadff59 --- /dev/null +++ b/data/authors/marek-fiala.json @@ -0,0 +1,5 @@ +{ + "name": "Marek Fiala", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/ondrej-kosta.json b/data/authors/ondrej-kosta.json new file mode 100644 index 000000000..f9f3ef076 --- /dev/null +++ b/data/authors/ondrej-kosta.json @@ -0,0 +1,5 @@ +{ + "name": "Ondrej Kosta", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/piyush-shah.json b/data/authors/piyush-shah.json new file mode 100644 index 000000000..c2fd0af5c --- /dev/null +++ b/data/authors/piyush-shah.json @@ -0,0 +1,5 @@ +{ + "name": "Piyush Shah", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/roland-dobai.json b/data/authors/roland-dobai.json new file mode 100644 index 000000000..fe0ffed08 --- /dev/null +++ b/data/authors/roland-dobai.json @@ -0,0 +1,5 @@ +{ + "name": "Roland Dobai", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/sachin-parekh.json b/data/authors/sachin-parekh.json new file mode 100644 index 000000000..3aeca4dc7 --- /dev/null +++ b/data/authors/sachin-parekh.json @@ -0,0 +1,5 @@ +{ + "name": "Sachin Parekh", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/sara-monteiro.json b/data/authors/sara-monteiro.json new file mode 100644 index 000000000..5e7ca0fc8 --- /dev/null +++ b/data/authors/sara-monteiro.json @@ -0,0 +1,5 @@ +{ + "name": "Sara Monteiro", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/scott-mabin.json b/data/authors/scott-mabin.json new file mode 100644 index 000000000..64b258552 --- /dev/null +++ b/data/authors/scott-mabin.json @@ -0,0 +1,5 @@ +{ + "name": "Scott Mabin", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/shu-chen.json b/data/authors/shu-chen.json new file mode 100644 index 000000000..f6391ddd6 --- /dev/null +++ b/data/authors/shu-chen.json @@ -0,0 +1,5 @@ +{ + "name": "Shu Chen", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/shubham-kulkarni.json b/data/authors/shubham-kulkarni.json new file mode 100644 index 000000000..a3fed1b30 --- /dev/null +++ b/data/authors/shubham-kulkarni.json @@ -0,0 +1,5 @@ +{ + "name": "Shubham Kulkarni", + "bio": "", + "image": "" +} \ No newline at end of file diff --git a/data/authors/teo-swee-ann.json b/data/authors/teo-swee-ann.json new file mode 100644 index 000000000..10afa1d7b --- /dev/null +++ b/data/authors/teo-swee-ann.json @@ -0,0 +1,5 @@ +{ + "name": "Teo Swee Ann", + "bio": "", + "image": "" +} \ No newline at end of file