STM32 Ethernet with W5500 (PART 5): STM32 as HTTP WebServer | LED Control
STM32 Ethernet with W5500 (PART 5): STM32 as HTTP WebServer | LED Control
0
Project description
π STM32μ W5500μΌλ‘ ꡬμΆνλ μ€μ©μ μΈ HTTP μΉ μλ²
β CGI μμ΄λ κ°λ₯ν μ€μ LED μ μ΄ νν λ¦¬μΌ μκ°
μ΄λ² μ½ν μΈ μμλ STM32 MCUμ WIZnet W5500 μ΄λλ· μΉ©μ νμ©νμ¬ HTTP μΉ μλ²λ₯Ό μ§μ ꡬμΆνλ λ°©λ²μ λ¨κ³λ³λ‘ μλ΄ν©λλ€. λ€νΈμν¬μ μ°κ²°λ μ₯μΉμμ μΉ λΈλΌμ°μ λ₯Ό ν΅ν΄ LEDλ₯Ό μ μ΄νλ μ€μ΅κΉμ§ ν¬ν¨λμ΄ μμ΄, μλ² λλ λ€νΈμν¬ κ°λ°μ μ²μ μ νλ λΆλ€μκ²λ λ§€μ° μ€μ©μ μΈ κ°μ΄λλ₯Ό μ 곡ν©λλ€.
π νν λ¦¬μΌ ν΅μ¬ λ΄μ© μμ½
1. νλ‘μ νΈ κ΅¬μ± λ° νκ²½ μ€λΉ
WIZnet W5500 μ μ© λΌμ΄λΈλ¬λ¦¬ νμΌμ νλ‘μ νΈμ 볡μ¬νμ¬ μ¬μ©
HTTP μλ² κ΅¬λμ μν μμ νμΌλ€λ ν¨κ» ν¬ν¨
W5500μ 8κ° μμΌ μ€
DHCP: μμΌ 7, DNS: μμΌ 6
μΉ μλ²μ© μμΌ: 2κ°(0, 1) μ¬μ©
2. μ μ μΉ νμ΄μ§ λ±λ‘
μλ²λ κΈ°λ³Έμ μΌλ‘ λ€μ μΈ κ°μ§ μ μ νμ΄μ§λ₯Ό μ 곡νλλ‘ μ€μ λ©λλ€.
/index.html β λ©μΈ νμ΄μ§
/ledon.html β LED μΌκΈ°
/ledoff.html β LED λκΈ°
κ° νμ΄μ§λ register_http_server_web_content() ν¨μλ₯Ό ν΅ν΄ URIμ λ§€νλμ΄ μλ²μ λ±λ‘λ©λλ€.
3. CGI μμ΄ κ΅¬ννλ λμ λμ μ²λ¦¬ (ν΅μ¬)
μΌλ°μ μΌλ‘ URI μμ²μ λ°λ₯Έ νΉμ νλμ ꡬννλ €λ©΄ CGI λ°©μμ μ¬μ©ν΄μΌ νμ§λ§, κ΅¬μ‘°κ° λ³΅μ‘νκ³ μλ² λλμμλ λΆλ΄μ΄ λ μ μμ΅λλ€.
μ΄ νν 리μΌμμλ CGIλ₯Ό μ¬μ©νμ§ μκ³ , HTTP Dynamic HandlerλΌλ 컀μ€ν ν¨μλ₯Ό μ§μ ꡬννμ¬ URI μμ²μθ§£ζνκ³ LED μ μ΄ λ‘μ§μ μνν©λλ€.
ꡬν λ°©μ
컀μ€ν νΈλ€λ¬ ν¨μ μμ±
http_dynamic_handler() ννμ μ¬μ©μ μ μ ν¨μ
μμ²λ URIλ₯Ό νμΈν΄ LED ON/OFF μν
HTTP Process Handlerμ μ§μ μ°κ²°
HTTP μμ² μ²λ¦¬ 루ν΄μ switch-case λ΄λΆμμ
κΈ°λ³Έ GET μ²λ¦¬ μ΄ν 컀μ€ν
νΈλ€λ¬λ₯Ό μλμΌλ‘ νΈμΆ
URI μ 보λ ꡬ쑰체 ννλ‘ μ λ¬
4. LED μ μ΄ λ‘μ§
STM32 보λμ PC13 νμ μ°κ²°λ LED μ μ΄
LEDλ Active Low λ°©μ
β LOW μ°κΈ°: LED μΌμ§
β HIGH μ°κΈ°: LED κΊΌμ§
if(strcmp(uri, "/ledon.html") == 0) {
led_control(LED_ON);
}
else if(strcmp(uri, "/ledoff.html") == 0) {
led_control(LED_OFF);
}
5. HTTP μλ² μ€ν ꡬ쑰
μΉ μλ²λ http_server_run() ν¨μκ° λ΄λΉνλ©° λ€μ κΈ°λ₯μ ν¬ν¨ν©λλ€:
μμΌ μ°κ²° μ²λ¦¬
HTTP μμ² νμ±
νμ΄μ§ μ μ‘
ν΄λΌμ΄μΈνΈ μ°κ²° μ μ§ λ° μ’ λ£
μ΄ ν¨μλ 무ν 루ν(while) μμμ μ§μμ μΌλ‘ νΈμΆλμ΄ μΉ μλ²κ° μμ λμνλλ‘ ν©λλ€.
6. μ€μ λμ κ²°κ³Ό
ν μ€νΈ νκ²½μμ W5500μ IP μ£ΌμμΈ 192.168.1.4μ μ μν ν:
μΈλ±μ€ νμ΄μ§ μ μ λ‘λ
LED On / Off λ²νΌ ν΄λ¦ μ LEDκ° μ¦μ λ°μ
URI μμ² β νΈλ€λ¬ β GPIO μ μ΄λ‘ μ΄μ΄μ§λ μ 체 νλ¦μ΄ μμ μ μΌλ‘ λμν¨μ νμΈ
π― μ΄ νν 리μΌμ μλ―Έ
μ΄ μμ λ λ¨μν LEDλ₯Ό μ μ΄νλ μμ€μ λμ΄,
βW5500 κΈ°λ° HTTP μλ²μμ CGI μμ΄λ μ€μ©μ μΈ λμ κΈ°λ₯ ꡬνμ΄ κ°λ₯νλ€β
λ μ μ λͺ ννκ² λ³΄μ¬μ£Όλ μ¬λ‘μ λλ€.
μλ² λλ νκ²½μμ REST API, μ₯μΉ μ μ΄, μ€μκ° λͺ¨λν°λ§ νμ΄μ§ λ±
νμ₯ν μλΉμ€λ₯Ό ꡬνν λ μ μ©ν ꡬ쑰λ₯Ό λ°°μΈ μ μμ΅λλ€.
β¨ λ§λ¬΄λ¦¬
STM32μ W5500 μ‘°ν©μ λ€μκ³Ό κ°μ μ₯μ μ΄ μμ΅λλ€:
νλμ¨μ΄ TCP/IP μ€ν κΈ°λ°μ μμ μ μΈ λ€νΈμν¬
μν MCUμμλ ꡬν κ°λ₯ν κ²½λ μΉ μλ²
URI κΈ°λ°μ μ μ°ν 컀μ€ν κΈ°λ₯ μΆκ° κ°λ₯
μ΄λ² νν 리μΌμ λ€νΈμν¬ μλ² λλ κ°λ° μ
λ¬ΈμλΆν°
μ€μ μ ν κ°λ°μκΉμ§ λͺ¨λμκ² λμμ΄ λ μ μλ μ€μ μμ μ
λλ€.