Build an ESP32 Web Server with Arduino IDE

แชร์
ฝัง
  • เผยแพร่เมื่อ 15 ก.ค. 2018
  • For complete project details (schematics + source code), visit ► randomnerdtutorials.com/esp32...
    In this project you’ll create a standalone web server with an ESP32 that controls outputs (two LEDs) using the Arduino IDE programming environment. The web server is mobile responsive and can be accessed with any device that as a browser on the local network. We’ll show you how to create the web server and how the code works step-by-step.
    Like my page on Facebook:
    / randomnerdtutorials
    Add me on Google+:
    plus.google.com/+RuiSantosdotme
    Follow me on twitter:
    / ruisantosdotme
    Subscribe for more projects like this!
    bit.ly/subscribeRNT
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 145

  • @RuiSantosdotme
    @RuiSantosdotme  5 ปีที่แล้ว +14

    You can find the complete project details (schematics + source code) at ► randomnerdtutorials.com/esp32-web-server-arduino-ide/

  • @NMrick505
    @NMrick505 5 ปีที่แล้ว +11

    One of the few ESP32 tutorials on TH-cam I've seen that actually worked for me. I was even able to change the GPIO pins to match those built into the ezsbc module. Off to add the third RGB pin on the module. Thanks.

  • @rafhaelcarvalho3659
    @rafhaelcarvalho3659 3 ปีที่แล้ว +3

    Parabéns Rui, sigo o randomnerds a algum tempo, material diferenciado. Congratulations !!!

  • @tubegor
    @tubegor 3 ปีที่แล้ว +4

    Wonderful tutorial, explained very thoroughly. Thank you very much.

  • @edinfific2576
    @edinfific2576 2 ปีที่แล้ว +1

    I love your step-by-step explanations. 👍🏻

  • @R4MMU5
    @R4MMU5 5 ปีที่แล้ว +4

    Wow, really good tutorial! Thank you.

  • @CdrSpock
    @CdrSpock 2 ปีที่แล้ว +1

    Well done! Very informative and compact

  • @uuuboy2003
    @uuuboy2003 4 ปีที่แล้ว

    This really helpful for me, thanks you so much.

  • @senthilkumaranmahadevan6531
    @senthilkumaranmahadevan6531 4 ปีที่แล้ว

    a brilliant work .... thank you for your contribution

  • @frankaerssens1730
    @frankaerssens1730 3 ปีที่แล้ว +1

    Thanks a lot ! very good tutorial and it worked perfectly

  • @CryptoGraphIndex
    @CryptoGraphIndex 3 ปีที่แล้ว +1

    is there a way to change the background of the webpage and use something like external CSS style sheets to make the buttons look nicer?

  • @n1kkri
    @n1kkri 3 ปีที่แล้ว

    When you open the com port do you use a standard USB cable connect to laptop with the other end connected to the dev board?
    I followed all your instructions installing the development board info but I lost what is the method of communications between the computer and the developement board?

  • @yeinsonjosesernahuamani9542
    @yeinsonjosesernahuamani9542 3 ปีที่แล้ว

    Excellent tutorial a question if the focus is on as I update it on the web I wait for your answer thanks

  • @masouddayaghi5923
    @masouddayaghi5923 4 ปีที่แล้ว

    thanks a lot man, it is a really nice video

  • @raphaellima4228
    @raphaellima4228 4 ปีที่แล้ว

    Hello Rui ! Thank you so much for sharing this. Congrats and I hope you sucess.

    • @RuiSantosdotme
      @RuiSantosdotme  4 ปีที่แล้ว

      You're welcome. thanks for watching!

  • @angst_
    @angst_ 3 ปีที่แล้ว +1

    When using Access Point mode, is the ip address always the same? Is there an easy way to make it static? I'm trying to avoid having to use a serial connection to figure out the ip address. It would be nice just to set it to 1.1.1.1 or something simple.

  • @carlos8529
    @carlos8529 4 ปีที่แล้ว +1

    obrigado rui, muito fixe da tua parte. fica a saber que sou teu fã à muito tempo. orbigado e abarco

  • @jonathanramirezolvera5858
    @jonathanramirezolvera5858 3 ปีที่แล้ว

    Can I turn of/on the gpios with others connections? For example from other countries?
    Thanks great project!!

  • @tonysmusic96
    @tonysmusic96 4 ปีที่แล้ว

    Hi Rui Santos! I'm beginning a Esp32 board. I can see more things about webserver when i watch this video. Thank you. Can you make a video about Socket Server and how to send data from Esp32 to Socket Server?

  • @carloseduardogomezlozano491
    @carloseduardogomezlozano491 3 ปีที่แล้ว

    Good lesson, thanks. It works well within range of Wi-Fi, such as from a remote site?. Blessings

  • @albertocavallini5009
    @albertocavallini5009 3 ปีที่แล้ว

    Very clear and helpful. Thank you very much...!

  • @jamesanderegg7655
    @jamesanderegg7655 5 ปีที่แล้ว

    How should I log and handle multiple clients? Every time a new client logs on I need to assign a LED and a unique HTML script. Make sense? One LED per user.

  • @ahmadmundhola3858
    @ahmadmundhola3858 4 ปีที่แล้ว

    Thank you sir, but Could you help about " Guru Meditation Error: Core 0 panic'ed (IllegalInstruction) "...Please help me

  • @stevetaylor2943
    @stevetaylor2943 3 ปีที่แล้ว

    With the 8266 being a high security risk for hacking and the new ESP32-S2 coming out what are some things we can do to make a more secure network using the ESP family of microcontrollers?

  • @thecraftsman8083
    @thecraftsman8083 3 ปีที่แล้ว +1

    Loved it!

  • @shahryarpasyar1481
    @shahryarpasyar1481 3 ปีที่แล้ว

    HI, Thanks a lot, it was very useful for me and I made it

  • @wademartin8822
    @wademartin8822 3 ปีที่แล้ว

    Very clear, many thanks!

  • @martinmacko7297
    @martinmacko7297 4 ปีที่แล้ว

    Hi! Could you please help with ESP32? My ESP 32 always gets disconnected from WIFI every 1-2 days. Do not you have issue?

  • @hazemalrajjal5354
    @hazemalrajjal5354 ปีที่แล้ว

    Hi Rui, everything is perfect and thank you for it! One issue I have is that I have images and none of them are loading in the website. I have the html code alone and the images are loading but when I move it to the arduino code every works but the images dont load, any help pls?

  • @anlpereira
    @anlpereira 5 ปีที่แล้ว

    Hi, great video. Can you make a bigger example? With a table etc. Thanks

  • @ugurcnar2866
    @ugurcnar2866 3 ปีที่แล้ว

    I have a question, can we change PWM signals by adding a submit button to webserver ? Thank you

  • @neki277
    @neki277 ปีที่แล้ว

    That is really cool. Thank you very much !!!

  • @olbapnairda
    @olbapnairda 2 ปีที่แล้ว +1

    would it work with the ssid / passwd from a smartphone hotspot?

  • @teku3985
    @teku3985 3 ปีที่แล้ว

    THANK YOU SO MUCH!

  • @sagi78
    @sagi78 4 ปีที่แล้ว

    Can there be multiple clients connected to the Webserver of ESP?

  • @jimsahr1272
    @jimsahr1272 3 ปีที่แล้ว

    Very Helpful! Thanks

  • @madhukeshnp
    @madhukeshnp 3 ปีที่แล้ว

    Can we add time based trigger of the led in the webserver ?

  • @ahsanfarooqi5663
    @ahsanfarooqi5663 3 ปีที่แล้ว

    Hi good evening. can we measure the signal distance? arduino to arduino using any wireless module? please replay thank you

  • @tzofficial6388
    @tzofficial6388 2 ปีที่แล้ว

    Amazing tutorial

  • @Madeireir0
    @Madeireir0 5 ปีที่แล้ว +3

    Excelente tutorial Muito Bom! Funciona sem erros e na perfeição

  • @zeyadyasser187
    @zeyadyasser187 4 ปีที่แล้ว

    i have an ov7670 camera if i connect it to the esp32 and made it send the pixel data to a web server will this display a video directly ? and if anyone knows what is the speed of the esp32 in transmitting data

  • @alphaO27
    @alphaO27 ปีที่แล้ว

    is it possible to display serial monitor data in webpage while preserving the same speed of serial monitor ? (say every 50ms)

  • @ManuelCastillo-kq3xy
    @ManuelCastillo-kq3xy 4 ปีที่แล้ว

    Hi, i need not only control 4 relay, Aldo need show 2 temperatures reading and show when action a water bomb.
    How to abord this proyect?
    1. 4 relays
    2. An temp sensor of water
    3. One ht22 sensor
    4. If temp is superior to the normal, power off the calefactor and power on the vent.
    I need your opinion and advise, please.

  • @arnierosen7743
    @arnierosen7743 2 ปีที่แล้ว

    I was wondering how to copy and where to paste the sketch in arduino. I pasted it into a new window and was using an esp32. I got error codes on verifying the code. I had copied it by highlighting the code and then pasting it on the new screen. Is this correct? I am currently using the simple wifi server which works but I really li,e your version of buttons much better. Was the code made for an esp32? Am I pasting it in the right place.
    ?

  • @martonhegedus2684
    @martonhegedus2684 หลายเดือนก่อน

    Nice and useful video, thx 4 upload... ;)

  • @fernandomartinho1201
    @fernandomartinho1201 4 ปีที่แล้ว

    Would it be possible to move from a flutter application to this web server?

  • @tsatsikhotle3946
    @tsatsikhotle3946 3 ปีที่แล้ว

    Thank you very much for tutorial

  • @SinanAkkoyun
    @SinanAkkoyun 4 ปีที่แล้ว

    y do you always use the DAC pins? ;)

  • @romycruz4498
    @romycruz4498 3 ปีที่แล้ว

    gpio state is opposite to the button. when u press on, the gpio will be off and vice versa? Pls clarify. Thanks.

  • @Holy_Quran879
    @Holy_Quran879 5 ปีที่แล้ว

    It is very very fantastic and great job, thanks very very much , very well explantion, are you have same example for bluetooth ? if yes please tell me , many thanks again,

  • @allersvp
    @allersvp 4 ปีที่แล้ว

    Hello Rui,
    i built a nice 4 buttons web server once as AP and another as STA, from ZERO knowledge but your youtube :) appreciate and thanks a Million ... one q please. >> can i have both AP AND ATA AT SAME TIME? so i am connected to the esp either i'm home (tablet and ESP as STA) or outside of the home with both ESP and TABLET (through AP)

  • @jorgeverdugo6071
    @jorgeverdugo6071 3 ปีที่แล้ว

    really helpful thanks

  • @ano6852
    @ano6852 ปีที่แล้ว

    Hello I was wondering if it was possible if I can also implement video streaming onto this code? I would follow the other esp32 robot cam car tutorial but the camera code doesn't make sense to me and there is no psuedocode :(

  • @kiran12n
    @kiran12n 4 ปีที่แล้ว

    The program uploaded and I have got the IP address also, but In my ckt, I am not able on the LEDs

  • @norbertkieser904
    @norbertkieser904 3 ปีที่แล้ว

    Excellent. Thank you very much.

  • @lukebrooks3294
    @lukebrooks3294 ปีที่แล้ว

    how comes the code from the description has extra code about current time etc.?

  • @eriklaken1025
    @eriklaken1025 5 ปีที่แล้ว

    Thank you a lot, i wil try to make en play with iT. :)

  • @carloscordeiro8218
    @carloscordeiro8218 5 ปีที่แล้ว

    Olá Rui,
    parabéns, excelente tutorial, faça um projeto liga e desliga led com MQTT, abraço!

    • @RuiSantosdotme
      @RuiSantosdotme  5 ปีที่แล้ว

      Hi Carlos, I have a tutorial about using the ESP32 with MQTT: randomnerdtutorials.com/esp32-mqtt-publish-subscribe-arduino-ide/
      Olá Carlos, obrigado pelo feedback! Pode ver o link anterior com um tutorial de ESP32 com MQTT. Abraço!

  • @Renan_Baldini
    @Renan_Baldini 5 ปีที่แล้ว

    Hi Rui Santos. Thanks for this video. You're a excellent teacher.
    I have one question... How may us modify this program to connect in any network?

    • @ctbully
      @ctbully 5 ปีที่แล้ว

      You cannot connect to any network without knowing the SSID and PASSWORD. Change the SSID and PASSWORD in the code to allow you to connect to other networks.

    • @christopheseyler3512
      @christopheseyler3512 3 ปีที่แล้ว

      @@ctbully use wifimanager library to include a configuration web server to allow to configure wifi credantials through a embedded web page .... this is an easy and clean solution

  • @antonisdiamantis970
    @antonisdiamantis970 3 ปีที่แล้ว +1

    Very nice video man 👍. Is there a way to access the esp32 but without being connected on the same network?

    • @taylormayhew369
      @taylormayhew369 ปีที่แล้ว

      i want to use remote control for a relay and see it on the server while having the button on my phone for back up control of the relay

  • @jatflash
    @jatflash 3 ปีที่แล้ว

    Hi. Very good video. Well explained. Do you have a version of this that creates a softAP so I don't need to connect via a router and can connect direct from a smartphone.

    • @LAL666666
      @LAL666666 3 ปีที่แล้ว

      Yes, he has.
      This guy is incredible. The tutorials are very educational. Asking for permission to place the link here, I also spent some time looking for it.
      randomnerdtutorials.com/esp32-access-point-ap-web-server/
      I am now looking for a way to skip the step where we need to write the address (192.168.4.1) in the browser.

  • @apmad5932
    @apmad5932 5 ปีที่แล้ว

    Hello, I'm new to Arduino. How do u make the interface? I mean do u code it manually the button? Or it is already there by itself?

  • @Blink-ut7uh
    @Blink-ut7uh ปีที่แล้ว

    Can somebody explain the use of the String currentline? Why is it used in the code?

  • @figuero3444
    @figuero3444 4 ปีที่แล้ว

    what if I dont want the server to run in a local network?

  • @yawarabbas9228
    @yawarabbas9228 11 หลายเดือนก่อน

    Plz guide me I want to control my office AC from my home so before going to office I can on it and when I reached office it already cooled down the office room.

  • @aminekhelifi837
    @aminekhelifi837 3 ปีที่แล้ว

    thanks bro

  • @lingsun5010
    @lingsun5010 3 ปีที่แล้ว

    Thank you for making this brilliant video! one question tho,
    with this method, is it possible to make the buttons on web server push buttons instead of switch buttons?
    meaning when i issue the command, i only send the "high" command to the pin once, instead of sending "high""high""high""high""high""high"continuously .

    • @RuiSantosdotme
      @RuiSantosdotme  3 ปีที่แล้ว

      Take a look at this guide "ESP32/ESP8266 Web Server: Control Outputs with Momentary Switch
      ": randomnerdtutorials.com/esp32-esp8266-web-server-outputs-momentary-switch/

    • @lingsun5010
      @lingsun5010 3 ปีที่แล้ว

      @@RuiSantosdotme Thank you sooooo much Rui!!! this has been most helpful.

    • @lingsun5010
      @lingsun5010 3 ปีที่แล้ว

      @@RuiSantosdotme Hi Rui, just wondering can this webserver respond in json format?

  • @Blink-ut7uh
    @Blink-ut7uh ปีที่แล้ว

    Can someone explain the meaning behind the line of code: WiFiClient client = server.available(); ? I understand that an object is created of the class WiFiClient but what is the server.available() function!?

  • @GiriPrasath001
    @GiriPrasath001 3 ปีที่แล้ว

    can i control it via internet from another network

  • @farazanwar153
    @farazanwar153 ปีที่แล้ว

    Informative actually it worked!. need your support, How can i add single stop button in source code.

  • @Lann91
    @Lann91 3 ปีที่แล้ว

    So it wont turn off a relay, i see that the green indicator led goes a little dimmer, but thats it.

  • @CalinColdea
    @CalinColdea 3 ปีที่แล้ว

    Good work!!!

  • @fanta6655
    @fanta6655 3 ปีที่แล้ว

    Multiple libraries were found for "WiFi.h"
    I have tried delete one and then delete other one but it says same problem

  • @cycordrilova5848
    @cycordrilova5848 2 ปีที่แล้ว

    How do I control the led across the internet not just local network

  • @JamesContackter
    @JamesContackter 4 วันที่ผ่านมา

    Thanks

  • @yovindujayasundara9512
    @yovindujayasundara9512 2 ปีที่แล้ว

    Can i use magicbit to do this tutorial??

  • @jonairsilvadesousa6379
    @jonairsilvadesousa6379 5 ปีที่แล้ว

    Hello Friend ! how do I add more than two buttons? I've always tried the error when compiling.

    • @xor128
      @xor128 4 ปีที่แล้ว

      you can read error message?

  • @SuperGhust
    @SuperGhust ปีที่แล้ว

    How to fix the sleep mode in esp32 after passed around 30 minute .. when it's on sleep mode it's not connect with the wifi .

  • @athuldas44
    @athuldas44 ปีที่แล้ว

    Thank u

  • @nguyentnhoang
    @nguyentnhoang 5 ปีที่แล้ว

    It takes forever to connect to my wifi, and then it will just disconnect. Do you have any idea why? My SSID has a blank space character. Is it the reason?

    • @ctbully
      @ctbully 5 ปีที่แล้ว

      SSID's must have no SPACES ! Replace space with an underscore then restart the router if you want to separate the SSID name.

  • @jonathanhughes9629
    @jonathanhughes9629 3 หลายเดือนก่อน

    Blimey! Like you said, worked first time. I went on to make it's IP address static on my adsl modem router and add it in NAT settings.. et voila... It works over the w.w.web too. I'm off to figure out if I can make it connect peer-peer when it starts up so I can configure my AP's ssid/pw on the fly with smartphone, like those connected household gadgets. anyway, Thank you.

  • @milaadna5482
    @milaadna5482 2 ปีที่แล้ว

    Code not working :( "In function 'void loop()':
    sketch_may27a:154:2: error: expected '}' at end of input
    }
    ^
    exit status 1
    expected '}' at end of input
    " help me with this pls

  • @SonalK
    @SonalK ปีที่แล้ว

    I guess you have to be on the same wifi network in order to control it. How do you make it so you can control it on mobile data for example?

    • @charleslyell3748
      @charleslyell3748 10 หลายเดือนก่อน

      One option is MQTT broker(server).

  • @theoisle
    @theoisle 5 ปีที่แล้ว

    How do you prevent outsiders from accessing the app if you make it available over the internet using port forwarding and DDNS?

    • @ctbully
      @ctbully 5 ปีที่แล้ว

      You need to build Authorisation into the Web Server, namely a Login and Password so that only authorized persons can use the app

  • @sunnyshrestha317
    @sunnyshrestha317 3 ปีที่แล้ว +1

    can u teach how to access from another network and type the ip address of my esp 32 and control...eg I want to control the leds of my home from office

    • @christopheseyler3512
      @christopheseyler3512 3 ปีที่แล้ว +1

      This is outside of the scope of the ESP32 programming .... You need an IP address seen on the "internet side" ... either your internet provider gives you a static address, or you have to use services like duckdns.org. Once you get that, you have to configure your router to forward specific port to you esp32 .... for example, your esp32 has an IP address on your local network if 192.168.1.5 and you have registered a DDNS (duckdns.org) to have a name like ThisIsMyHome.duckdns.org that pointing to your external address. So configure your router to forward TCP port 8080 to 192.168.1.5 ..... so, from your office, you will be able to access to your esp32 through ThisIsMyHome.duckdns.org:8080

    • @sunnyshrestha317
      @sunnyshrestha317 3 ปีที่แล้ว

      @@christopheseyler3512 thankyou I will try this

  • @thanhnam5813
    @thanhnam5813 5 ปีที่แล้ว

    Your video is awesome! But it only works with local area network, can you tell me how it works on wide area network? Thank you

    • @hariprast85
      @hariprast85 5 ปีที่แล้ว

      I have same question..

    • @pablosulecio
      @pablosulecio 4 ปีที่แล้ว

      @@hariprast85 me too

    • @user-kg9hk2wk6w
      @user-kg9hk2wk6w 4 ปีที่แล้ว

      If you want to be able to access the server from anywhere you should make a web-app and send arduino data to web-app database for example Mysql !When i mean web-app i mean bying domain name hosting etc etc..The above video works only for local networks and is used for home automation staff..

  • @Ray18619
    @Ray18619 5 ปีที่แล้ว

    Thank you for the beautiful flow. I am struggling as the IDE keeps giving me the compile message for WiFi that there are multiple files and I have tried installing various files. I have seen another tutorial using WiFi101 and I keep getting this message libraries\WiFi101\src\WiFiMDNSResponder.cpp:24:26: fatal error: avr/pgmspace.h: No such file or directory. Please can you help me out in any way. The basis of this is to link up temp, ultrasonic and DHT22 senors to ThingSpeak/Adafruit page

    • @RuiSantosdotme
      @RuiSantosdotme  5 ปีที่แล้ว

      Hi, please read this guide: randomnerdtutorials.com/esp32-troubleshooting-guide/ heading "5. Error compiling WiFiScan sketch" removing the Arduino Wi-Fi library should solve your problem

    • @Ray18619
      @Ray18619 5 ปีที่แล้ว

      Thank you so much, I have got it up and running. I am just struggling to have multiple sensors in the code. I have been following your videos and they have been a huge help

  • @Vrbii
    @Vrbii 2 ปีที่แล้ว

    Why doesnt i have anything on serial monitor once i upload it ?

  • @clobel55
    @clobel55 ปีที่แล้ว

    I cannot get the ESP32 to connect with the internet. I did update the SSID as well as the password

  • @jigglejogglers2606
    @jigglejogglers2606 6 หลายเดือนก่อน

    I followed step by step, but after getting the IP address. It always shows a "Time Out" error when typing it in my browser. How to solve this issue?

  • @itzelbenitazagalsoto264
    @itzelbenitazagalsoto264 5 ปีที่แล้ว

    where you make your schematic??????????????????????????????????

  • @scoopiezz
    @scoopiezz 5 วันที่ผ่านมา

    How to add more buttons

  • @jasonbuchanan4489
    @jasonbuchanan4489 2 ปีที่แล้ว

    Very good. One comment. Make sure you make the SSID password long enough. Or you will have problems generating the access point.

  • @Indian-pt4qm
    @Indian-pt4qm ปีที่แล้ว

    WHATS SSID AND WHERE CAN I GET IT???

  • @gosta72
    @gosta72 5 ปีที่แล้ว

    i have problem when upload,

  • @mridulsanthosh811
    @mridulsanthosh811 ปีที่แล้ว

    Why softap is so slow ??? Is there any solution for that?

  • @JBoek30
    @JBoek30 3 ปีที่แล้ว

    nice
    THX
    < 3

  • @bamzzbambangsubagyo3046
    @bamzzbambangsubagyo3046 3 ปีที่แล้ว +1

    Why my ESP32 can't print IP addres? I copy your source code without any change, but my ESP32 alyways show :
    "Connecting to......."
    I'm waiting over 5 minutes, but still can't print the IP addres
    Could you help me please?

    • @felipemarcal5860
      @felipemarcal5860 9 หลายเดือนก่อน

      hellow, i'm the same problem, do you have a solution?

  • @RiderRickMaker
    @RiderRickMaker 4 ปีที่แล้ว

    Olá Rui! Não faço ideia se és Português ou não, mas... Se sim, isto ainda funciona em Portugal? Cumprimentos!

    • @RuiSantosdotme
      @RuiSantosdotme  4 ปีที่แล้ว +1

      Sim, sou do Porto, Portugal. Claro, este projeto funciona em qualquer parte desde que tenhas Wi-Fi (router)

    • @RiderRickMaker
      @RiderRickMaker 4 ปีที่แล้ว

      @@RuiSantosdotme Desculpa, por acaso postei no video errado! (ups) Sim, eu queria postar no do SIM800L, visto que só suporta 2G, quero fazer um interface para o alarme da minha mota para poder activar/desactivar determinadas funções nela, a questão é que não sei se o 2G (ou não tenho a certeza se será mais assim) ainda é suportado por cá... tenho ideia que sim devido às infraestruturas do interior...
      Obrigado pela resposta!

    • @RuiSantosdotme
      @RuiSantosdotme  4 ปีที่แล้ว +1

      @@RiderRickMaker Pelo menos com a Vodafone ainda dá em Portugal, foi o que eu utilizei neste video. O melhor é procurar a tua operadora + 2G e ver até quando vai ser suportado

    • @RiderRickMaker
      @RiderRickMaker 4 ปีที่แล้ว

      ​@@RuiSantosdotme Boa! Obrigado! :)

  • @alanluo9728
    @alanluo9728 4 ปีที่แล้ว

    very good

    • @RuiSantosdotme
      @RuiSantosdotme  4 ปีที่แล้ว

      Thanks for watching, I'm glad it was helpful