From f94208f921ee5b7a9027d542998a4122d9287da7 Mon Sep 17 00:00:00 2001 From: Alexandre Bobkov Date: Mon, 21 Jul 2025 03:08:12 -0400 Subject: [PATCH] RC Robot Tutorial --- .../docs/build/doctrees/environment.pickle | Bin 29019 -> 29019 bytes .../docs/build/doctrees/overview.doctree | Bin 45711 -> 48807 bytes .../docs/build/html/_sources/overview.rst.txt | 64 +++++++++++------- .../tutorial/docs/build/html/overview.html | 56 +++++++++------ .../tutorial/docs/build/html/searchindex.js | 2 +- .../tutorial/docs/source/overview.rst | 27 +++++--- 6 files changed, 93 insertions(+), 56 deletions(-) diff --git a/ESP-IDF_Robot/tutorial/docs/build/doctrees/environment.pickle b/ESP-IDF_Robot/tutorial/docs/build/doctrees/environment.pickle index cd84201c5abf40ea1698ae122cb760bac27fd7ad..ad385a751db9f48169d2d833e436c026f2484639 100644 GIT binary patch delta 702 zcmYjN&ubGw6wW4`K)Uti*AYX}s8=$sJ5WA;D-)%~D zDeusrCHfhj!3+}z!@&-t zZH7aj3_IA>!}>rAaU|EOlhUg7TZLrvNfvVTP+eBuVm6cU)--5Sa3EEd3E(|I7vLj6V(>Gt#LYUewBXg{pI}t}3W_`Vh|VX< y+gdfTBr1~nM`V*6KD}K&mXsrH(VH&l2VMne0*q+Iy9f+MJ!tgmx%e6Rko^yX>+^yD delta 714 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 delta 1562 zcmb7@YiJZ#6o7Ll*-5fZ<3fC3nq3DH)6HvRe^grfg1%_6soM0R5R2pPHIuQK+3d`0 zj7@ZtM&p{b3q6ydt=K3?NK7@G(L%CKTBQh4kXVWctyK%92nCHlBp`ji~)T z3T$p)1L%y446g1i zgwwk>qQkIg&owjvxAuHaWU}WTKS08qu?@XF)Uc7ED>l;NDgG$2n6uSCd&{78UmZh* zZkC&(WxeC*C|v3tXAjRh4?KLG7>1eN9InAePk&qr>HTXN(j4>yQ{#?m*J>m;QVicE z@4c3&dRxLmrKU%Wpk66#RU?9?tC1$9QD|1lhbF9huTF@H9~f8*u)FY+!^ojd=5Djo z>@fYLgBdq`7FfPA&xzw45O2rLu)N}i^}cHGROk3-+*w)177}g6f2V~`vjo~7Ek}da zw`L_mci>jvhJxF~TPl&NB=4FbxE5KqD^Wv>+G;34y-8JANFy8)_4!sF|5q<0dF}ss z{Tw^^55M`YU5}6w9+R@Ak~bwUG>=qx#>gykb8TvDk!LN>L7ZQnMeO1-B2wn4$R?u0 zG^9#7qlr_riQ0rh%Tbk=MO}Og2XRvrhx`?SsD$prdaURaM6jT@s&M9bQAiVXNz{c# ztP41*Zo|}6z+zAmf@&m!wXmv$=n!y}_}V)peLsAnnukgR;bSlQzF#m8va<^NW?UOI z&WfEli#WF%)S;C7{>d!BFgp0;gU#x_axis); - ESP_LOGI(TAG, "x-axis: 0x%04x", buf->y_axis); - ESP_LOGI(TAG, "PWM 1: 0x%04x", buf->motor1_rpm_pwm); - } - - // Call-back for the event when data is being sent - void onDataSent (uint8_t *mac_addr, esp_now_send_status_t status) { - ESP_LOGW(TAG, "Packet send status: 0x%04X", status); - } - -The rc_send_data_task() function runs every 0.1 second to transmit the data to the receiver. +This function is invoked by a dedicated FreeRTOS task every 100 milliseconds, ensuring consistent and timely transmission of +control data to the receiver device. By leveraging FreeRTOS's precise task scheduling, the system maintains low-latency +communication and predictable behavior—critical for real-time control in embedded applications. .. code-block:: c @@ -242,6 +231,35 @@ The rc_send_data_task() function runs every 0.1 second to transmit the data to t } } +As data is being sent, the function onDataSent() is called to check & display the status of the data transmission. + +.. code-block:: c + + // Call-back for the event when data is being sent + void onDataSent (uint8_t *mac_addr, esp_now_send_status_t status) { + ESP_LOGW(TAG, "Packet send status: 0x%04X", status); + } + + ... ... ... + ... ... ... + +On the receiver device, the data is saved in the variables by the call-back function onDataReceived(). + +.. code-block:: c + + // Call-back for the event when data is being received + void onDataReceived (uint8_t *mac_addr, uint8_t *data, uint8_t data_len) { + + buf = (sensors_data_t*)data; // Allocate memory for buffer to store data being received + ESP_LOGW(TAG, "Data was received"); + ESP_LOGI(TAG, "x-axis: 0x%04x", buf->x_axis); + ESP_LOGI(TAG, "x-axis: 0x%04x", buf->y_axis); + ESP_LOGI(TAG, "PWM 1: 0x%04x", buf->motor1_rpm_pwm); + } + +The rc_send_data_task() function runs every 0.1 second to transmit the data to the receiver. + + Schematic --------- diff --git a/ESP-IDF_Robot/tutorial/docs/build/html/overview.html b/ESP-IDF_Robot/tutorial/docs/build/html/overview.html index d18811a88..8222a0c56 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/html/overview.html +++ b/ESP-IDF_Robot/tutorial/docs/build/html/overview.html @@ -184,7 +184,9 @@ full speed.

Similarly, when the joystick is pushed fully to the left or right, the X-axis voltage shifts while the Y-axis remains neutral. For a left turn, the receiver translates the signal into 100% PWM on the left-side motors and 0% on the right-side motors, causing the car to pivot. The opposite occurs for a right turn, with 100% PWM on the right and 0% on the left, enabling precise directional control.

-

The table below summarizes the reserved GPIOs.

+

The table below summarizes the reserved GPIOs. These GPIOs are hard-wired to the corresponding components, and hard-coded in the +corresponding functions. For example, the GPIOs 0 and 1 are hard-wired to the joystick x- and y- axis, respectively; and, hard-coded +to read analog values and store them in the corresponding x- and y- variables.

@@ -231,7 +233,10 @@ to pivot. The opposite occurs for a right turn, with 100% PWM on the right and 0

GPIO

-

The struct for storing motors PWM values.

+

The struct used to store motor PWM values is shown below. While the bitByteRider RC car can be effectively controlled using +just two PWM signals—one for each side—the structure is designed to hold four values, allowing room for future enhancements. This +forward-thinking design supports potential upgrades such as improved maneuverability, individual wheel control, or advanced driving +modes, making the system more adaptable and scalable for future development.

struct motors_rpm {
     int motor1_rpm_pwm;
     int motor2_rpm_pwm;
@@ -240,7 +245,8 @@ to pivot. The opposite occurs for a right turn, with 100% PWM on the right and 0
 };
 
-

The function for updating motors’ PWM values.

+

On the transmitter`` device, the PWM values for the DC motors are send to the receover using the following function. The variable +receiver_mac stores the MAC address of the receiver device (ESP32-C3 bitBoard on the RC car).

// Function to send data to the receiver
 void sendData (void) {
     sensors_data_t buffer;              // Declare data struct
@@ -272,24 +278,9 @@ to pivot. The opposite occurs for a right turn, with 100% PWM on the right and 0
 }
 
-

The onDataReceived() and onDataSent() are two call-back functions that get evoked on each corresponding event.

-
// Call-back for the event when data is being received
-void onDataReceived (uint8_t *mac_addr, uint8_t *data, uint8_t data_len) {
-
-    buf = (sensors_data_t*)data;                            // Allocate memory for buffer to store data being received
-    ESP_LOGW(TAG, "Data was received");
-    ESP_LOGI(TAG, "x-axis: 0x%04x", buf->x_axis);
-    ESP_LOGI(TAG, "x-axis: 0x%04x", buf->y_axis);
-    ESP_LOGI(TAG, "PWM 1: 0x%04x", buf->motor1_rpm_pwm);
-}
-
-// Call-back for the event when data is being sent
-void onDataSent (uint8_t *mac_addr, esp_now_send_status_t status) {
-    ESP_LOGW(TAG, "Packet send status: 0x%04X", status);
-}
-
-
-

The rc_send_data_task() function runs every 0.1 second to transmit the data to the receiver.

+

This function is invoked by a dedicated FreeRTOS task every 100 milliseconds, ensuring consistent and timely transmission of +control data to the receiver device. By leveraging FreeRTOS’s precise task scheduling, the system maintains low-latency +communication and predictable behavior—critical for real-time control in embedded applications.

// Continous, periodic task that sends data.
 static void rc_send_data_task (void *arg) {
 
@@ -301,6 +292,29 @@ to pivot. The opposite occurs for a right turn, with 100% PWM on the right and 0
 }
 
+

As data is being sent, the function onDataSent() is called to check & display the status of the data transmission.

+
// Call-back for the event when data is being sent
+void onDataSent (uint8_t *mac_addr, esp_now_send_status_t status) {
+    ESP_LOGW(TAG, "Packet send status: 0x%04X", status);
+}
+
+... ... ...
+... ... ...
+
+
+

On the receiver device, the data is saved in the variables by the call-back function onDataReceived().

+
// Call-back for the event when data is being received
+void onDataReceived (uint8_t *mac_addr, uint8_t *data, uint8_t data_len) {
+
+    buf = (sensors_data_t*)data;                            // Allocate memory for buffer to store data being received
+    ESP_LOGW(TAG, "Data was received");
+    ESP_LOGI(TAG, "x-axis: 0x%04x", buf->x_axis);
+    ESP_LOGI(TAG, "x-axis: 0x%04x", buf->y_axis);
+    ESP_LOGI(TAG, "PWM 1: 0x%04x", buf->motor1_rpm_pwm);
+}
+
+
+

The rc_send_data_task() function runs every 0.1 second to transmit the data to the receiver.

2.3. Schematic

diff --git a/ESP-IDF_Robot/tutorial/docs/build/html/searchindex.js b/ESP-IDF_Robot/tutorial/docs/build/html/searchindex.js index 3b5102743..b1c5ae6b1 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/html/searchindex.js +++ b/ESP-IDF_Robot/tutorial/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles":{"ABSTRACT":[[2,"abstract"]],"ByteRider Highlights":[[1,null]],"Chassis":[[4,"chassis"]],"Configuration Variables":[[5,"configuration-variables"],[7,"configuration-variables"]],"Controlling the Direction and Speed":[[3,"controlling-the-direction-and-speed"]],"DATA STRUCTS":[[0,null]],"Data Payload":[[0,"data-payload"]],"Finished Work":[[4,"finished-work"]],"Fusion of Software with Hardware":[[3,"fusion-of-software-with-hardware"]],"GitHub":[[6,"github"]],"HOW DOES IT WORK?":[[3,null]],"Main Function":[[5,"main-function"],[7,"main-function"]],"Motor Wires Harness":[[4,"motor-wires-harness"]],"OVERVIEW":[[2,null]],"RECEIVER":[[5,null]],"REFERENCES":[[6,null]],"Reading Joystick x- and y- Axis Values":[[7,"reading-joystick-x-and-y-axis-values"]],"Reading the Joystick x- and y- axis":[[3,"reading-the-joystick-x-and-y-axis"]],"Receiving & Extracting Data":[[5,"receiving-extracting-data"]],"Reserved Pins & GPIOs":[[3,"reserved-pins-gpios"]],"Schematic":[[3,"schematic"]],"Sending & Ecapsulating Data":[[7,"sending-ecapsulating-data"]],"TRANSMITTER":[[7,null]],"WORK-IN-PROGRESS WALK THROUGH":[[4,null]],"What is PWM?":[[3,null]],"What is encapsulation?":[[3,null]],"What is struct?":[[0,null]],"Why use __attribute((packed))?":[[0,"why-use-attribute-packed"]],"Wiring":[[4,"wiring"]]},"docnames":["data","index","intro","overview","progress","receiver","references","transmitter"],"envversion":{"sphinx":65,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["data.rst","index.rst","intro.rst","overview.rst","progress.rst","receiver.rst","references.rst","transmitter.rst"],"indexentries":{},"objects":{},"objnames":{},"objtypes":{},"terms":{"":[0,2,3],"0":[3,5],"02x":5,"04x":3,"0v":3,"0x":3,"0x14":5,"0x17":7,"0x44":7,"0x54":5,"0x63":7,"0x6e":5,"0x9c":5,"0x9e":[5,7],"0xb0":7,"0xb5":5,"0xe4":7,"1":[3,5],"100":3,"1024":3,"15":3,"16":3,"2":[3,5],"250":0,"3":[3,5],"3v":3,"4":[0,3,5],"47":3,"48":3,"5":[3,5],"50":[],"6":3,"65v":3,"7":3,"8":3,"90":3,"91":3,"95":[],"A":3,"As":[0,3],"At":2,"By":3,"For":3,"IN":1,"IT":1,"If":3,"In":[0,3],"It":[0,3],"NOT":3,"ON":[0,5,7],"On":[2,3],"The":[0,2,3],"These":[2,3],"To":[2,3],"__attribut":1,"__attribute__":[0,5,7],"__gpio6__":[],"_gitbub":[],"_static":[],"abstract":1,"across":0,"activ":3,"ad":0,"adapt":[3,6],"adc":3,"adc1_ch0":3,"adc1_ch1":3,"add":0,"addit":[0,2,3],"address":[3,7],"adjust":2,"alexandrebobkov":[3,6],"align":0,"all":0,"alloc":3,"allow":[0,2,3],"along":3,"also":3,"an":0,"analog":[0,3],"ani":[0,2,3],"app_main":[5,7],"appear":2,"appli":2,"approxim":3,"ar":[0,2,3],"architectur":[],"arg":3,"assign":[],"attribut":0,"avail":[2,3],"ax":3,"axi":[1,2],"back":3,"bacl":[],"bandwidth":0,"base":[2,3],"baselin":2,"batteri":0,"befor":3,"behavior":[],"behaviour":2,"being":3,"belong":0,"below":3,"between":[0,2,3],"binari":0,"bitboard":3,"bitbyt":3,"bitbyterid":3,"biterid":3,"bitrid":3,"blob":6,"board":[0,3],"bool":[0,5,7],"both":[2,3],"breadboard":3,"break":[],"brief":3,"buf":[3,5],"buffer":[3,7],"button":[0,3,5,7],"byte":0,"c":[0,3],"c3":[2,3],"c3_breadboard":[3,6],"call":[3,7],"can":[2,3],"capabl":[],"captur":0,"car":[2,3],"caus":3,"center":[],"centr":3,"chang":[2,3],"channel":[3,5],"chassi":1,"chip_sensor_init":7,"class":[],"clockwis":3,"code":[2,3,6],"column":[],"com":[3,6],"command":0,"commun":[0,2,3],"compact":0,"compat":0,"compil":0,"complet":[4,6],"concept":3,"configur":[0,1],"connect":[2,3],"connectionless":[2,3],"consequ":3,"consist":[],"const":5,"constraint":3,"contain":0,"content":[],"contin":3,"continu":2,"control":[0,1,2,4],"convert":[2,3],"coordin":2,"core":2,"correspond":3,"counter":3,"counterclockwis":3,"crc":3,"creativ":2,"current":[2,5],"custom":2,"customiz":2,"cycl":3,"d":5,"data":[1,2,3],"data_len":[3,5],"dc":[0,2,3,4,5,7],"ddiscret":[],"de":[],"deal":0,"decapsul":3,"declar":3,"decod":0,"decreas":3,"dedic":[],"defin":[0,2,3],"deletep":3,"deliv":3,"demonstr":2,"depend":[2,3],"descript":3,"design":[2,3,6],"desir":3,"detail":[],"determin":[0,3],"devboard":3,"develop":[2,3],"developmemt":[],"devic":[0,2,3],"diagon":3,"differ":0,"differenti":0,"digit":3,"direct":[0,1,2],"directli":2,"discret":3,"displai":3,"doe":1,"dr":3,"drive":[0,3],"due":3,"duti":3,"e":[0,3],"each":[3,7],"easili":2,"ecapsul":1,"effect":3,"effici":2,"elegantli":[],"els":3,"embed":[0,3],"emploi":2,"enabl":[0,2,3],"encapsul":[0,2],"encod":0,"encrypt":5,"end":0,"endless":2,"ensur":0,"error":3,"esp":[0,2,3,6,7],"esp32":[2,3,6],"esp_err":[5,7],"esp_err_nvs_new_version_found":[5,7],"esp_err_nvs_no_free_pag":[5,7],"esp_err_t":[5,7],"esp_error_check":[5,7],"esp_if_wifi_sta":5,"esp_log":3,"esp_logi":[3,5],"esp_logw":3,"esp_now_add_p":5,"esp_now_eth_alen":[5,7],"esp_now_init":5,"esp_now_is_peer_exist":3,"esp_now_peer_info_t":5,"esp_now_register_recv_cb":5,"esp_now_send":[3,7],"esp_now_send_status_t":3,"especi":0,"espressif":2,"essens":3,"etc":[0,2],"even":[0,2],"event":3,"everi":3,"evok":3,"evolv":[],"exact":0,"exchang":[],"exist":[],"expand":2,"expect":0,"experi":3,"extend":2,"extract":[1,2,3],"facilit":[2,3],"fals":5,"fast":2,"featur":2,"fi":[2,3],"field":0,"file":[3,6],"final":0,"fine":[0,3],"finish":1,"fix":[0,3],"flow":2,"focus":2,"follow":3,"form":2,"format":3,"forward":3,"foundat":2,"four":[0,3],"free":2,"freedom":2,"freerto":[5,7],"frequenc":3,"from":[0,3,5],"front":3,"full":3,"fulli":3,"function":[1,2,3],"fundament":3,"fusion":1,"g":0,"gain":3,"gener":3,"get":3,"github":[1,3],"github_":[],"give":2,"gpio":1,"gpio0":3,"gpio1":3,"gpio4":3,"gpio5":3,"gpio6":3,"gpio7":3,"grain":[0,3],"groundwork":3,"group":[0,3],"guid":[],"h":[5,7],"hand":3,"handl":2,"har":1,"hardwar":[0,1,2],"harn":4,"have":3,"heart":2,"hexadecim":3,"high":3,"higher":3,"hold":[0,3,7],"hood":[],"how":1,"http":[3,6],"i":2,"idea":[],"ideal":[0,2],"idf_robot":6,"idf_robot_schemat":[],"ifidx":5,"igit":[],"illustr":3,"imag":3,"implement":2,"includ":[3,5,7],"incom":2,"increas":3,"indic":[0,3],"individu":0,"inform":[0,3],"initi":[5,7],"input":[0,2,3],"insid":4,"instal":4,"instantli":2,"int":[0,3,5,7],"integr":2,"intend":0,"intern":7,"interpol":3,"interpret":[0,3],"interv":0,"introduc":3,"introduct":[],"iot":[2,3],"its":3,"itself":[],"joystic":3,"joystick":[0,1,2,5],"joystick_adc_init":7,"kei":3,"khz":3,"kicad":[3,6],"lai":3,"lastli":[],"latenc":[0,2,3],"layout":0,"led":[0,5,7],"ledc_channel_0":3,"ledc_channel_1":3,"ledc_channel_2":3,"ledc_channel_3":3,"left":3,"len":5,"length":[3,7],"let":0,"level":3,"li":[],"light":2,"lightweight":2,"like":[0,2],"limit":3,"link":2,"listen":2,"logic":0,"loop":2,"low":[0,2,3],"lower":3,"mac":[3,7],"mac_addr":[3,5],"mai":0,"main":[1,3,6],"maintain":[],"make":0,"manag":2,"maneuv":0,"master":[],"maxim":0,"maximum":3,"md":6,"mean":3,"measur":[2,3],"memcpi":5,"memori":[0,3,7],"messag":3,"microcontrol":[0,2,3],"midpoint":3,"minim":0,"modul":[2,3],"modular":2,"monitor":2,"motor":[0,1,2,3,5,7],"motor1_rpm_pcm":[],"motor1_rpm_pwm":[0,3,5,7],"motor2_rpm_pcm":[],"motor2_rpm_pwm":[0,3,5,7],"motor3_rpm_pcm":[],"motor3_rpm_pwm":[0,3,5,7],"motor4_rpm_pcm":[],"motor4_rpm_pwm":[0,3,5,7],"motors_rpm":[0,3,5],"move":3,"movement":[2,3],"multi":0,"multipl":0,"name":0,"nav_btn":7,"nav_bttn":[0,3,5],"nc":3,"need":[2,3],"network":[2,3],"neutral":3,"node":6,"nor":[],"note":3,"now":[0,2,3,7],"num":[],"number":3,"nv":[5,7],"nvs_flash":[5,7],"nvs_flash_eras":[5,7],"nvs_flash_init":[5,7],"occur":3,"off":[0,3,5,7],"often":3,"ok":3,"omni":0,"onboard":0,"ondatareceiv":[3,5],"ondatas":3,"one":3,"onli":[3,4],"oper":[0,2,3],"opposit":3,"organ":[0,3],"oscilloscop":3,"other":3,"output":3,"over":0,"overview":1,"pack":[1,2,5,7],"packag":3,"packet":[0,2,3],"pad":0,"pair":[0,2,3],"paramet":2,"pars":0,"particular":3,"payload":1,"pcb":[3,6],"peer_addr":5,"per":3,"percentag":3,"perfect":0,"period":3,"physic":2,"pin":1,"pivot":3,"platform":0,"png":[],"pointer":[3,7],"porttick_period_m":3,"posit":[0,3,5,7],"possibl":[2,3],"potentionomet":3,"power":[0,2,3],"precis":[0,3],"predefin":2,"predict":0,"process":3,"program":0,"progress":1,"project":[0,2],"proper":3,"protocol":[0,2,3],"provid":[0,2,3],"puls":[2,3],"purpos":3,"push":[0,3,5,7],"pwm":[0,2,5,7],"pwm_":[],"rang":3,"rapidli":3,"raw":[0,3],"rc":[2,3],"rc_send_data_task":3,"read":1,"readm":6,"real":[2,3],"receiv":[0,1,2,3,7],"receiver_mac":[3,7],"receov":3,"recept":3,"record":[],"refer":[1,3],"regist":3,"regul":3,"regular":0,"relat":0,"relev":0,"remain":[2,3],"remot":[0,2,3],"remov":0,"repres":0,"requir":3,"reserv":1,"resp":3,"respond":2,"respons":[0,3],"restructuredtext":[],"result":[2,3,7],"ret":[5,7],"revers":3,"rider":3,"right":3,"rise":3,"robot":0,"rotat":3,"router":2,"row":[],"run":3,"same":2,"schemat":[1,6],"seamless":[],"second":3,"secur":4,"see":[],"send":[0,1,2,3],"senddata":[3,7],"sensor":[0,2,7],"sensors_data_t":[0,3,5,7],"sent":[0,2,3],"serial":0,"serv":0,"set":3,"setup":2,"share":[],"shift":3,"short":0,"side":[2,3],"sidewai":3,"signal":[0,2,3],"similarli":3,"simul":3,"singl":0,"size":0,"sizeof":[3,5,7],"smooth":3,"so":3,"softwar":1,"sourc":[2,6],"specif":[],"speed":[0,1,2],"spin":3,"spotlight":[],"stand":3,"state":[0,3,5,7],"static":3,"statu":[0,3],"store":[2,3],"straight":3,"stream":0,"string":5,"struct":[1,3,5,7],"structur":[0,2,3],"sub":[],"suffici":[],"summar":3,"summari":3,"support":0,"switch":3,"synchron":[],"syntax":[],"system":[0,2,3],"system_led_init":[5,7],"tabl":3,"tag":[3,5],"task":3,"techniqu":3,"telemetri":[0,2],"tell":0,"temperatur":[2,7],"than":[],"them":3,"thi":[0,2,3],"those":3,"though":[],"through":1,"time":[2,3],"togeth":0,"toggl":0,"translat":[2,3],"transmiss":[0,2,3],"transmission_init":7,"transmit":[0,2,3],"transmitt":[0,1,2,3],"transmitter_mac":5,"transmitterinfo":5,"true":3,"turn":3,"tutori":2,"two":3,"type":0,"typedef":[0,5,7],"uart":0,"uint8_t":[0,3,5,7],"under":0,"understand":3,"unit":3,"up":[0,3],"updat":3,"upon":3,"us":[1,2,3],"user":[0,2],"valu":[1,2,3],"vari":2,"variabl":[0,1,3],"variou":3,"vehicl":0,"via":[2,3],"void":[3,5,7],"voltag":[2,3],"vtaskdelai":3,"wa":3,"walk":1,"walkthrough":[],"warn":0,"we":3,"well":[],"what":[],"wheel":0,"when":[0,3],"where":2,"which":[2,3],"while":[2,3],"why":1,"wi":[2,3],"width":[2,3],"wifi":5,"wifi_init":[5,7],"wildli":2,"wire":[1,3],"wireless":[2,3],"wirelessli":[2,3],"without":[2,3],"work":1,"wroom":3,"x":[0,1,2,5],"x_axi":[0,3,5,7],"y":[0,1,2,5],"y_axi":[0,3,5,7],"you":[0,2,3],"your":2},"titles":["3. DATA STRUCTS","ByteRider Highlights","1. OVERVIEW","2. HOW DOES IT WORK?","6. WORK-IN-PROGRESS WALK THROUGH","5. RECEIVER","7. REFERENCES","4. TRANSMITTER"],"titleterms":{"IN":4,"IT":3,"__attribut":0,"abstract":2,"axi":[3,7],"byterid":1,"chassi":4,"configur":[5,7],"control":3,"data":[0,5,7],"de":[],"direct":3,"document":[],"doe":3,"ecapsul":7,"encapsul":3,"extract":5,"finish":4,"function":[5,7],"fusion":3,"github":6,"gpio":3,"har":4,"hardwar":3,"highlight":1,"how":3,"i":[0,3],"introduct":[],"joystick":[3,7],"main":[5,7],"motor":4,"overview":2,"pack":0,"payload":0,"pin":3,"progress":4,"pwm":3,"read":[3,7],"receiv":5,"refer":6,"reserv":3,"schemat":3,"send":7,"softwar":3,"speed":3,"struct":0,"through":4,"transmitt":7,"us":0,"valu":7,"variabl":[5,7],"walk":4,"walkthrough":[],"what":[0,3],"why":0,"wire":4,"work":[3,4],"x":[3,7],"y":[3,7]}}) \ No newline at end of file +Search.setIndex({"alltitles":{"ABSTRACT":[[2,"abstract"]],"ByteRider Highlights":[[1,null]],"Chassis":[[4,"chassis"]],"Configuration Variables":[[5,"configuration-variables"],[7,"configuration-variables"]],"Controlling the Direction and Speed":[[3,"controlling-the-direction-and-speed"]],"DATA STRUCTS":[[0,null]],"Data Payload":[[0,"data-payload"]],"Finished Work":[[4,"finished-work"]],"Fusion of Software with Hardware":[[3,"fusion-of-software-with-hardware"]],"GitHub":[[6,"github"]],"HOW DOES IT WORK?":[[3,null]],"Main Function":[[5,"main-function"],[7,"main-function"]],"Motor Wires Harness":[[4,"motor-wires-harness"]],"OVERVIEW":[[2,null]],"RECEIVER":[[5,null]],"REFERENCES":[[6,null]],"Reading Joystick x- and y- Axis Values":[[7,"reading-joystick-x-and-y-axis-values"]],"Reading the Joystick x- and y- axis":[[3,"reading-the-joystick-x-and-y-axis"]],"Receiving & Extracting Data":[[5,"receiving-extracting-data"]],"Reserved Pins & GPIOs":[[3,"reserved-pins-gpios"]],"Schematic":[[3,"schematic"]],"Sending & Ecapsulating Data":[[7,"sending-ecapsulating-data"]],"TRANSMITTER":[[7,null]],"WORK-IN-PROGRESS WALK THROUGH":[[4,null]],"What is PWM?":[[3,null]],"What is encapsulation?":[[3,null]],"What is struct?":[[0,null]],"Why use __attribute((packed))?":[[0,"why-use-attribute-packed"]],"Wiring":[[4,"wiring"]]},"docnames":["data","index","intro","overview","progress","receiver","references","transmitter"],"envversion":{"sphinx":65,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["data.rst","index.rst","intro.rst","overview.rst","progress.rst","receiver.rst","references.rst","transmitter.rst"],"indexentries":{},"objects":{},"objnames":{},"objtypes":{},"terms":{"":[0,2,3],"0":[3,5],"02x":5,"04x":3,"0v":3,"0x":3,"0x14":5,"0x17":7,"0x44":7,"0x54":5,"0x63":7,"0x6e":5,"0x9c":5,"0x9e":[5,7],"0xb0":7,"0xb5":5,"0xe4":7,"1":[3,5],"100":3,"1024":3,"15":3,"16":3,"2":[3,5],"250":0,"3":[3,5],"3v":3,"4":[0,3,5],"47":3,"48":3,"5":[3,5],"50":[],"6":3,"65v":3,"7":3,"8":3,"90":3,"91":3,"95":[],"A":3,"As":[0,3],"At":2,"By":3,"For":3,"IN":1,"IT":1,"If":3,"In":[0,3],"It":[0,3],"NOT":3,"ON":[0,5,7],"On":[2,3],"The":[0,2,3],"These":[2,3],"To":[2,3],"__attribut":1,"__attribute__":[0,5,7],"__gpio6__":[],"_gitbub":[],"_static":[],"abstract":1,"across":0,"activ":3,"ad":0,"adapt":[3,6],"adc":3,"adc1_ch0":3,"adc1_ch1":3,"add":0,"addit":[0,2,3],"address":[3,7],"adjust":2,"advanc":3,"alexandrebobkov":[3,6],"align":0,"all":0,"alloc":3,"allow":[0,2,3],"along":3,"also":3,"an":0,"analog":[0,3],"ani":[0,2,3],"app_main":[5,7],"appear":2,"appli":2,"applic":3,"approxim":3,"ar":[0,2,3],"architectur":[],"arg":3,"assign":[],"attribut":0,"avail":[2,3],"ax":3,"axi":[1,2],"back":3,"bacl":[],"bandwidth":0,"base":[2,3],"baselin":2,"batteri":0,"befor":3,"behavior":3,"behaviour":2,"being":3,"belong":0,"below":3,"between":[0,2,3],"binari":0,"bitboard":3,"bitbyt":3,"bitbyterid":3,"biterid":3,"bitrid":3,"blob":6,"board":[0,3],"bool":[0,5,7],"both":[2,3],"breadboard":3,"break":[],"brief":3,"buf":[3,5],"buffer":[3,7],"button":[0,3,5,7],"byte":0,"c":[0,3],"c3":[2,3],"c3_breadboard":[3,6],"call":[3,7],"can":[2,3],"capabl":[],"captur":0,"car":[2,3],"caus":3,"center":[],"centr":3,"chang":[2,3],"channel":[3,5],"chassi":1,"check":3,"chip_sensor_init":7,"class":[],"clockwis":3,"code":[2,3,6],"column":[],"com":[3,6],"command":0,"commun":[0,2,3],"compact":0,"compat":0,"compil":0,"complet":[4,6],"compon":3,"concept":3,"configur":[0,1],"connect":[2,3],"connectionless":[2,3],"consequ":3,"consist":3,"const":5,"constraint":3,"contain":0,"content":[],"contin":3,"continu":2,"control":[0,1,2,4],"convert":[2,3],"coordin":2,"core":2,"correspond":3,"counter":3,"counterclockwis":3,"crc":3,"creativ":2,"critic":3,"current":[2,5],"custom":2,"customiz":2,"cycl":3,"d":5,"data":[1,2,3],"data_len":[3,5],"dc":[0,2,3,4,5,7],"ddiscret":[],"de":[],"deal":0,"decapsul":3,"declar":3,"decod":0,"decreas":3,"dedic":3,"defin":[0,2,3],"deletep":3,"deliv":3,"demonstr":2,"depend":[2,3],"descript":3,"design":[2,3,6],"desir":3,"detail":[],"determin":[0,3],"devboard":3,"develop":[2,3],"developmemt":[],"devic":[0,2,3],"diagon":3,"differ":0,"differenti":0,"digit":3,"direct":[0,1,2],"directli":2,"discret":3,"displai":3,"doe":1,"dr":3,"drive":[0,3],"due":3,"duti":3,"e":[0,3],"each":[3,7],"easili":2,"ecapsul":1,"effect":3,"effici":2,"elegantli":[],"els":3,"embed":[0,3],"emploi":2,"enabl":[0,2,3],"encapsul":[0,2],"encod":0,"encrypt":5,"end":0,"endless":2,"enhanc":3,"ensur":[0,3],"error":3,"esp":[0,2,3,6,7],"esp32":[2,3,6],"esp_err":[5,7],"esp_err_nvs_new_version_found":[5,7],"esp_err_nvs_no_free_pag":[5,7],"esp_err_t":[5,7],"esp_error_check":[5,7],"esp_if_wifi_sta":5,"esp_log":3,"esp_logi":[3,5],"esp_logw":3,"esp_now_add_p":5,"esp_now_eth_alen":[5,7],"esp_now_init":5,"esp_now_is_peer_exist":3,"esp_now_peer_info_t":5,"esp_now_register_recv_cb":5,"esp_now_send":[3,7],"esp_now_send_status_t":3,"especi":0,"espressif":2,"essens":3,"etc":[0,2],"even":[0,2],"event":3,"everi":3,"evok":[],"evolv":[],"exact":0,"exampl":3,"exchang":[],"exist":[],"expand":2,"expect":0,"experi":3,"extend":2,"extract":[1,2,3],"facilit":[2,3],"fals":5,"fast":2,"featur":2,"fi":[2,3],"field":0,"file":[3,6],"final":0,"fine":[0,3],"finish":1,"fix":[0,3],"flow":2,"focus":2,"follow":3,"form":2,"format":3,"forward":3,"foundat":2,"four":[0,3],"free":2,"freedom":2,"freerto":[3,5,7],"frequenc":3,"from":[0,3,5],"front":3,"full":3,"fulli":3,"function":[1,2,3],"fundament":3,"fusion":1,"futur":3,"g":0,"gain":3,"gener":3,"get":[],"github":[1,3],"github_":[],"give":2,"gpio":1,"gpio0":3,"gpio1":3,"gpio4":3,"gpio5":3,"gpio6":3,"gpio7":3,"grain":[0,3],"groundwork":3,"group":[0,3],"guid":[],"h":[5,7],"hand":3,"handl":2,"har":1,"hard":3,"hardwar":[0,1,2],"harn":4,"have":3,"heart":2,"hexadecim":3,"high":3,"higher":3,"hold":[0,3,7],"hood":[],"how":1,"http":[3,6],"i":2,"idea":[],"ideal":[0,2],"idf_robot":6,"idf_robot_schemat":[],"ifidx":5,"igit":[],"illustr":3,"imag":3,"implement":2,"improv":3,"includ":[3,5,7],"incom":2,"increas":3,"indic":[0,3],"individu":[0,3],"inform":[0,3],"initi":[5,7],"input":[0,2,3],"insid":4,"instal":4,"instantli":2,"int":[0,3,5,7],"integr":2,"intend":0,"intern":7,"interpol":3,"interpret":[0,3],"interv":0,"introduc":3,"introduct":[],"invok":3,"iot":[2,3],"its":3,"itself":[],"joystic":3,"joystick":[0,1,2,5],"joystick_adc_init":7,"just":3,"kei":3,"khz":3,"kicad":[3,6],"lai":3,"lastli":[],"latenc":[0,2,3],"layout":0,"led":[0,5,7],"ledc_channel_0":3,"ledc_channel_1":3,"ledc_channel_2":3,"ledc_channel_3":3,"left":3,"len":5,"length":[3,7],"let":0,"level":3,"leverag":3,"li":[],"light":2,"lightweight":2,"like":[0,2],"limit":3,"link":2,"listen":2,"logic":0,"loop":2,"low":[0,2,3],"lower":3,"mac":[3,7],"mac_addr":[3,5],"mai":0,"main":[1,3,6],"maintain":3,"make":[0,3],"manag":2,"maneuv":0,"maneuver":3,"master":[],"maxim":0,"maximum":3,"md":6,"mean":3,"measur":[2,3],"memcpi":5,"memori":[0,3,7],"messag":3,"microcontrol":[0,2,3],"midpoint":3,"millisecond":3,"minim":0,"mode":3,"modul":[2,3],"modular":2,"monitor":2,"more":3,"motor":[0,1,2,3,5,7],"motor1_rpm_pcm":[],"motor1_rpm_pwm":[0,3,5,7],"motor2_rpm_pcm":[],"motor2_rpm_pwm":[0,3,5,7],"motor3_rpm_pcm":[],"motor3_rpm_pwm":[0,3,5,7],"motor4_rpm_pcm":[],"motor4_rpm_pwm":[0,3,5,7],"motors_rpm":[0,3,5],"move":3,"movement":[2,3],"multi":0,"multipl":0,"name":0,"nav_btn":7,"nav_bttn":[0,3,5],"nc":3,"need":[2,3],"network":[2,3],"neutral":3,"node":6,"nor":[],"note":3,"now":[0,2,3,7],"num":[],"number":3,"nv":[5,7],"nvs_flash":[5,7],"nvs_flash_eras":[5,7],"nvs_flash_init":[5,7],"occur":3,"off":[0,3,5,7],"often":3,"ok":3,"omni":0,"onboard":0,"ondatareceiv":[3,5],"ondatas":3,"one":3,"onli":[3,4],"oper":[0,2,3],"opposit":3,"organ":[0,3],"oscilloscop":3,"other":3,"output":3,"over":0,"overview":1,"pack":[1,2,5,7],"packag":3,"packet":[0,2,3],"pad":0,"pair":[0,2,3],"paramet":2,"pars":0,"particular":3,"payload":1,"pcb":[3,6],"peer_addr":5,"per":3,"percentag":3,"perfect":0,"period":3,"physic":2,"pin":1,"pivot":3,"platform":0,"png":[],"pointer":[3,7],"porttick_period_m":3,"posit":[0,3,5,7],"possibl":[2,3],"potenti":3,"potentionomet":3,"power":[0,2,3],"precis":[0,3],"predefin":2,"predict":[0,3],"process":3,"program":0,"progress":1,"project":[0,2],"proper":3,"protocol":[0,2,3],"provid":[0,2,3],"puls":[2,3],"purpos":3,"push":[0,3,5,7],"pwm":[0,2,5,7],"pwm_":[],"rang":3,"rapidli":3,"raw":[0,3],"rc":[2,3],"rc_send_data_task":3,"read":1,"readm":6,"real":[2,3],"receiv":[0,1,2,3,7],"receiver_mac":[3,7],"receov":3,"recept":3,"record":[],"refer":[1,3],"regist":3,"regul":3,"regular":0,"relat":0,"relev":0,"remain":[2,3],"remot":[0,2,3],"remov":0,"repres":0,"requir":3,"reserv":1,"resp":3,"respect":3,"respond":2,"respons":[0,3],"restructuredtext":[],"result":[2,3,7],"ret":[5,7],"revers":3,"rider":3,"right":3,"rise":3,"robot":0,"room":3,"rotat":3,"router":2,"row":[],"run":3,"same":2,"save":3,"scalabl":3,"schedul":3,"schemat":[1,6],"seamless":[],"second":3,"secur":4,"see":[],"send":[0,1,2,3],"senddata":[3,7],"sensor":[0,2,7],"sensors_data_t":[0,3,5,7],"sent":[0,2,3],"serial":0,"serv":0,"set":3,"setup":2,"share":[],"shift":3,"short":0,"shown":3,"side":[2,3],"sidewai":3,"signal":[0,2,3],"similarli":3,"simul":3,"singl":0,"size":0,"sizeof":[3,5,7],"smooth":3,"so":3,"softwar":1,"sourc":[2,6],"specif":[],"speed":[0,1,2],"spin":3,"spotlight":[],"stand":3,"state":[0,3,5,7],"static":3,"statu":[0,3],"store":[2,3],"straight":3,"stream":0,"string":5,"struct":[1,3,5,7],"structur":[0,2,3],"sub":[],"suffici":[],"summar":3,"summari":3,"support":[0,3],"switch":3,"synchron":[],"syntax":[],"system":[0,2,3],"system_led_init":[5,7],"tabl":3,"tag":[3,5],"task":3,"techniqu":3,"telemetri":[0,2],"tell":0,"temperatur":[2,7],"than":[],"them":3,"thi":[0,2,3],"think":3,"those":3,"though":[],"through":1,"time":[2,3],"togeth":0,"toggl":0,"translat":[2,3],"transmiss":[0,2,3],"transmission_init":7,"transmit":[0,2,3],"transmitt":[0,1,2,3],"transmitter_mac":5,"transmitterinfo":5,"true":3,"turn":3,"tutori":2,"two":3,"type":0,"typedef":[0,5,7],"uart":0,"uint8_t":[0,3,5,7],"under":0,"understand":3,"unit":3,"up":[0,3],"updat":[],"upgrad":3,"upon":3,"us":[1,2,3],"user":[0,2],"valu":[1,2,3],"vari":2,"variabl":[0,1,3],"variou":3,"vehicl":0,"via":[2,3],"void":[3,5,7],"voltag":[2,3],"vtaskdelai":3,"wa":3,"walk":1,"walkthrough":[],"warn":0,"we":3,"well":[],"what":[],"wheel":[0,3],"when":[0,3],"where":2,"which":[2,3],"while":[2,3],"why":1,"wi":[2,3],"width":[2,3],"wifi":5,"wifi_init":[5,7],"wildli":2,"wire":[1,3],"wireless":[2,3],"wirelessli":[2,3],"without":[2,3],"work":1,"wroom":3,"x":[0,1,2,5],"x_axi":[0,3,5,7],"y":[0,1,2,5],"y_axi":[0,3,5,7],"you":[0,2,3],"your":2},"titles":["3. DATA STRUCTS","ByteRider Highlights","1. OVERVIEW","2. HOW DOES IT WORK?","6. WORK-IN-PROGRESS WALK THROUGH","5. RECEIVER","7. REFERENCES","4. TRANSMITTER"],"titleterms":{"IN":4,"IT":3,"__attribut":0,"abstract":2,"axi":[3,7],"byterid":1,"chassi":4,"configur":[5,7],"control":3,"data":[0,5,7],"de":[],"direct":3,"document":[],"doe":3,"ecapsul":7,"encapsul":3,"extract":5,"finish":4,"function":[5,7],"fusion":3,"github":6,"gpio":3,"har":4,"hardwar":3,"highlight":1,"how":3,"i":[0,3],"introduct":[],"joystick":[3,7],"main":[5,7],"motor":4,"overview":2,"pack":0,"payload":0,"pin":3,"progress":4,"pwm":3,"read":[3,7],"receiv":5,"refer":6,"reserv":3,"schemat":3,"send":7,"softwar":3,"speed":3,"struct":0,"through":4,"transmitt":7,"us":0,"valu":7,"variabl":[5,7],"walk":4,"walkthrough":[],"what":[0,3],"why":0,"wire":4,"work":[3,4],"x":[3,7],"y":[3,7]}}) \ No newline at end of file diff --git a/ESP-IDF_Robot/tutorial/docs/source/overview.rst b/ESP-IDF_Robot/tutorial/docs/source/overview.rst index 37bbac550..6cc9c5976 100644 --- a/ESP-IDF_Robot/tutorial/docs/source/overview.rst +++ b/ESP-IDF_Robot/tutorial/docs/source/overview.rst @@ -215,6 +215,22 @@ On the transmitter`` device, the PWM values for the DC motors are send to the re ESP_LOGW("ESP-NOW", "Data was sent."); } +This function is invoked by a dedicated FreeRTOS task every 100 milliseconds, ensuring consistent and timely transmission of +control data to the receiver device. By leveraging FreeRTOS's precise task scheduling, the system maintains low-latency +communication and predictable behavior—critical for real-time control in embedded applications. + +.. code-block:: c + + // Continous, periodic task that sends data. + static void rc_send_data_task (void *arg) { + + while (true) { + if (esp_now_is_peer_exist(receiver_mac)) + sendData(); + vTaskDelay (100 / portTICK_PERIOD_MS); + } + } + As data is being sent, the function onDataSent() is called to check & display the status of the data transmission. .. code-block:: c @@ -243,17 +259,6 @@ On the receiver device, the data is saved in the variables by the call-back func The rc_send_data_task() function runs every 0.1 second to transmit the data to the receiver. -.. code-block:: c - - // Continous, periodic task that sends data. - static void rc_send_data_task (void *arg) { - - while (true) { - if (esp_now_is_peer_exist(receiver_mac)) - sendData(); - vTaskDelay (100 / portTICK_PERIOD_MS); - } - } Schematic ---------