Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.09 KB | None | 0 0
  1. #include <string.h>
  2. #include "esp_err.h"
  3. #include "esp_mesh.h"
  4. #include "mesh_light.h"
  5.  
  6. #define CONFIG_MESH_ROUTE_TABLE_SIZE 20 // dimenisunea maxima a tabelei de rutare
  7. #define CONFIG_MESH_MAX_LAYER 3 // numarul maxim de niveluri ale arborelui
  8. #define CONFIG_MESH_CHANNEL 1 // canalul WiFi pe care se creaza reteaua mesh (trebuie sa coincida cu canalul AP-ului !)
  9. #define CONFIG_MESH_ROUTER_SSID "lab-iot" // SSID-ul AP-ului la care se va conecta nodul root
  10. #define CONFIG_MESH_ROUTER_PASSWD "IoT-IoT-IoT" // parola
  11. #define CONFIG_MESH_AP_AUTHMODE WIFI_AUTH_WPA_WPA2_PSK // metoda de securitate folosita pentru interfetele softAP
  12. #define CONFIG_MESH_AP_CONNECTIONS 3 // numarul maxim de noduri fiu
  13. #define CONFIG_MESH_AP_PASSWD "12345678" // parola pentru conectarea la interfata softAP (ptr WPA2 min 8 caractere
  14. #include "driver/gpio.h"
  15. #include "driver/ledc.h"
  16.  
  17.  
  18. /*******************************************************
  19. * Constants
  20. *******************************************************/
  21. /* RGB configuration on ESP-WROVER-KIT board */
  22. #define LEDC_IO_0 (0)
  23. #define LEDC_IO_1 (2)
  24. #define LEDC_IO_2 (4)
  25. #define LEDC_IO_3 (5)
  26.  
  27. /*******************************************************
  28. * Variable Definitions
  29. *******************************************************/
  30. static bool s_light_inited = false;
  31.  
  32. /*******************************************************
  33. * Function Definitions
  34. *******************************************************/
  35. esp_err_t mesh_light_init(void)
  36. {
  37. if (s_light_inited == true) {
  38. return ESP_OK;
  39. }
  40. s_light_inited = true;
  41.  
  42. ledc_timer_config_t ledc_timer = {
  43. .bit_num = LEDC_TIMER_13_BIT,
  44. .freq_hz = 5000,
  45. .speed_mode = LEDC_HIGH_SPEED_MODE,
  46. .timer_num = LEDC_TIMER_0
  47. };
  48. ledc_timer_config(&ledc_timer);
  49.  
  50. ledc_channel_config_t ledc_channel = {
  51. .channel = LEDC_CHANNEL_0,
  52. .duty = 100,
  53. .gpio_num = LEDC_IO_0,
  54. .intr_type = LEDC_INTR_FADE_END,
  55. .speed_mode = LEDC_HIGH_SPEED_MODE,
  56. .timer_sel = LEDC_TIMER_0
  57. };
  58. ledc_channel_config(&ledc_channel);
  59. ledc_channel.channel = LEDC_CHANNEL_1;
  60. ledc_channel.gpio_num = LEDC_IO_1;
  61. ledc_channel_config(&ledc_channel);
  62. ledc_channel.channel = LEDC_CHANNEL_2;
  63. ledc_channel.gpio_num = LEDC_IO_2;
  64. ledc_channel_config(&ledc_channel);
  65. ledc_channel.channel = LEDC_CHANNEL_3;
  66. ledc_channel.gpio_num = LEDC_IO_3;
  67. ledc_channel_config(&ledc_channel);
  68. ledc_fade_func_install(0);
  69.  
  70. mesh_light_set(MESH_LIGHT_INIT);
  71. return ESP_OK;
  72. }
  73.  
  74. esp_err_t mesh_light_set(int color)
  75. {
  76. switch (color) {
  77. case MESH_LIGHT_RED:
  78. /* Red */
  79. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, 3000);
  80. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_1, 0);
  81. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_2, 0);
  82. break;
  83. case MESH_LIGHT_GREEN:
  84. /* Green */
  85. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, 0);
  86. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_1, 3000);
  87. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_2, 0);
  88. break;
  89. case MESH_LIGHT_BLUE:
  90. /* Blue */
  91. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, 0);
  92. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_1, 0);
  93. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_2, 3000);
  94. break;
  95. case MESH_LIGHT_YELLOW:
  96. /* Yellow */
  97. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, 3000);
  98. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_1, 3000);
  99. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_2, 0);
  100. break;
  101. case MESH_LIGHT_PINK:
  102. /* Pink */
  103. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, 3000);
  104. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_1, 0);
  105. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_2, 3000);
  106. break;
  107. case MESH_LIGHT_INIT:
  108. /* can't say */
  109. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, 0);
  110. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_1, 3000);
  111. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_2, 3000);
  112. break;
  113. case MESH_LIGHT_WARNING:
  114. /* warning */
  115. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, 3000);
  116. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_1, 3000);
  117. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_2, 3000);
  118. break;
  119. default:
  120. /* off */
  121. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, 0);
  122. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_1, 0);
  123. ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_2, 0);
  124. }
  125.  
  126. ledc_update_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0);
  127. ledc_update_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_1);
  128. ledc_update_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_2);
  129.  
  130. return ESP_OK;
  131. }
  132.  
  133. void mesh_connected_indicator(int layer)
  134. {
  135. switch (layer) {
  136. case 1:
  137. mesh_light_set(MESH_LIGHT_PINK);
  138. break;
  139. case 2:
  140. mesh_light_set(MESH_LIGHT_YELLOW);
  141. break;
  142. case 3:
  143. mesh_light_set(MESH_LIGHT_RED);
  144. break;
  145. case 4:
  146. mesh_light_set(MESH_LIGHT_BLUE);
  147. break;
  148. case 5:
  149. mesh_light_set(MESH_LIGHT_GREEN);
  150. break;
  151. case 6:
  152. mesh_light_set(MESH_LIGHT_WARNING);
  153. break;
  154. default:
  155. mesh_light_set(0);
  156. }
  157. }
  158.  
  159. void mesh_disconnected_indicator(void)
  160. {
  161. mesh_light_set(MESH_LIGHT_WARNING);
  162. }
  163.  
  164. esp_err_t mesh_light_process(mesh_addr_t *from, uint8_t *buf, uint16_t len)
  165. {
  166. mesh_light_ctl_t *in = (mesh_light_ctl_t *) buf;
  167. if (!from || !buf || len < sizeof(mesh_light_ctl_t)) {
  168. return ESP_FAIL;
  169. }
  170. if (in->token_id != MESH_TOKEN_ID || in->token_value != MESH_TOKEN_VALUE) {
  171. return ESP_FAIL;
  172. }
  173. if (in->cmd == MESH_CONTROL_CMD) {
  174. if (in->on) {
  175. mesh_connected_indicator(esp_mesh_get_layer());
  176. } else {
  177. mesh_light_set(0);
  178. }
  179. }
  180. return ESP_OK;
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement