Internship Training Manual
Internship Training Manual
General Requirements
- Hardworking, decent & honest
- Intelligent
- Should have the ability to assimilate complex ideas
- Experienced candidates MUST have excellent communication skills & understand how to
train, manage & help less experienced colleagues grow
- Recently graduating candidates MUST have the ability to learn by doing [1] [2] using online
learning methods/tutorials
- Must have the ability to follow instructions1
- Must be a team player [1] [2]
- Understand good work ethic [1]
- Must be a good fit into our team culture
- Must value your time & our time [1]
- Should treat everyone 2 with respect
- Must know how to use the internet 3
- Must have clear core concepts
- Excellent Programming & algorithm development skills
- Must have the ability to learn independently (without being asked)
- Must be good at reading documentation
- Experienced candidates must be good at writing documentation
- Must be able to summarize documents/tutorials/videos & teach core concepts to other team
members
- Must be passionate
- Must enjoy work
- Must be ambitious & motivated
1
Please follow instructions provided to you during the interview, test and training phase. We don't like asking twice. This is
especially important for fresh graduates.
2
Everyone means everyone, including our support & cleaning staff
3
We don't expect you to know the answer to every question but we do expect you to know where to look. You should know how to
google solutions to problems and use stackoverflow / online user forums / online community resources / discussion groups to your
advantage. We expect you to know how and where to search for solutions to problems that you don't understand. We expect that
before you ask a colleague, you will have tried your best to search for a solution online (by yourself)
SUGGESTED SCHEDULE FOR EACH DAY
Morning (3 hours):
1. Study and review the allocated topics using online resources, textbooks, or other
study materials.
2. Practice examples and exercises related to the topics on OnlineGDB.
Afternoon (3 hours):
1. Deep dive into complex topics or areas where you feel less confident.
2. Implement small projects or solve coding problems to reinforce understanding.
Evening (2 hour):
Learning C
Advanced Concepts
1. Bit Masking [0] [1]
2. Bitwise operators [1] [2] [3] [4] (very important)
3. Bit Manipulation [0] [1] [2] [3] (very important)
4. Inline functions & macros [1] [2]
5. Parsing a string with sscanf [1] [2] [3] [4] [5] [6] [7] [8] (very important)
6. Using sprintf function to generate dynamic strings [1] [2] [3] [4] [5] (very important)
Memory and Compilation
1. Static vs dynamic memory allocation / fragmentation [1] [2] [3] [4] [5]
2. Pointers & Dynamic memory [1]
3. Linked Lists [1] [2] [3] [4] [5] [6]
4. Knowledge about different compilers [1] [2]
5. Compiling C programs with multiple files [1] [2]
LEARNING OUTCOME
After completing this 5-day crash course in C programming, you should achieve the
following overall learning outcomes:
Objectives:
Steps:
cd example/get-started/hello_world
idf.py fullclean
idf.py set-target esp32
idf.py build
idf.py flash
idf.py monitor
Exercise:
● Document Verification: Write a short report on the steps you followed to set up
Visual Studio Code and ESP-IDF, including any issues faced and how you
resolved them.
Day 2: Exploring ESP-IDF, Basic Commands and Project setup
Objectives:
Steps:
Configure CMakeLists.txt:
idf_component_register(SRCS "my_component.c"
INCLUDE_DIRS "include")
Include Component in Main Application:
Exercise:
● Project Creation: Create a new ESP-IDF project, build it, flash it to the ESP32,
and monitor the output. Document the process and any issues encountered.
● Create and Use a Component:
○ Create a simple component that provides a utility function (e.g., a button
utility).
○ Include and use this component in your main application.
○ Document the steps and any issues faced.
Objectives:
Steps:
1. Difference between 8 bit and 32 bit controllers ? [1] [2]
2. Basic understanding of ARM architecture? (esp Cortex M)
3. Read the ESP32 Overview:
○ Explore the ESP32 Overview on the Espressif website.
4. Read the ESP32 Datasheet:
○ Download and read the ESP32 Datasheet.
○ Read about the different GPIOs, learn which are allowed to use.
○ Learn what are the different other techniques to program esp32 other
than ESP-IDF.
5. Read the Technical Reference Manual:
○ Download and read the ESP32 Technical Reference Manual.
Exercise:
Objectives:
Exercise:
● Blink Example: Implement the blink example, modify it to change the blink rate,
and document the changes made.
Objectives:
Steps:
5. Adapt an Example:
● Documentation Navigation: Choose a specific topic (e.g., GPIO, I2C) from the
ESP-IDF Programming Guide. Write a short guide on how to use that feature,
including example code and references to the documentation.
● Custom Example: Choose an ESP-IDF example, modify it to add new features
or change its functionality, and document the changes made and any challenges
faced.
Learning Outcomes:
WEEK 2 TASKS
Objectives:
1. FreeRTOS Basics:
○ Study the FreeRTOS documentation to understand key concepts.
○ Focus on tasks, task scheduling, and task states.
2. Setting Up FreeRTOS on ESP32:
○ Read the ESP-IDF FreeRTOS API documentation.
○ Set up a basic FreeRTOS project in ESP-IDF.
3. Creating and Managing Tasks:
○ Learn how to create, delete, and manage tasks.
○ Study the usage of xTaskCreate, vTaskDelete, and vTaskDelay.
Exercise:
Objectives:
Steps:
Exercise:
● Timer Example:
○ Implement a timer that toggles an LED every second.
○ Document the implementation process and any challenges encountered.
Objectives:
Exercise:
● Interrupt Example:
○ Implement a GPIO interrupt that toggles an LED when a button is
pressed.
○ Document the steps and any issues encountered.
Objectives:
Steps:
Exercise:
● I2C Example:
○ Implement a program that reads data from an I2C sensor(DHT, SHT30)
and prints it to console
○ Document the implementation process and any challenges encountered.
Objectives:
1. Project Planning:
○ Plan a project that uses a custom component, timers, interrupts, and I2C
communication.
○ Example project: A temperature logger that reads data from an I2C
temperature sensor, uses a timer to log data at regular intervals, and
triggers an interrupt when a button is pressed to change the logging
interval.
2. Project Implementation:
○ Create and configure the necessary components.
○ Set up timers, interrupts, and I2C communication as learned in the
previous days.
○ Integrate all parts into a cohesive project.
Exercise:
● Comprehensive Project:
○ Implement the planned project.
○ Ensure all parts work together seamlessly.
○ Document the project, including the design, implementation steps, and
any issues encountered.
Learning Outcomes
WEEK 3 TASKS
Objectives:
Steps:
1. Advanced GPIO:
○ Study the ESP-IDF GPIO documentation.
○ Implement GPIO functionalities such as wake-up and edge detection.
2. PWM Configuration and Usage:
○ Study the ESP-IDF LEDC (PWM) API documentation.
○ Implement a PWM signal to control an LED brightness.
Exercise:
Objectives:
Steps:
1. Wi-Fi Basics:
○ Study the ESP-IDF Wi-Fi API documentation.
○ Set up an ESP32 as a Wi-Fi station and connect to a network.
2. Wi-Fi as Access Point:
○ Study the ESP-IDF WiFi AP documentation.
○ Set up an ESP32 as an WiFi access point and connect your mobile or
computer with it.
○ You can use the ESP-IDF examples.
Exercise:
● Wi-Fi Connection Example: Configure the esp32 in both Station and Access
Point mode and try to connect with it. Document the process and any issues
faced.
Objectives:
Steps:
Exercise:
● UART Examples:
○ Test uart_echo, uart_events, and uart_async_rxtxtasks
examples.
○ Document the setup, execution, and performance of each example.
○ Compare the examples and determine which one is better suited for
specific scenarios and why.
Objectives:
Steps:
Exercise:
Objectives:
Steps:
1. Semaphores in FreeRTOS:
○ Study the FreeRTOS documentation on semaphores.
○ Understand how to create binary semaphores and use them for task
synchronization.
○ Learn to use xSemaphoreCreateBinary, xSemaphoreGive, and
xSemaphoreTake.
2. Mutexes in FreeRTOS:
○ Study the FreeRTOS documentation on mutexes.
○ Understand how to create mutexes and use them to protect shared
resources.
○ Learn to use xSemaphoreCreateMutex, xSemaphoreTake, and
xSemaphoreGive.
Exercise:
● Semaphore Example:
○ Create a FreeRTOS project where a task waits for a semaphore to be
given before proceeding with its execution (e.g., a task waits for a button
press to toggle an LED).
○ Document the process, code implementation, and any challenges faced.
● Mutex Example:
○ Create a FreeRTOS project where multiple tasks try to access a shared
resource (e.g., a UART peripheral or any other resources such as sensor
data). Use a mutex to protect the resource from concurrent access.
○ Document the process, code implementation, and any challenges faced.
Learning outcome:
DAY1
DAY2
DAY3
DAY4
DAY5
WEEK 5 TASKS
DAY1
DAY2
DAY3
DAY4
DAY5
WEEK 6 TASKS
DAY1
DAY2
DAY3
DAY4
DAY5
WEEK 7 TASKS
DAY1
DAY2
DAY3
DAY4
DAY5
WEEK 8 TASKS
DAY1
DAY2
DAY3
DAY4
DAY5