From a281f3869be3d1ccd5dc868c05c04a40ef64d286 Mon Sep 17 00:00:00 2001 From: Alexandre Bobkov Date: Mon, 21 Jul 2025 02:31:59 -0400 Subject: [PATCH] RC Robot Tutorial --- .../docs/build/doctrees/environment.pickle | Bin 29127 -> 29019 bytes .../docs/build/doctrees/overview.doctree | Bin 37316 -> 41261 bytes .../docs/build/html/_sources/overview.rst.txt | 25 ++++++++++++- .../tutorial/docs/build/html/overview.html | 19 +++++++++- .../tutorial/docs/build/html/searchindex.js | 2 +- .../tutorial/docs/build/simplepdf/.buildinfo | 2 +- .../tutorial/docs/build/simplepdf/index.html | 35 +++++++++++++++++- 7 files changed, 75 insertions(+), 8 deletions(-) diff --git a/ESP-IDF_Robot/tutorial/docs/build/doctrees/environment.pickle b/ESP-IDF_Robot/tutorial/docs/build/doctrees/environment.pickle index 000a02ce7dc98e7dbc5f373cdf7402418f1eedb8..bda05bf72ac063c3fd862961c33d16cf15ee2d8e 100644 GIT binary patch delta 1791 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 Lqt@(s@fP(j2XX5j diff --git a/ESP-IDF_Robot/tutorial/docs/build/doctrees/overview.doctree b/ESP-IDF_Robot/tutorial/docs/build/doctrees/overview.doctree index fb58f26cd46e76d11ad3d85f8b6fe4858b705837..f3b301d700f0acdb71ffbde7680ceb064551515c 100644 GIT binary patch delta 9003 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 XTtcrn32}!obbP~V+Ng5cxwqv%KbE8B delta 5715 zcmbW5e^6A{6~}Wg`<8tRDA*#x@?$p(f$&Ryh%&}sL{mjXz)ciIMHKY;6a;Zi)KD;L zMk1+_v!q(bs7a<{J4q9}iON)s+DzNA*7$2;)zoMb({`$3lKLa#jGdl)-@ae!?qu`N z+qdt0?m6ds-@W(T``$f9KYoh}T|!@f?_S|ABI$;c;zYV)8SIX7L5Y38#rZ{-4{q37 z$s#x{PEaiSEYak#$DqQ#TQT2{-V1k$?oiD}r2+oF_Jxmn9|1j2=yjRT5i|O&@Gw zJha9X2@XVTuqA!v08_$=Jd=`)Ix?MS;xT8E=0B4$i_k^_4IPOvF|(d5WdVex=&cbh zWFEFOssUX1$m2hgwTaO63jRWN73tCN^>8oyqGi2`r*nK@?h-=Y<~bjkY!jFc4}6%n zA@(54BT4SZAMbqm5P{Z)66nkqM9l!N=D$X+s!grANM9zqk;4@)CEH1Jo(xLrK1sP!>ZE}l_(yr1B|RJc-W8$i8M zw!B|?`~iPSw%;rNJbp6#0HvoW#HHp(D^son(>X!?w@Wuu`UNxOvWY@3Q~!ad>Zs*1 zCdVd#bp+?2YRstEL-~*1el1K1ZxMkdg3cA2(IXt1o z!aOm>@P3|!c>If=aTB^G0$f9fl|IeXvaZAx3#XMIZ_UG7KJd_^EW_+mr)3ZClz<^V zlD)6Myfj-fgIQwiMhgs?Mzfs-ze0L;MA4{86*-4%S(i3u*)n!rnqf^h2kI_txba~g%(?29QQLfrTZ}#L<9QI zKB5~#2;5eYM+$hjiRdGbg;N)jY>U2-3?~ycXhJZ^0soy+Pv&Z1U2yPHrJHy)aJf-s zHtei%tE*wAl0ygqf0~*{`nadbDBv|?$jv4J?`Y6(f&RyUJBYT%LJ;NTiJxu}8X zjRH1@CtzDeG{j7Ek$c=*C5pIf413Ecg2oAKHdz@pKrogZBj$i3(+9(0PXSD=j)a&Q z?0zK8(wk<4Xo`zB9jl|GII51oTj5Dt_*@>XSA11t#gdHi&A7U07%^@@>9uUd1gN~$ilf8?J>6<#aGdNi(XV89~+-FqM5~h-oOA_b>#aA;b`P3NotVzj5B)`$g z8^OudOGnd48?RH$r^RL*)MlsSniFZNjygE1zLm3KYH_tB&@qa$Wf=D?YEQ&Z76Y< zDVZH6iMQJlXupo`3xW16Z>Ohp^lu^1y4C@(v)xVqspDUnWbO!8<_yeQl{w5HGg9Ou zsGW@<(Kv#LXnd17-UOPWqe&sqzk1ivVLDnE0%bC2zmM+5vH^*3zvy+7|+KtS+SQ>F7HqK}}qcdO)`F zsiz*0n^`$v2jmzruq~2#NwBGBV_3AN)BJHK4eqX)M+V_1o_2au#Qje}>~&OW_|mir zVmhYL`yzhc8ASyLBA zic7I;`+*M5!O70`w8+kePVCG4i4qhyLaF|(T_Z&@j`=82d@x6O=%QQB$E!S)T?+8h z;bXf1gY%6_5?QZU2(41Q?|IPs@=ehKne$`3|5i!;+?FeJsp9+(4?4fs`#mA6e~j}( ziu2y|pFo{&30cLzx?S^SQXlK{g7{w4Yj`ckv8Qm8>FL|>gmIJkE>aI}aZjMr#!_=b;GN8wP*w1MH2I_)##Nvr?AQmt%fjcorv4v!=!pCP diff --git a/ESP-IDF_Robot/tutorial/docs/build/html/_sources/overview.rst.txt b/ESP-IDF_Robot/tutorial/docs/build/html/_sources/overview.rst.txt index b81fdf9cb..47f5d5f46 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/html/_sources/overview.rst.txt +++ b/ESP-IDF_Robot/tutorial/docs/build/html/_sources/overview.rst.txt @@ -8,9 +8,30 @@ The bitByteRider RC car operates using two main units: the *transmitter*, which the *receiver*, which interprets these values and converts them into PWM signals to control the DC motors. Both units communicate via **ESP-NOW**, a low-latency, connectionless wireless protocol that requires no Wi-Fi network or pairing. -In addition to enabling real-time control, using ESP-NOW introduces to key networking concepts such as **data encapsulation** and +In addition to enabling real-time control, using ESP-NOW introduces key networking concepts such as **data encapsulation** and structured communication. By using data structures to group control variables, you gain hands-on experience with how information -is packaged and transmitted — laying the groundwork for understanding the fundamentals of network communication in embedded systems. +is packaged and transmitted, laying the groundwork for understanding the fundamentals of network communication in embedded systems. + +The joystick used in the bitByteRider RC car remote unit outputs analog voltages ranging from 0V to 3.3V on both the x- and y- axes, +depending on the position of the joystick. These voltage levels are read by the ESP32-C3's ADC (Analog-to-Digital Converter) inputs. + +When the joystick is in its neutral (centered) position, the ADC inputs on the ESP32-C3 receive approximately 1.65V on both axes. +This midpoint voltage is interpreted and interpolated into a PWM (Pulse Width Modulation) value of 0, indicating no movement or +motor activity. + +As the joystick is pushed to its maximum positions along the x- and y- axis, the voltage increases up to 3.3V. This maximum voltage +is interpolated to a PWM value of 1024, which corresponds to a 100% duty cycle on the receiver side—resulting in full-speed +operation of the DC motors. + +To transmit control data, the X and Y axis values are encapsulated in a C struct, along with the receiver's **MAC** address, and sent +wirelessly using ESP-NOW. This protocol enables low-latency, connectionless communication between the transmitter and receiver +without requiring a Wi-Fi network or pairing. + +Upon reception, the RC car's receiver decapsulates the data, extracts the joystick values, and interpolates them into PWM +signals. These signals are then used to control the rotation speeds of the DC motors, enabling smooth and responsive remote control. + +This process not only facilitates real-time control but also introduces you to key networking concepts such as data +encapsulation, data structs, and the fundamentals of wireless data transmission in embedded systems. .. _GitHub: https://github.com/alexandrebobkov/ESP32-C3_Breadboard-Adapter diff --git a/ESP-IDF_Robot/tutorial/docs/build/html/overview.html b/ESP-IDF_Robot/tutorial/docs/build/html/overview.html index b62403f7b..8fdf1a907 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/html/overview.html +++ b/ESP-IDF_Robot/tutorial/docs/build/html/overview.html @@ -40,9 +40,24 @@ on

2.1. Reserved Pins & GPIOs

The following table summarizes GPIOs and pins reserved for operations purposes.

diff --git a/ESP-IDF_Robot/tutorial/docs/build/html/searchindex.js b/ESP-IDF_Robot/tutorial/docs/build/html/searchindex.js index 1b0eb20bc..8f462356e 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 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,"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,"15":3,"16":3,"2":[3,5],"250":0,"3":[3,5],"4":[0,3,5],"47":3,"48":3,"5":[3,5],"50":[],"6":3,"7":3,"8":3,"90":3,"91":3,"95":[],"A":3,"As":0,"At":2,"By":3,"IN":1,"IT":1,"If":3,"In":[0,3],"It":[0,3],"NOT":3,"ON":[0,5,7],"On":2,"The":[0,2,3],"These":2,"To":[2,3],"__attribut":1,"__attribute__":[0,5,7],"__gpio6__":[],"_gitbub":[],"_static":[],"abstract":1,"across":0,"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],"an":0,"analog":[0,3],"ani":[0,2,3],"app_main":[5,7],"appear":2,"appli":2,"ar":[0,2,3],"architectur":[],"arg":3,"assign":[],"attribut":0,"avail":[2,3],"axi":[1,2],"back":3,"bacl":[],"bandwidth":0,"base":[2,3],"baselin":2,"batteri":0,"behavior":[],"behaviour":2,"being":3,"belong":0,"below":3,"between":[0,2,3],"binari":0,"bitboard":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,"c3":[2,3],"c3_breadboard":[3,6],"call":[3,7],"can":[2,3],"capabl":[],"captur":0,"car":[2,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,"declar":3,"decod":0,"decreas":3,"dedic":[],"defin":[0,2,3],"deletep":3,"deliv":3,"demonstr":2,"depend":2,"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,"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,3],"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,"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],"facilit":2,"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,"forward":3,"foundat":2,"four":[0,3],"free":2,"freedom":2,"freerto":[5,7],"frequenc":3,"from":[0,5],"front":3,"function":[1,2,3],"fundament":3,"fusion":1,"g":0,"gain":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,"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":[5,7],"incom":2,"increas":3,"indic":0,"individu":0,"inform":[0,3],"initi":[5,7],"input":[0,2],"insid":4,"instal":4,"instantli":2,"int":[0,3,5,7],"integr":2,"intend":0,"intern":7,"interpret":[0,3],"interv":0,"introduc":3,"introduct":[],"iot":2,"itself":[],"joystic":[],"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,"md":6,"mean":3,"measur":[2,3],"memcpi":5,"memori":[0,3,7],"messag":3,"microcontrol":[0,2,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],"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],"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],"organ":0,"oscilloscop":3,"other":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,"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,"predefin":2,"predict":0,"program":0,"progress":1,"project":[0,2],"protocol":[0,2,3],"provid":[0,2,3],"puls":[2,3],"purpos":3,"push":[0,3,5,7],"pwm":[0,2,5,7],"pwm_":[],"rapidli":3,"raw":0,"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],"record":[],"refer":1,"regist":3,"regul":3,"regular":0,"relat":0,"relev":0,"remain":2,"remot":[0,2,3],"remov":0,"repres":0,"requir":3,"reserv":1,"resp":3,"respond":2,"respons":0,"restructuredtext":[],"result":[2,3,7],"ret":[5,7],"revers":3,"right":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":[],"short":0,"side":[2,3],"sidewai":3,"signal":[0,2,3],"similarli":3,"simul":3,"singl":0,"size":0,"sizeof":[3,5,7],"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,"transmiss":[0,2],"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,"updat":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,"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,"wireless":[2,3],"wirelessli":2,"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":[],"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 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,"IN":1,"IT":1,"If":3,"In":[0,3],"It":[0,3],"NOT":3,"ON":[0,5,7],"On":2,"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,"behavior":[],"behaviour":2,"being":3,"belong":0,"below":3,"between":[0,2,3],"binari":0,"bitboard":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],"center":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,"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,3],"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,"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,"forward":3,"foundat":2,"four":[0,3],"free":2,"freedom":2,"freerto":[5,7],"frequenc":3,"from":[0,3,5],"front":3,"full":3,"function":[1,2,3],"fundament":3,"fusion":1,"g":0,"gain":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,"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":[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,"its":3,"itself":[],"joystic":[],"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],"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],"organ":0,"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,"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,"predefin":2,"predict":0,"process":3,"program":0,"progress":1,"project":[0,2],"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,"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],"recept":3,"record":[],"refer":1,"regist":3,"regul":3,"regular":0,"relat":0,"relev":0,"remain":2,"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,"right":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":[],"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,"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,"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,"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,"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":[],"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/build/simplepdf/.buildinfo b/ESP-IDF_Robot/tutorial/docs/build/simplepdf/.buildinfo index 2c26b1ec5..b49c6584d 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/simplepdf/.buildinfo +++ b/ESP-IDF_Robot/tutorial/docs/build/simplepdf/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file records the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 0b5a77bec177eb5b905112e37424ee08 +config: 1b0f247f006ad819fe4712b6cd6c081e tags: 62a1e7829a13fc7881b6498c52484ec0 diff --git a/ESP-IDF_Robot/tutorial/docs/build/simplepdf/index.html b/ESP-IDF_Robot/tutorial/docs/build/simplepdf/index.html index 84aa7c556..2bc5eb66f 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/simplepdf/index.html +++ b/ESP-IDF_Robot/tutorial/docs/build/simplepdf/index.html @@ -316,13 +316,44 @@ via , a low-latency, connectionless wireless protocol that requires no Wi-Fi network or pairing.

- In addition to enabling real-time control, using ESP-NOW introduces to key networking concepts such as + In addition to enabling real-time control, using ESP-NOW introduces key networking concepts such as data encapsulation and structured communication. By using data structures to group control variables, you gain hands-on experience with how information -is packaged and transmitted — laying the groundwork for understanding the fundamentals of network communication in embedded systems. +is packaged and transmitted, laying the groundwork for understanding the fundamentals of network communication in embedded systems. +

+

+ The joystick used in the bitByteRider RC car remote unit outputs analog voltages ranging from 0V to 3.3V on both the x- and y- axes, +depending on the position of the joystick. These voltage levels are read by the ESP32-C3’s ADC (Analog-to-Digital Converter) inputs. +

+

+ When the joystick is in its neutral (centered) position, the ADC inputs on the ESP32-C3 receive approximately 1.65V on both axes. +This midpoint voltage is interpreted and interpolated into a PWM (Pulse Width Modulation) value of 0, indicating no movement or +motor activity. +

+

+ As the joystick is pushed to its maximum positions along the x- and y- axis, the voltage increases up to 3.3V. This maximum voltage +is interpolated to a PWM value of 1024, which corresponds to a 100% duty cycle on the receiver side—resulting in full-speed +operation of the DC motors. +

+

+ To transmit control data, the X and Y axis values are encapsulated in a C struct, along with the receiver’s + + MAC + + address, and sent +wirelessly using ESP-NOW. This protocol enables low-latency, connectionless communication between the transmitter and receiver +without requiring a Wi-Fi network or pairing. +

+

+ Upon reception, the RC car’s receiver decapsulates the data, extracts the joystick values, and interpolates them into PWM +signals. These signals are then used to control the rotation speeds of the DC motors, enabling smooth and responsive remote control. +

+

+ This process not only facilitates real-time control but also introduces you to key networking concepts such as data +encapsulation, data structs, and the fundamentals of wireless data transmission in embedded systems.