From aac6a1928f8ce0eec1877eddeeef1d7d87b58acb Mon Sep 17 00:00:00 2001 From: Alexandre Bobkov Date: Sat, 5 Jul 2025 18:50:49 -0400 Subject: [PATCH] manual --- .../docs/build/doctrees/environment.pickle | Bin 26313 -> 26245 bytes .../docs/build/doctrees/receiver.doctree | Bin 6161 -> 7387 bytes .../docs/build/doctrees/transmitter.doctree | Bin 6442 -> 6626 bytes .../docs/build/html/_sources/receiver.rst.txt | 30 +++++++++++- .../build/html/_sources/transmitter.rst.txt | 10 ++++ .../tutorial/docs/build/html/receiver.html | 32 ++++++++++++- .../tutorial/docs/build/html/searchindex.js | 2 +- .../tutorial/docs/build/html/transmitter.html | 12 ++++- .../tutorial/docs/build/simplepdf/.buildinfo | 2 +- .../tutorial/docs/build/simplepdf/index.html | 44 ++++++++++++++++-- .../tutorial/docs/source/receiver.rst | 30 +++++++++++- 11 files changed, 152 insertions(+), 10 deletions(-) diff --git a/ESP-IDF_Robot/tutorial/docs/build/doctrees/environment.pickle b/ESP-IDF_Robot/tutorial/docs/build/doctrees/environment.pickle index 7f659f0d099231b2897539f35116c5a726ef09e3..2be6e34d7c8c7268ffb947fd5ebbf3446643770f 100644 GIT binary patch literal 26245 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 diff --git a/ESP-IDF_Robot/tutorial/docs/build/doctrees/receiver.doctree b/ESP-IDF_Robot/tutorial/docs/build/doctrees/receiver.doctree index 8e4ea0586d3691a2d95dbb423c9926ec9f1e9798..7c22fae9a768da72315784b044578c643c8e6f74 100644 GIT binary patch delta 1405 zcmbPeaNCl#fpzKynT@QDOso;YObiT@J(vRPxwuLy3sO^3(-ewJib|796soxtfFLuk z1Vn*BMSNmKX0bJl3#Rq;6}<8*i%T+-vlS|I3-XIIOEUBGFtk<@&{|oKsy8V=KL=({ zUSe5%Qb|c3vc<^O7L*oeC?u7ZltAr8)|-=>f~*bZWFJ=-1%E$%e>XRvZxc&WxfJSw zQl&u8TEs*Ao10&fUt}0xRFE5AP@W4h188YLxNosST7Hp&iGqu>0$5Qo*s~aVjo^B* z%NwK02Vxjtf>2Pa5FejdQc{!&^kr&%yoN?WVsdtBil(MQacW+1eo=9JN@7W3e2Mjx z4EES58KR@HI!I#Gg&MKC`4iI=Mt5aX8l?zMS$cYU3Q&x} zpB%{cU)P!oLmZS3koDEV5)KLGDiJn!asayvqvYhN>~)Odle-z^CL3{N@oS@aWZ7g! zo@8-kw;-`6^KeQK_T=VDo-0h+#QTw2Rw@v(ai_@% diff --git a/ESP-IDF_Robot/tutorial/docs/build/doctrees/transmitter.doctree b/ESP-IDF_Robot/tutorial/docs/build/doctrees/transmitter.doctree index 283e6b96a65525c381a7b32f63ff126d435c105d..93b799cf3649e9825fd848270c156aac9f569329 100644 GIT binary patch delta 138 zcmZ2w^vIZ{fpzNjjV!J_j0uyyc>LA$^z;;r~c;6 YJaZW*r*LYKty6jOA1=<#*#i4H05>=%CjbBd delta 57 zcmaE4yvm5Bfpx0 B6A%CZ diff --git a/ESP-IDF_Robot/tutorial/docs/build/html/_sources/receiver.rst.txt b/ESP-IDF_Robot/tutorial/docs/build/html/_sources/receiver.rst.txt index caed557f2..a91b8d5d0 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/html/_sources/receiver.rst.txt +++ b/ESP-IDF_Robot/tutorial/docs/build/html/_sources/receiver.rst.txt @@ -8,17 +8,35 @@ Configuration Variables uint8_t transmitter_mac[ESP_NOW_ETH_ALEN] = {0x9C, 0x9E, 0x6E, 0x14, 0xB5, 0x54}; + typedef struct { + int x_axis; // Joystick x-position + int y_axis; // Joystick y-position + bool nav_bttn; // Joystick push button + bool led; // LED ON/OFF state + uint8_t motor1_rpm_pwm; // PWMs for 4 DC motors + uint8_t motor2_rpm_pwm; + uint8_t motor3_rpm_pwm; + uint8_t motor4_rpm_pwm; + } __attribute__((packed)) sensors_data_t; + Receiving & De-Ecapsulating Data -------------------------------- .. code-block:: c void onDataReceived (const uint8_t *mac_addr, const uint8_t *data, uint8_t data_len) { + + ... ... ... + ... ... ... + ESP_LOGI(TAG, "Data received from: %02x:%02x:%02x:%02x:%02x:%02x, len=%d", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5], data_len); memcpy(&buf, data, sizeof(buf)); x_axis = buf.x_axis; - y_axis = buf.y_axis + y_axis = buf.y_axis; + + ... ... ... + ... ... ... } Main Function @@ -31,7 +49,14 @@ Main Function #include "nvs_flash.h" #include "esp_err.h" + ... ... ... + ... ... ... + void app_main(void) { + + ... ... ... + ... ... ... + // Initialize NVS esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { @@ -52,4 +77,7 @@ Main Function ESP_ERROR_CHECK(esp_now_register_recv_cb((void*)onDataReceived)); system_led_init(); + + ... ... ... + ... ... ... } \ No newline at end of file diff --git a/ESP-IDF_Robot/tutorial/docs/build/html/_sources/transmitter.rst.txt b/ESP-IDF_Robot/tutorial/docs/build/html/_sources/transmitter.rst.txt index 570d103e9..4a32ecb11 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/html/_sources/transmitter.rst.txt +++ b/ESP-IDF_Robot/tutorial/docs/build/html/_sources/transmitter.rst.txt @@ -48,7 +48,14 @@ Main Function #include "nvs_flash.h" #include "esp_err.h" + ... ... ... + ... ... ... + void app_main(void) { + + ... ... ... + ... ... ... + // Initialize internal temperature sensor chip_sensor_init(); @@ -63,4 +70,7 @@ Main Function joystick_adc_init(); transmission_init(); system_led_init(); + + ... ... ... + ... ... ... } \ No newline at end of file diff --git a/ESP-IDF_Robot/tutorial/docs/build/html/receiver.html b/ESP-IDF_Robot/tutorial/docs/build/html/receiver.html index 08cbdce5a..9e5598e07 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/html/receiver.html +++ b/ESP-IDF_Robot/tutorial/docs/build/html/receiver.html @@ -38,17 +38,35 @@

Configuration Variables

uint8_t transmitter_mac[ESP_NOW_ETH_ALEN] = {0x9C, 0x9E, 0x6E, 0x14, 0xB5, 0x54};
+
+typedef struct {
+    int         x_axis;             // Joystick x-position
+    int         y_axis;             // Joystick y-position
+    bool        nav_bttn;           // Joystick push button
+    bool        led;                // LED ON/OFF state
+    uint8_t     motor1_rpm_pwm;     // PWMs for 4 DC motors
+    uint8_t     motor2_rpm_pwm;
+    uint8_t     motor3_rpm_pwm;
+    uint8_t     motor4_rpm_pwm;
+} __attribute__((packed)) sensors_data_t;
 

Receiving & De-Ecapsulating Data

void onDataReceived (const uint8_t *mac_addr, const uint8_t *data, uint8_t data_len) {
+
+    ... ... ...
+    ... ... ...
+
     ESP_LOGI(TAG, "Data received from: %02x:%02x:%02x:%02x:%02x:%02x, len=%d", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5], data_len);
     memcpy(&buf, data, sizeof(buf));
 
     x_axis = buf.x_axis;
-    y_axis = buf.y_axis
+    y_axis = buf.y_axis;
+
+    ... ... ...
+    ... ... ...
 }
 
@@ -60,7 +78,14 @@ #include "nvs_flash.h" #include "esp_err.h" -void app_main(void) { +... ... ... +... ... ... + +void app_main(void) { + + ... ... ... + ... ... ... + // Initialize NVS esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { @@ -81,6 +106,9 @@ ESP_ERROR_CHECK(esp_now_register_recv_cb((void*)onDataReceived)); system_led_init(); + + ... ... ... + ... ... ... } diff --git a/ESP-IDF_Robot/tutorial/docs/build/html/searchindex.js b/ESP-IDF_Robot/tutorial/docs/build/html/searchindex.js index e736649f0..5453bbbe7 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":{"ByteRider documentation":[[1,null]],"Chassis":[[4,"chassis"]],"Configuration Variables":[[5,"configuration-variables"],[6,"configuration-variables"]],"DATA STRUCT":[[0,null]],"Data Payload":[[0,"data-payload"]],"Direction and Speed":[[3,"direction-and-speed"]],"Finished Work":[[4,"finished-work"]],"Fusion of Software with Hardware":[[3,"fusion-of-software-with-hardware"]],"HOW DOES IT WORK?":[[3,null]],"INTRODUCTION":[[2,null]],"Main Function":[[5,"main-function"],[6,"main-function"]],"Motor Wires Harness":[[4,"motor-wires-harness"]],"RECEIVER":[[5,null]],"Receiving & De-Ecapsulating Data":[[5,"receiving-de-ecapsulating-data"]],"Reserved Pins & GPIOs":[[3,"reserved-pins-gpios"]],"Schematic":[[3,"schematic"]],"Sending & Ecapsulating Data":[[6,"sending-ecapsulating-data"]],"TRANSMITTER":[[6,null]],"WORK-IN-PROGRESS WALK THROUGH":[[4,null]],"Why use __attribute((packed))?":[[0,"why-use-attribute-packed"]],"Wiring":[[4,"wiring"]],"x- and y- axis":[[3,"x-and-y-axis"]]},"docnames":["data","index","intro","overview","progress","receiver","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","transmitter.rst"],"indexentries":{},"objects":{},"objnames":{},"objtypes":{},"terms":{"":0,"0":[3,5],"02x":5,"04x":3,"0x":3,"0x14":5,"0x17":6,"0x44":6,"0x54":5,"0x63":6,"0x6e":5,"0x9c":5,"0x9e":[5,6],"0xb0":6,"0xb5":5,"0xe4":6,"1":[3,5],"100":3,"15":3,"16":3,"2":[3,5],"250":0,"3":[3,5],"4":[0,3,5,6],"47":3,"48":3,"5":[3,5],"50":[],"6":3,"7":3,"8":3,"90":3,"91":3,"95":[],"A":3,"As":0,"IN":1,"IT":1,"If":3,"In":[0,3],"It":0,"NOT":3,"ON":[0,6],"The":[0,3],"__attribut":[],"__attribute__":[0,6],"__gpio6__":[],"_static":[],"across":0,"ad":0,"adapt":3,"adc1_ch0":3,"adc1_ch1":3,"add":0,"addit":0,"address":[3,6],"align":0,"all":0,"alloc":3,"allow":0,"an":0,"analog":0,"ani":[0,3],"app_main":[5,6],"ar":3,"arg":3,"assign":3,"attribut":0,"axi":[],"back":3,"bacl":3,"bandwidth":0,"base":3,"batteri":0,"being":3,"below":[],"between":0,"bitbyterid":3,"board":3,"bool":[0,6],"breadboard":3,"brief":3,"buf":[3,5],"buffer":[3,6],"button":[0,3,6],"byte":0,"c3":3,"call":[3,6],"can":3,"captur":0,"car":3,"chang":3,"channel":[3,5],"chassi":1,"chip_sensor_init":6,"clockwis":3,"code":3,"column":[],"command":0,"commun":0,"compact":0,"compat":0,"compil":0,"complet":4,"configur":[0,1],"consequ":3,"const":5,"constraint":3,"contain":0,"content":[],"contin":3,"control":[0,3,4],"correspond":3,"counter":3,"crc":3,"current":5,"cycl":3,"d":5,"data":[1,3],"data_len":[3,5],"dc":[0,3,4,6],"de":1,"declar":3,"decod":0,"dedic":3,"defin":3,"deletep":3,"design":0,"detail":[],"determin":[0,3],"devboard":3,"develop":3,"developmemt":3,"devic":0,"diagon":3,"differenti":0,"direct":0,"displai":3,"doe":1,"drive":0,"duti":3,"e":[0,3],"each":3,"ecapsul":1,"els":3,"embed":0,"enabl":0,"encapsul":0,"encod":0,"encrypt":5,"end":0,"ensur":0,"error":3,"esp":[0,3,6],"esp32":3,"esp_err":[5,6],"esp_err_nvs_new_version_found":[5,6],"esp_err_nvs_no_free_pag":[5,6],"esp_err_t":[5,6],"esp_error_check":[5,6],"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,6],"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,6],"esp_now_send_status_t":3,"etc":0,"even":0,"event":3,"everi":3,"evok":3,"exact":0,"exist":[],"expect":0,"fals":5,"field":0,"final":0,"fine":0,"finish":1,"fix":0,"follow":3,"four":[0,3],"freerto":[5,6],"from":[0,5],"front":3,"function":[1,3],"fusion":1,"g":0,"get":3,"gpio":1,"gpio0":3,"gpio1":3,"gpio4":3,"gpio5":3,"gpio6":3,"gpio7":3,"grain":0,"group":3,"h":[5,6],"har":1,"hardwar":[0,1],"harn":4,"hexadecim":3,"hold":[3,6],"how":1,"i":[0,3],"ideal":0,"idf_robot_schemat":[],"ifidx":5,"illustr":3,"imag":3,"includ":[5,6],"indic":0,"individu":0,"initi":[5,6],"input":0,"insid":4,"instal":4,"int":[0,3,6],"intend":0,"intern":6,"interpret":0,"interv":0,"introduct":1,"joystick":[0,3,6],"joystick_adc_init":6,"lastli":3,"latenc":0,"layout":0,"led":[0,6],"ledc_channel_0":3,"ledc_channel_1":3,"ledc_channel_2":3,"ledc_channel_3":3,"left":3,"len":5,"length":[3,6],"like":0,"low":0,"mac":[3,6],"mac_addr":[3,5],"mai":0,"main":1,"make":0,"maneuv":0,"master":0,"maxim":0,"mean":3,"measur":3,"memcpi":5,"memori":[0,3,6],"messag":3,"microcontrol":[0,3],"minim":0,"motor":[0,1,3,6],"motor1_rpm_pcm":[],"motor1_rpm_pwm":[0,3,6],"motor2_rpm_pcm":[],"motor2_rpm_pwm":[0,3,6],"motor3_rpm_pcm":[],"motor3_rpm_pwm":[0,3,6],"motor4_rpm_pcm":[],"motor4_rpm_pwm":[0,3,6],"motors_rpm":3,"move":3,"movement":3,"multi":0,"nav_bttn":[0,3,6],"note":3,"now":[0,3,6],"number":3,"nv":[5,6],"nvs_flash":[5,6],"nvs_flash_eras":[5,6],"nvs_flash_init":[5,6],"off":[0,6],"ok":3,"omni":0,"onboard":0,"ondatareceiv":[3,5],"ondatas":3,"onli":[3,4],"oper":[0,3],"oscilloscop":3,"other":3,"over":0,"pack":6,"packet":[0,3],"pad":0,"pair":[0,3],"particular":3,"payload":1,"peer_addr":5,"period":3,"pin":1,"platform":0,"png":[],"pointer":[3,6],"porttick_period_m":3,"posit":[0,3,6],"possibl":3,"power":3,"precis":0,"predict":0,"progress":1,"protocol":0,"provid":[0,3],"purpos":3,"push":[0,3,6],"pwm":[0,3,6],"rc":3,"rc_send_data_task":3,"receiv":[0,1,3,6],"receiver_mac":[3,6],"record":[],"regist":3,"regular":0,"relev":0,"remot":0,"remov":0,"repres":0,"requir":3,"reserv":1,"resp":3,"respons":[0,3],"restructuredtext":[],"result":[3,6],"ret":[5,6],"right":3,"robot":0,"rotat":3,"row":[],"run":3,"same":[],"schemat":1,"second":3,"secur":4,"see":[],"send":[0,1,3],"senddata":[3,6],"sensor":[0,6],"sensors_data_t":[0,3,6],"sent":[0,3],"serial":0,"serv":0,"side":3,"sidewai":3,"signal":0,"similarli":3,"size":0,"sizeof":[3,5,6],"softwar":1,"speed":0,"state":[0,6],"static":3,"statu":[0,3],"store":3,"stream":0,"string":5,"struct":[1,3,6],"suffici":3,"summar":3,"summari":3,"support":0,"syntax":[],"system":0,"system_led_init":[5,6],"tabl":3,"tag":[3,5],"task":3,"telemetri":0,"tell":0,"temperatur":6,"thi":[0,3],"those":3,"through":1,"toggl":0,"transmiss":0,"transmission_init":6,"transmit":[0,3],"transmitt":[0,1],"transmitter_mac":5,"transmitterinfo":5,"true":3,"turn":3,"two":3,"typedef":[0,6],"uart":0,"uint8_t":[0,3,5,6],"up":0,"updat":3,"us":[],"user":0,"valu":3,"variabl":1,"variou":3,"vehicl":0,"void":[3,5,6],"voltag":3,"vtaskdelai":3,"wa":3,"walk":1,"walkthrough":[],"warn":0,"well":[],"wheel":0,"when":[0,3],"while":3,"why":[],"wifi":5,"wifi_init":[5,6],"wire":[1,3],"work":1,"wroom":3,"x":[0,6],"x_axi":[0,3,5,6],"y":[0,6],"y_axi":[0,3,5,6],"you":0,"your":[]},"titles":["DATA STRUCT","ByteRider documentation","INTRODUCTION","HOW DOES IT WORK?","WORK-IN-PROGRESS WALK THROUGH","RECEIVER","TRANSMITTER"],"titleterms":{"IN":4,"IT":3,"__attribut":0,"axi":3,"byterid":1,"chassi":4,"configur":[5,6],"data":[0,5,6],"de":5,"direct":3,"document":1,"doe":3,"ecapsul":[5,6],"encapsul":[],"finish":4,"function":[5,6],"fusion":3,"gpio":3,"har":4,"hardwar":3,"how":3,"introduct":2,"main":[5,6],"motor":4,"pack":0,"payload":0,"pin":3,"progress":4,"receiv":5,"reserv":3,"schemat":3,"send":6,"softwar":3,"speed":3,"struct":0,"through":4,"transmitt":6,"us":0,"variabl":[5,6],"walk":4,"walkthrough":[],"why":0,"wire":4,"work":[3,4],"x":3,"y":3}}) \ No newline at end of file +Search.setIndex({"alltitles":{"ByteRider documentation":[[1,null]],"Chassis":[[4,"chassis"]],"Configuration Variables":[[5,"configuration-variables"],[6,"configuration-variables"]],"DATA STRUCT":[[0,null]],"Data Payload":[[0,"data-payload"]],"Direction and Speed":[[3,"direction-and-speed"]],"Finished Work":[[4,"finished-work"]],"Fusion of Software with Hardware":[[3,"fusion-of-software-with-hardware"]],"HOW DOES IT WORK?":[[3,null]],"INTRODUCTION":[[2,null]],"Main Function":[[5,"main-function"],[6,"main-function"]],"Motor Wires Harness":[[4,"motor-wires-harness"]],"RECEIVER":[[5,null]],"Receiving & De-Ecapsulating Data":[[5,"receiving-de-ecapsulating-data"]],"Reserved Pins & GPIOs":[[3,"reserved-pins-gpios"]],"Schematic":[[3,"schematic"]],"Sending & Ecapsulating Data":[[6,"sending-ecapsulating-data"]],"TRANSMITTER":[[6,null]],"WORK-IN-PROGRESS WALK THROUGH":[[4,null]],"Why use __attribute((packed))?":[[0,"why-use-attribute-packed"]],"Wiring":[[4,"wiring"]],"x- and y- axis":[[3,"x-and-y-axis"]]},"docnames":["data","index","intro","overview","progress","receiver","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","transmitter.rst"],"indexentries":{},"objects":{},"objnames":{},"objtypes":{},"terms":{"":0,"0":[3,5],"02x":5,"04x":3,"0x":3,"0x14":5,"0x17":6,"0x44":6,"0x54":5,"0x63":6,"0x6e":5,"0x9c":5,"0x9e":[5,6],"0xb0":6,"0xb5":5,"0xe4":6,"1":[3,5],"100":3,"15":3,"16":3,"2":[3,5],"250":0,"3":[3,5],"4":[0,3,5,6],"47":3,"48":3,"5":[3,5],"50":[],"6":3,"7":3,"8":3,"90":3,"91":3,"95":[],"A":3,"As":0,"IN":1,"IT":1,"If":3,"In":[0,3],"It":0,"NOT":3,"ON":[0,5,6],"The":[0,3],"__attribut":[],"__attribute__":[0,5,6],"__gpio6__":[],"_static":[],"across":0,"ad":0,"adapt":3,"adc1_ch0":3,"adc1_ch1":3,"add":0,"addit":0,"address":[3,6],"align":0,"all":0,"alloc":3,"allow":0,"an":0,"analog":0,"ani":[0,3],"app_main":[5,6],"ar":3,"arg":3,"assign":3,"attribut":0,"axi":[],"back":3,"bacl":3,"bandwidth":0,"base":3,"batteri":0,"being":3,"below":[],"between":0,"bitbyterid":3,"board":3,"bool":[0,5,6],"breadboard":3,"brief":3,"buf":[3,5],"buffer":[3,6],"button":[0,3,5,6],"byte":0,"c3":3,"call":[3,6],"can":3,"captur":0,"car":3,"chang":3,"channel":[3,5],"chassi":1,"chip_sensor_init":6,"clockwis":3,"code":3,"column":[],"command":0,"commun":0,"compact":0,"compat":0,"compil":0,"complet":4,"configur":[0,1],"consequ":3,"const":5,"constraint":3,"contain":0,"content":[],"contin":3,"control":[0,3,4],"correspond":3,"counter":3,"crc":3,"current":5,"cycl":3,"d":5,"data":[1,3],"data_len":[3,5],"dc":[0,3,4,5,6],"de":1,"declar":3,"decod":0,"dedic":3,"defin":3,"deletep":3,"design":0,"detail":[],"determin":[0,3],"devboard":3,"develop":3,"developmemt":3,"devic":0,"diagon":3,"differenti":0,"direct":0,"displai":3,"doe":1,"drive":0,"duti":3,"e":[0,3],"each":3,"ecapsul":1,"els":3,"embed":0,"enabl":0,"encapsul":0,"encod":0,"encrypt":5,"end":0,"ensur":0,"error":3,"esp":[0,3,6],"esp32":3,"esp_err":[5,6],"esp_err_nvs_new_version_found":[5,6],"esp_err_nvs_no_free_pag":[5,6],"esp_err_t":[5,6],"esp_error_check":[5,6],"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,6],"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,6],"esp_now_send_status_t":3,"etc":0,"even":0,"event":3,"everi":3,"evok":3,"exact":0,"exist":[],"expect":0,"fals":5,"field":0,"final":0,"fine":0,"finish":1,"fix":0,"follow":3,"four":[0,3],"freerto":[5,6],"from":[0,5],"front":3,"function":[1,3],"fusion":1,"g":0,"get":3,"gpio":1,"gpio0":3,"gpio1":3,"gpio4":3,"gpio5":3,"gpio6":3,"gpio7":3,"grain":0,"group":3,"h":[5,6],"har":1,"hardwar":[0,1],"harn":4,"hexadecim":3,"hold":[3,6],"how":1,"i":[0,3],"ideal":0,"idf_robot_schemat":[],"ifidx":5,"illustr":3,"imag":3,"includ":[5,6],"indic":0,"individu":0,"initi":[5,6],"input":0,"insid":4,"instal":4,"int":[0,3,5,6],"intend":0,"intern":6,"interpret":0,"interv":0,"introduct":1,"joystick":[0,3,5,6],"joystick_adc_init":6,"lastli":3,"latenc":0,"layout":0,"led":[0,5,6],"ledc_channel_0":3,"ledc_channel_1":3,"ledc_channel_2":3,"ledc_channel_3":3,"left":3,"len":5,"length":[3,6],"like":0,"low":0,"mac":[3,6],"mac_addr":[3,5],"mai":0,"main":1,"make":0,"maneuv":0,"master":0,"maxim":0,"mean":3,"measur":3,"memcpi":5,"memori":[0,3,6],"messag":3,"microcontrol":[0,3],"minim":0,"motor":[0,1,3,5,6],"motor1_rpm_pcm":[],"motor1_rpm_pwm":[0,3,5,6],"motor2_rpm_pcm":[],"motor2_rpm_pwm":[0,3,5,6],"motor3_rpm_pcm":[],"motor3_rpm_pwm":[0,3,5,6],"motor4_rpm_pcm":[],"motor4_rpm_pwm":[0,3,5,6],"motors_rpm":3,"move":3,"movement":3,"multi":0,"nav_bttn":[0,3,5,6],"note":3,"now":[0,3,6],"number":3,"nv":[5,6],"nvs_flash":[5,6],"nvs_flash_eras":[5,6],"nvs_flash_init":[5,6],"off":[0,5,6],"ok":3,"omni":0,"onboard":0,"ondatareceiv":[3,5],"ondatas":3,"onli":[3,4],"oper":[0,3],"oscilloscop":3,"other":3,"over":0,"pack":[5,6],"packet":[0,3],"pad":0,"pair":[0,3],"particular":3,"payload":1,"peer_addr":5,"period":3,"pin":1,"platform":0,"png":[],"pointer":[3,6],"porttick_period_m":3,"posit":[0,3,5,6],"possibl":3,"power":3,"precis":0,"predict":0,"progress":1,"protocol":0,"provid":[0,3],"purpos":3,"push":[0,3,5,6],"pwm":[0,3,5,6],"rc":3,"rc_send_data_task":3,"receiv":[0,1,3,6],"receiver_mac":[3,6],"record":[],"regist":3,"regular":0,"relev":0,"remot":0,"remov":0,"repres":0,"requir":3,"reserv":1,"resp":3,"respons":[0,3],"restructuredtext":[],"result":[3,6],"ret":[5,6],"right":3,"robot":0,"rotat":3,"row":[],"run":3,"same":[],"schemat":1,"second":3,"secur":4,"see":[],"send":[0,1,3],"senddata":[3,6],"sensor":[0,6],"sensors_data_t":[0,3,5,6],"sent":[0,3],"serial":0,"serv":0,"side":3,"sidewai":3,"signal":0,"similarli":3,"size":0,"sizeof":[3,5,6],"softwar":1,"speed":0,"state":[0,5,6],"static":3,"statu":[0,3],"store":3,"stream":0,"string":5,"struct":[1,3,5,6],"suffici":3,"summar":3,"summari":3,"support":0,"syntax":[],"system":0,"system_led_init":[5,6],"tabl":3,"tag":[3,5],"task":3,"telemetri":0,"tell":0,"temperatur":6,"thi":[0,3],"those":3,"through":1,"toggl":0,"transmiss":0,"transmission_init":6,"transmit":[0,3],"transmitt":[0,1],"transmitter_mac":5,"transmitterinfo":5,"true":3,"turn":3,"two":3,"typedef":[0,5,6],"uart":0,"uint8_t":[0,3,5,6],"up":0,"updat":3,"us":[],"user":0,"valu":3,"variabl":1,"variou":3,"vehicl":0,"void":[3,5,6],"voltag":3,"vtaskdelai":3,"wa":3,"walk":1,"walkthrough":[],"warn":0,"well":[],"wheel":0,"when":[0,3],"while":3,"why":[],"wifi":5,"wifi_init":[5,6],"wire":[1,3],"work":1,"wroom":3,"x":[0,5,6],"x_axi":[0,3,5,6],"y":[0,5,6],"y_axi":[0,3,5,6],"you":0,"your":[]},"titles":["DATA STRUCT","ByteRider documentation","INTRODUCTION","HOW DOES IT WORK?","WORK-IN-PROGRESS WALK THROUGH","RECEIVER","TRANSMITTER"],"titleterms":{"IN":4,"IT":3,"__attribut":0,"axi":3,"byterid":1,"chassi":4,"configur":[5,6],"data":[0,5,6],"de":5,"direct":3,"document":1,"doe":3,"ecapsul":[5,6],"encapsul":[],"finish":4,"function":[5,6],"fusion":3,"gpio":3,"har":4,"hardwar":3,"how":3,"introduct":2,"main":[5,6],"motor":4,"pack":0,"payload":0,"pin":3,"progress":4,"receiv":5,"reserv":3,"schemat":3,"send":6,"softwar":3,"speed":3,"struct":0,"through":4,"transmitt":6,"us":0,"variabl":[5,6],"walk":4,"walkthrough":[],"why":0,"wire":4,"work":[3,4],"x":3,"y":3}}) \ No newline at end of file diff --git a/ESP-IDF_Robot/tutorial/docs/build/html/transmitter.html b/ESP-IDF_Robot/tutorial/docs/build/html/transmitter.html index 1514ef295..bf7447590 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/html/transmitter.html +++ b/ESP-IDF_Robot/tutorial/docs/build/html/transmitter.html @@ -77,7 +77,14 @@ #include "nvs_flash.h" #include "esp_err.h" -void app_main(void) { +... ... ... +... ... ... + +void app_main(void) { + + ... ... ... + ... ... ... + // Initialize internal temperature sensor chip_sensor_init(); @@ -92,6 +99,9 @@ joystick_adc_init(); transmission_init(); system_led_init(); + + ... ... ... + ... ... ... } diff --git a/ESP-IDF_Robot/tutorial/docs/build/simplepdf/.buildinfo b/ESP-IDF_Robot/tutorial/docs/build/simplepdf/.buildinfo index 97569d4f5..9bf2d546c 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: 8f834b1b52b9d2100bf8fc323cfd0679 +config: 228fb0c7d74dd0583dc744bd9b07e243 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 b9d90d0fa..d011fca45 100644 --- a/ESP-IDF_Robot/tutorial/docs/build/simplepdf/index.html +++ b/ESP-IDF_Robot/tutorial/docs/build/simplepdf/index.html @@ -837,7 +837,14 @@ This enables fine-grained speed control, supports differential drive configurati #include "nvs_flash.h" #include "esp_err.h" -void app_main(void) { +... ... ... +... ... ... + +void app_main(void) { + + ... ... ... + ... ... ... + // Initialize internal temperature sensor chip_sensor_init(); @@ -852,6 +859,9 @@ This enables fine-grained speed control, supports differential drive configurati joystick_adc_init(); transmission_init(); system_led_init(); + + ... ... ... + ... ... ... } @@ -877,6 +887,17 @@ This enables fine-grained speed control, supports differential drive configurati
uint8_t transmitter_mac[ESP_NOW_ETH_ALEN] = {0x9C, 0x9E, 0x6E, 0x14, 0xB5, 0x54};
+
+typedef struct {
+    int         x_axis;             // Joystick x-position
+    int         y_axis;             // Joystick y-position
+    bool        nav_bttn;           // Joystick push button
+    bool        led;                // LED ON/OFF state
+    uint8_t     motor1_rpm_pwm;     // PWMs for 4 DC motors
+    uint8_t     motor2_rpm_pwm;
+    uint8_t     motor3_rpm_pwm;
+    uint8_t     motor4_rpm_pwm;
+} __attribute__((packed)) sensors_data_t;
 
@@ -891,11 +912,18 @@ This enables fine-grained speed control, supports differential drive configurati
void onDataReceived (const uint8_t *mac_addr, const uint8_t *data, uint8_t data_len) {
+
+    ... ... ...
+    ... ... ...
+
     ESP_LOGI(TAG, "Data received from: %02x:%02x:%02x:%02x:%02x:%02x, len=%d", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5], data_len);
     memcpy(&buf, data, sizeof(buf));
 
     x_axis = buf.x_axis;
-    y_axis = buf.y_axis
+    y_axis = buf.y_axis;
+
+    ... ... ...
+    ... ... ...
 }
 
@@ -915,7 +943,14 @@ This enables fine-grained speed control, supports differential drive configurati #include "nvs_flash.h" #include "esp_err.h" -void app_main(void) { +... ... ... +... ... ... + +void app_main(void) { + + ... ... ... + ... ... ... + // Initialize NVS esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { @@ -936,6 +971,9 @@ This enables fine-grained speed control, supports differential drive configurati ESP_ERROR_CHECK(esp_now_register_recv_cb((void*)onDataReceived)); system_led_init(); + + ... ... ... + ... ... ... }
diff --git a/ESP-IDF_Robot/tutorial/docs/source/receiver.rst b/ESP-IDF_Robot/tutorial/docs/source/receiver.rst index caed557f2..a91b8d5d0 100644 --- a/ESP-IDF_Robot/tutorial/docs/source/receiver.rst +++ b/ESP-IDF_Robot/tutorial/docs/source/receiver.rst @@ -8,17 +8,35 @@ Configuration Variables uint8_t transmitter_mac[ESP_NOW_ETH_ALEN] = {0x9C, 0x9E, 0x6E, 0x14, 0xB5, 0x54}; + typedef struct { + int x_axis; // Joystick x-position + int y_axis; // Joystick y-position + bool nav_bttn; // Joystick push button + bool led; // LED ON/OFF state + uint8_t motor1_rpm_pwm; // PWMs for 4 DC motors + uint8_t motor2_rpm_pwm; + uint8_t motor3_rpm_pwm; + uint8_t motor4_rpm_pwm; + } __attribute__((packed)) sensors_data_t; + Receiving & De-Ecapsulating Data -------------------------------- .. code-block:: c void onDataReceived (const uint8_t *mac_addr, const uint8_t *data, uint8_t data_len) { + + ... ... ... + ... ... ... + ESP_LOGI(TAG, "Data received from: %02x:%02x:%02x:%02x:%02x:%02x, len=%d", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5], data_len); memcpy(&buf, data, sizeof(buf)); x_axis = buf.x_axis; - y_axis = buf.y_axis + y_axis = buf.y_axis; + + ... ... ... + ... ... ... } Main Function @@ -31,7 +49,14 @@ Main Function #include "nvs_flash.h" #include "esp_err.h" + ... ... ... + ... ... ... + void app_main(void) { + + ... ... ... + ... ... ... + // Initialize NVS esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { @@ -52,4 +77,7 @@ Main Function ESP_ERROR_CHECK(esp_now_register_recv_cb((void*)onDataReceived)); system_led_init(); + + ... ... ... + ... ... ... } \ No newline at end of file