{"id":3399,"date":"2025-02-27T17:26:39","date_gmt":"2025-02-27T17:26:39","guid":{"rendered":"https:\/\/iotthinghub.com\/?p=3399"},"modified":"2025-02-27T18:05:34","modified_gmt":"2025-02-27T18:05:34","slug":"iot-wifi-load-control","status":"publish","type":"post","link":"https:\/\/iotthinghub.com\/?p=3399","title":{"rendered":"IoT : WiFi Load Control"},"content":{"rendered":"\n<p class=\"has-text-color has-link-color wp-elements-3a8519a0bb07a54c0e82ca7d55561e02 wp-block-paragraph\" style=\"color:#5c5c5c\">WiFi (Wireless Fidelity) is a technology that allows devices to connect to the internet or communicate with each other wirelessly using radio waves. It operates based on the IEEE 802.11 standard, enabling high-speed data transfer over short distances. The ESP8266 operates exclusively in the 2.4 GHz frequency band. It supports WiFi communication based on the IEEE 802.11 b\/g\/n standards, which makes it ideal for various IoT applications due to its balance of range and data throughput, as well as its low power consumption. Notably, since it only uses the 2.4 GHz band, it does not support the 5 GHz frequency, which is often used for higher-speed networks in environments with less interference.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"372\" src=\"https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/esp8266-pinout-1024x372.jpg\" alt=\"\" class=\"wp-image-3401\" srcset=\"https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/esp8266-pinout-1024x372.jpg 1024w, https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/esp8266-pinout-300x109.jpg 300w, https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/esp8266-pinout-768x279.jpg 768w, https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/esp8266-pinout.jpg 1145w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"381\" src=\"https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/function-6-1024x381.jpg\" alt=\"\" class=\"wp-image-3403\" srcset=\"https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/function-6-1024x381.jpg 1024w, https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/function-6-300x112.jpg 300w, https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/function-6-768x286.jpg 768w, https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/function-6.jpg 1074w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-text-color has-link-color wp-elements-32afa4a6d876e13a822d19fc62975472 wp-block-paragraph\" style=\"color:#5c5c5c\">In the previous article we discuss about Bluetooth communication. In HC05 Bluetooth module we initialize it earlier, but in WiFi, esp8266 module we initialize it at run time. In this article we modify our Bluetooth logic with lot\u2019s of changes but the operation will be same. The esp8266 module works on AT command mode. Before starting let\u2019s see some command mode that we need in this article.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img decoding=\"async\" width=\"1024\" height=\"281\" src=\"https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/function-7-1024x281.jpg\" alt=\"\" class=\"wp-image-3407\" style=\"width:776px;height:auto\" srcset=\"https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/function-7-1024x281.jpg 1024w, https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/function-7-300x82.jpg 300w, https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/function-7-768x211.jpg 768w, https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/function-7.jpg 1279w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-color has-link-color wp-elements-13d2932ce0ca66162ce8482fe06f92a2 wp-block-paragraph\" style=\"color:#5c5c5c\">The esp8266 module has many other commands, but in this article we only deal with the above commands. Please see my Youtube video for command set up. At first we send commands through hyper serial terminal. \u00a0Use any serial terminal software for command; here I use \ud83d\udcbb <a href=\"https:\/\/sourceforge.net\/projects\/realterm\/files\/latest\/download\">Realterm software<\/a> for command. Every commands will send with &#8220;\\r\\n\u00a0 &#8221; at the end. Let\u2019s create a function for sending commands.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; auto-links: false; title: ; quick-code: false; notranslate\" title=\"\">\nchar display&#x5B;140],wifi_send&#x5B;50],RX_ST&#x5B;140];\nvoid ESP8266_RX(char *b_send)\n{\n\tsprintf(wifi_send,&quot;%s&quot;,b_send);\n\tHAL_UART_Transmit(&amp;huart1,(uint8_t*)wifi_send,strlen(wifi_send),1000);\n\twhile(1)\n\t{\n\t\tsprintf(RX_ST,&quot;%s&quot;,display);\n\t\tif(strstr(RX_ST,&quot;OK&quot;)) break;\n\t}\n\tmemset (wifi_send, &#039;\\0&#039;, 50);  \/\/ clear the buffer\n\tmemset (RX_ST, &#039;\\0&#039;, 140);     \/\/ clear the buffer\n\tcount=0;\n\tHAL_Delay(2000);\n}\n<\/pre><\/div>\n\n\n<p class=\"has-text-color has-link-color wp-elements-9bc48b04e6d4086c6c54033eb21b2137 wp-block-paragraph\" style=\"color:#5c5c5c\">Here we use character type variable: display to store the RX received data. Every response of esp8266 has a common string of &#8220;OK&#8221;, so set a break point at &#8220;OK&#8221; signal. For receiving character we use interrupt call back function.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; auto-links: false; title: ; quick-code: false; notranslate\" title=\"\">\nuint8_t rx_char,count;\nvoid HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)\n{\n  if(huart-&gt;Instance==USART1 )\n  {\n    display&#x5B;count++]=rx_char;\n    HAL_UART_Receive_IT(&amp;huart1,&amp;rx_char,1);\n  }\n} \n<\/pre><\/div>\n\n\n<p class=\"has-text-color has-link-color wp-elements-268b1bfe3828bb688f02300d8657f505 wp-block-paragraph\" style=\"color:#5c5c5c\">The call function will become very simple-<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; auto-links: false; title: ; quick-code: false; notranslate\" title=\"\">\nESP8266_RX(&quot;AT\\r\\n&quot;);                           \/\/ test function\nESP8266_RX(&quot;ATE0\\r\\n&quot;);                      \/\/ echo off\nESP8266_RX(&quot;AT+CWMODE=3\\r\\n&quot;);  \/\/ both softAP + station mode\n<\/pre><\/div>\n\n\n<p class=\"has-text-color has-link-color wp-elements-5cc60a857e9bf755e63b5dd6eea1fe2d wp-block-paragraph\" style=\"color:#5c5c5c\">The esp8266 module needs to connect with your WiFi network, i.e. the AT+CWLAP command will show the available networks for esp8266 access point. If it doesn\u2019t show your router name, please enable the 2.4GHz frequency bandwidth. For connecting with router-<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; auto-links: false; title: ; quick-code: false; notranslate\" title=\"\">\nchar WIFI_NAME&#x5B;]=&quot;WiFi_Name&quot;;\nchar WIFI_PASS&#x5B;]=&quot;WiFi_Password&quot;;\nESP8266_Connect(WIFI_NAME,WIFI_PASS);\nvoid ESP8266_Connect(char *wifi_name,char *wifi_pass)\n{\n\tsprintf(wifi_send,&quot;AT+CWJAP=\\&quot;%s\\&quot;,\\&quot;%s\\&quot;\\r\\n&quot;, wifi_name, wifi_pass);\n\tHAL_UART_Transmit(&amp;huart1,(uint8_t*)wifi_send,strlen(wifi_send),1000);\n\twhile(1)\n\t{\n\t\tsprintf(RX_ST,&quot;%s&quot;,display);\n\t\tif(strstr(RX_ST,&quot;GOT IP&quot;)) break;\n\t}\n\tmemset (wifi_send, &#039;\\0&#039;, 50);  \/\/ clear the buffer\n\tmemset (RX_ST, &#039;\\0&#039;, 140);     \/\/ clear the buffer\n\tcount=0;\n\tHAL_Delay(8000);\n}\n<\/pre><\/div>\n\n\n<p class=\"has-text-color has-link-color wp-elements-ace3d9499cc35b7b8d188212d5e9dbc1 wp-block-paragraph\" style=\"color:#5c5c5c\">The above function wills same as the previous function with only change in break point at &#8220;GOT IP&#8221; signal. Create server with multiple connection through pipe line port 80.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; auto-links: false; title: ; quick-code: false; notranslate\" title=\"\">\nESP8266_RX(&quot;AT+CIPMUX=1\\r\\n&quot;);       \/\/ multiple connection\nESP8266_RX(&quot;AT+CIPSERVER=1,80\\r\\n&quot;); \/\/ Create server with port 80\n<\/pre><\/div>\n\n\n<p class=\"has-text-color has-link-color wp-elements-bee544625729461ca1c599f65abf6313 wp-block-paragraph\" style=\"color:#5c5c5c\">Since the AT+CIFSR command return both the APIP (Access Point IP Address) &amp; STAIP (Station IP Address). In Station Mode (STA), esp8266 connects to an existing WiFi router or hotspot like a regular device (smartphone, laptop, etc.) &amp; in Access Point (AP) Mode, it creates its own WiFi network, and other devices (phones, laptops) can connect to it. The default APIP is 192.168.4.1, but it can be changed. Here we only deals with STAIP<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; auto-links: false; title: ; quick-code: false; notranslate\" title=\"\">\nchar IPV4&#x5B;16];\nESP8266_IP(&quot;AT+CIFSR\\r\\n&quot;);\nvoid ESP8266_IP(char *getIP)\n{\n\tsprintf(wifi_send,&quot;%s&quot;,getIP);\n\tHAL_UART_Transmit(&amp;huart1,(uint8_t*)wifi_send,strlen(wifi_send),1000);\n\twhile(1)\n\t{\n\t\tsprintf(RX_ST,&quot;%s&quot;,display);\n\t\tif(strstr(RX_ST,&quot;STAMAC&quot;)) break;\n\t}\n\tfor(uint8_t i=0;i&lt;140;i++)\n\t{\n\tif(RX_ST&#x5B;i]==&#039;S&#039;&amp;&amp; RX_ST&#x5B;i+1]==&#039;T&#039; &amp;&amp; RX_ST&#x5B;i+2]==&#039;A&#039;&amp;&amp; RX_ST&#x5B;i+3]==&#039;I&#039; &amp;&amp; RX_ST&#x5B;i+4]==&#039;P&#039;)\n     {\n\t\tfor(uint8_t j=0;j&lt;16;j++)\n\t\t{\n\t\t\tIPV4&#x5B;j]=RX_ST&#x5B;i+j+7];\n\t\t\tif(IPV4&#x5B;j] == &#039;&quot;&#039;) \n\t\t\t{\t\n\t\t\t\tIPV4&#x5B;j]=&#039;\\0&#039;; \/\/ filter\n\t\t\t  break;\n\t\t\t}\n\t\t}\n\t  }\t\n\t}\n\tmemset (wifi_send, &#039;\\0&#039;, 50);  \/\/ clear the buffer\n\tmemset (display, &#039;\\0&#039;, 140);     \/\/ clear the buffer\n\tcount=0;\n}\n<\/pre><\/div>\n\n\n<p class=\"has-text-color has-link-color wp-elements-901f7d59ed9c323e90a966d3f2c8a768 wp-block-paragraph\" style=\"color:#5c5c5c\">We are done with our initialization part. In our Bluetooth article we use serial Bluetooth terminal mobile app, here we use \ud83d\udcf1<a href=\"https:\/\/play.google.com\/store\/apps\/details?id=de.kai_morich.serial_wifi_terminal&amp;hl=en\">serial WiFi terminal mobile app<\/a>. In Devices -> Add Device with any name, Host with the esp8266 STAIP (Station IP Address) port 80. Here we use one GPIO for load on\/off &amp; one PWM signal. In this article we use system clock as 48MHz internal clock. For PWM the formula is-<\/p>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color wp-elements-cddbba49c1b72554ff9951c1dfee52aa wp-block-paragraph\" style=\"color:#252525\">&nbsp;&nbsp;&nbsp;&nbsp; PWM frequency f<sub>PWM<\/sub> = f<sub>cpu<\/sub>\/((1+Prescaler)*(1+ARR))<\/p>\n\n\n\n<p class=\"has-text-color has-link-color wp-elements-914f7c9edc96db7c425f7cf121c3ad80 wp-block-paragraph\" style=\"color:#5c5c5c\">Let ARR=19999 &amp;Prescaler 47, will generate a frequency of 50Hz. For 50% Duty cycle the CCRx register value will be 9999. Here I use Timer 15 channel 1 for PWM, for 50% Duty cycle-<\/p>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color wp-elements-63f5caa0b79403fcec475dfca6a11624 wp-block-paragraph\" style=\"color:#252525\">TIM15->CCR1=9999<\/p>\n\n\n\n<p class=\"has-text-color has-link-color wp-elements-00b252436734b7d748422ef9374aa960 wp-block-paragraph\" style=\"color:#5c5c5c\">Initialize UART with 115200 baud rate, 1 stop bit &amp; None parity. Here I use UART1 for communicating with Interrupt function. When we connect esp8266 with STAIP, the terminal will return &#8220;CONNECT&#8221; as string &amp; at disconnected &#8220;CLOSED&#8221; string. Reading string will tell us if the WiFi device is connected or not. Make some setting in the serial WiFi terminal mobile app so that different button will set different function.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"652\" height=\"218\" src=\"https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/function-8.jpg\" alt=\"\" class=\"wp-image-3428\" srcset=\"https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/function-8.jpg 652w, https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/function-8-300x100.jpg 300w\" sizes=\"(max-width: 652px) 100vw, 652px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-text-color has-link-color wp-elements-b103465219c80d68c413e4441514f7ac wp-block-paragraph\" style=\"color:#5c5c5c\">In the forever loop the controlling function of GPIO pin as-<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; auto-links: false; title: ; quick-code: false; notranslate\" title=\"\">\nif(strstr(RX_ST,&quot;load1&quot;))\n    {\n      HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);\n      if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1))\n      OLCD_write_string(5,1,&quot;LOAD 1 ON      &quot;);\n      else OLCD_write_string(5,1,&quot;LOAD 1 OFF     &quot;);\n\t  count=0;\n      memset (RX_ST, &#039;\\0&#039;, 140);     \/\/ clear the buffer\n\t  memset (display, &#039;\\0&#039;, 140);     \/\/ clear the buffer\n    }\n<\/pre><\/div>\n\n\n<p class=\"has-text-color has-link-color wp-elements-c449f4fa9448f51589b21cec26d28ee4 wp-block-paragraph\" style=\"color:#5c5c5c\">This is the same as Bluetooth tutorial. Here we use OLED 128*64 as display purpose. For\u00a0 controlling fan will be same-<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; auto-links: false; title: ; quick-code: false; notranslate\" title=\"\">\nchar fan_display&#x5B;16];\nuint8_t b_fan,duty=50;\nif(strstr(RX_ST,&quot;fan&quot;))\n    {\n      b_fan=b_fan^0x01;\n      if(b_fan)\n      {\n        HAL_TIM_PWM_Start(&amp;htim15,TIM_CHANNEL_1);\n        sprintf(fan_display,&quot;FAN Sp:%i    &quot;,duty);\n        OLCD_write_string(6,1,fan_display);\n      }else{\n        HAL_TIM_PWM_Stop(&amp;htim15,TIM_CHANNEL_1);\n        OLCD_write_string(6,1,&quot;FAN OFF        &quot;);\n      }\n\t  count=0;\n      memset (RX_ST, &#039;\\0&#039;, 140);     \/\/ clear the buffer\n\t  memset (display, &#039;\\0&#039;, 140);     \/\/ clear the buffer\n    }\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">For changing duty cycle, the code will be-<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; auto-links: false; title: ; quick-code: false; notranslate\" title=\"\">\nif(strstr(RX_ST,&quot;increment&quot;))\n    {\n     int speed=2;\n      if(b_fan)\n      {\n       speed++;\n       if(speed&gt;=5)speed=4;\n       switch(speed)\n       {\n       case 0: TIM15-&gt;CCR1=4999; \/\/for 25% duty cycle\n       OLCD_write_string(6,1,&quot;FAN ON SP:25% &quot;);\n       duty=25;\n       break;\n       case 1: TIM15-&gt;CCR1=9999; \/\/for 50% duty cycle\n       OLCD_write_string(6,1,&quot;FAN ON SP:50% &quot;);\n       duty=50;\n       break;\n       case 2: TIM15-&gt;CCR1=14999;\/\/for 75% duty cycle\n       OLCD_write_string(6,1,&quot;FAN ON SP:75% &quot;);\n       duty=75;\n       break;\n       case 3: TIM15-&gt;CCR1=17999;\/\/for 90% duty cycle\n       OLCD_write_string(6,1,&quot;FAN ON SP:90%  &quot;);\n       duty=90;\n       break;\n\t\t\t case 4: TIM15-&gt;CCR1=19998;\/\/for 100% duty cycle\n       OLCD_write_string(6,1,&quot;FAN ON SP:100%  &quot;);\n       duty=100;\n       break;\n       }\n      }\n\t  count=0;\n      memset (RX_ST, &#039;\\0&#039;, 140);     \/\/ clear the buffer\n\t  memset (display, &#039;\\0&#039;, 140);     \/\/ clear the buffer\n    }\n<\/pre><\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; auto-links: false; title: ; quick-code: false; notranslate\" title=\"\">\nif(strstr(RX_ST,&quot;decrement&quot;))\n    {\n     int speed=2;\n      if(b_fan)\n      {\n       speed--;\n       if(speed&lt;=0)speed=0;\n       switch(speed)\n       {\n       case 0: TIM15-&gt;CCR1=4999; \/\/for 25% duty cycle\n       OLCD_write_string(6,1,&quot;FAN ON SP:25% &quot;);\n       duty=25;\n       break;\n       case 1: TIM15-&gt;CCR1=9999; \/\/for 50% duty cycle\n       OLCD_write_string(6,1,&quot;FAN ON SP:50% &quot;);\n       duty=50;\n       break;\n       case 2: TIM15-&gt;CCR1=14999;\/\/for 75% duty cycle\n       OLCD_write_string(6,1,&quot;FAN ON SP:75% &quot;);\n       duty=75;\n       break;\n       case 3: TIM15-&gt;CCR1=17999;\/\/for 90% duty cycle\n       OLCD_write_string(6,1,&quot;FAN ON SP:90% &quot;);\n       duty=90;\n       break;\n\t   case 4: TIM15-&gt;CCR1=19998;\/\/for 100% duty cycle\n       OLCD_write_string(6,1,&quot;FAN ON SP:100%  &quot;);\n       duty=100;\n       break;\n       }\n      }\n\t  count=0;\n      memset (RX_ST, &#039;\\0&#039;, 140);     \/\/ clear the buffer\n\t  memset (display, &#039;\\0&#039;, 140);     \/\/ clear the buffer\n\t\t}\n<\/pre><\/div><\/div>\n<\/div>\n\n\n\n<p class=\"has-text-color has-link-color wp-elements-336b03b9f0063970a7a6740c46d2eaf4 wp-block-paragraph\" style=\"color:#5c5c5c\">Combine all the function will be our full program. This tutorial is very lengthy &amp; I discuss about some basic part. Please read my other articles then it will be easier to you. Please see my Youtube video &amp; download the full code, it will help you.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"IoT \u25b6 WiFi Load Control \u25b6 MCU - STM32 \u25b6 esp8266\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/EgfkohZPKTE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-3e41869c wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button has-custom-font-size has-medium-font-size\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/WiFi-LOAD-CONTROL.rar\" style=\"padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--50)\">download<\/a><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-text-color has-link-color has-medium-font-size wp-elements-5782a33285412983f14e4f4ab48b7934 wp-block-paragraph\" style=\"color:#252525\"><a href=\"https:\/\/iotthinghub.com\/wp-content\/uploads\/2025\/02\/WiFi-LOAD-CONTROL.rar\">WiFi LOAD CONTROL.rar<\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>WiFi (Wireless Fidelity) is a technology that allows devices to connect to the internet or communicate with each other wirelessly using radio waves. It operates based on the IEEE 802.11 standard, enabling high-speed data transfer over short distances. The ESP8266 operates exclusively in the 2.4 GHz frequency band. It supports WiFi communication based on the [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[],"class_list":["post-3399","post","type-post","status-publish","format-standard","hentry","category-wireless-iot"],"_links":{"self":[{"href":"https:\/\/iotthinghub.com\/index.php?rest_route=\/wp\/v2\/posts\/3399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iotthinghub.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/iotthinghub.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/iotthinghub.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/iotthinghub.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3399"}],"version-history":[{"count":29,"href":"https:\/\/iotthinghub.com\/index.php?rest_route=\/wp\/v2\/posts\/3399\/revisions"}],"predecessor-version":[{"id":3440,"href":"https:\/\/iotthinghub.com\/index.php?rest_route=\/wp\/v2\/posts\/3399\/revisions\/3440"}],"wp:attachment":[{"href":"https:\/\/iotthinghub.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/iotthinghub.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/iotthinghub.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}