티스토리 뷰
728x90
1. 개요 |
어떠한 제품을 만들때 제품의 설정 값을 동적으로 변경되어야 할 때가 있다. 또한 매번 해당 설정 값을 전원을 켤때마다 하는 것은 비효율 적이다. 이를 해결하기 위해 전원이 없어도 데이터가 초기화 되지 않는 EEPROM 또는 Flash Memory에 저장을 한다.
이번 예제는 특수 데이터를 Web을 이용하여 EEPROM에 변경 저장을 하는 예제이며 해당 데이터가 전원을 껐다 켜도 남아있는 것을 확인한다.
Test 보드는 NodeMCU를 사용하였으며 ESP제품이 아닌 다른 제품을 이용할 시에는 라이브러리를 기본 라이브러리인 WIFI.h 및 WebServer.h를 추가하면 된다.
2. Source Code |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <EEPROM.h> #define EEP_DATA_LEN 30 const char * ssid = "SSID" ; const char * passphrase = "PSWD" ; IPAddress mystaticip(192, 168, 0, 11); IPAddress mygateway(192, 168, 0, 1); IPAddress mysubnet(255, 255, 255, 0); ESP8266WebServer server(80); WiFiClient espClient; String content, data = "" ; int statusCode; bool setWIFI() { Serial.print( "Connecting to " ); Serial.println(ssid); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print( "." ); WiFi.mode(WIFI_STA); } Serial.println( "" ); Serial.println( "WiFi connected" ); Serial.println( "IP address: " ); Serial.println(WiFi.localIP()); return true ; } void readEEPROM(){ data = "" ; char temp; Serial.println(); for ( int i = 0; i < EEP_DATA_LEN; ++i) { temp = char (EEPROM.read(i)); if (temp == '!' ) break ; data += temp; } Serial.println( "Read Data : " ); Serial.println(data); Serial.println(); } void launchWeb( int webtype) { createWebServer(webtype); server.begin(); } void createWebServer( int webtype) { if ( webtype == 0 ) { server.on( "/" , []() { content = "<!DOCTYPE HTML>\r\n" ; content += "<H1>Setting Data</H1><p>" ; content += "<p>Current Data : " ; content += data; content += "</p><form method='get' action='setting'><label>Input New Data: </label><input name='data' length=32><br><input type='submit'></form>" ; content += "" ; server.send(200, "text/html" , content); }); server.on( "/setting" , []() { data = server.arg( "data" ); int len = data.length(); if (len > 0 ) { for ( int i = 0; i < EEP_DATA_LEN; ++i) { EEPROM.write(i, 0); //clearing } EEPROM.commit(); for ( int i = 0; i < len ; ++i) { EEPROM.write(i, data[i]); } EEPROM.write(len, '!' ); EEPROM.commit(); content = "{\"Success\":\"saved to eeprom... reset to boot into new wifi\"}" ; statusCode = 200; } else { content = "{\"Error\":\"404 not found\"}" ; statusCode = 404; Serial.println( "Sending 404" ); } server.send(statusCode, "application/json" , content); }); } } void setup() { // put your setup code here, to run once: Serial.begin(115200); EEPROM.begin(512); readEEPROM(); WiFi.begin(ssid, passphrase); WiFi.config(mystaticip, mygateway, mysubnet); //set static IP if (setWIFI()) { launchWeb(0); //OK return ; } delay(1000); } void loop() { // put your main code here, to run repeatedly: server.handleClient(); } |
'HardWare > 아두이노' 카테고리의 다른 글
NFC Module for Arduino V1.0(SKU:DFR0231) Sample Code (0) | 2017.06.28 |
---|---|
EEPROM+Serial을 이용한 Setting(AT) 만들기 (2) | 2017.01.10 |
아두이노 - MQTT 사용하기 (0) | 2016.12.02 |
Arduino IDE로 ESP8266 업로드 및 WIFI 예제 (5) | 2016.12.01 |
아두이노 - RGB LED(LS5050RGB, KY-009) 사용하기 (0) | 2016.10.11 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바 입출력
- LISTVIEW
- java
- Notification
- java url
- android
- 카운터
- Java Decompiler
- 유전
- counter
- 5582
- 서버
- jad
- 유전 알고리즘
- vim
- Res
- 포켓몬 Go
- 인텐트
- Service
- 아두이노
- 알고리즘
- 안드로이드
- 파일 입출력
- c언어
- 포켓몬 고
- vim 설치
- java 파일 입출력
- php
- 테라펀딩 #투게더펀딩 #P2P투자 #부동산 소액 투자 #카카오 #토스
- 파일입출력
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함