작성
·
429
답변 3
0
wemos에 프로그램 소스는 잘 upload가 되는지요? 에러 없이요.
지금 사용하고 계시는 소스를 한번 올려주시면 제가 테스트해보고 말씀드리겠습니다. wemos에서 wifi는 어렵지 않게 접속이 되는데 제가 봐야겠습니다.
지금 wifi가 5g이면 접속이 않될수도 있구요. 2.4G정도면 접속이 되는경우도 있어서 테스트를 해봐야 겠습니다.
네 소스는 어제 저녁부터 정상적으로 업로드 되어있습니다. 일단 도서관 와이파이가 5g라서 어새벽쯤 집에가서 핸드폰으로 2.4 g로 바꾸고 시험했는데 여전히 안되더라구요.. 오늘 아침에도 도서관 5g(2.4,g+5g), 핸드폰 2.4g 공공와이파이 (2.4g+5g ) 테스트했는데 계속 똑같이 시리얼모니터에 저렇게 나와서당황스럽습니다.. 지금 바로 올라가서 소스 올리겠습니다. 감사합니다
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Update these with values suitable for your network.
const char* ssid = "Namsan";
const char* password = "namsanlib";
const char* mqtt_server = "10.138.89.91";
const char* clientName = "D1miniClientA";
// 자신의 mosquitto server 주소를 기록한다.
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
// Switch on the LED if an 1 was received as first character
if ((char)payload[0] == '1') {
digitalWrite(14, HIGH); // Turn the LED on (Note that LOW is the voltage level
// but actually the LED is on; this is because
// it is active low on the ESP-01)
} else {
digitalWrite(14, LOW); // Turn the LED off by making the voltage HIGH
}
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(clientName)) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("outTopic", "hello world");
// ... and resubscribe
client.subscribe("inTopic");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup() {
pinMode(14, OUTPUT); // Initialize the BUILTIN_LED pin as an output
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
unsigned long now = millis();
if (now - lastMsg > 2000) { //2초에 한번씩 실행
lastMsg = now;
++value;
snprintf (msg, MSG_BUFFER_SIZE, "hello world #%ld", value);
Serial.print("Publish message: ");
Serial.println(msg);
client.publish("outTopic", msg);
}
}
위소스 부터 테스트를하면 어디가 문제인지 파악이 어렵습니다.
아래소스를 스케치에 새로 파일을 만들어서 붙어넣고 wifi아이디, wifi 비번넣으시고
컴파일->업로드 하신후 시리얼 모니터창(COM port)을 확인해보시기 바랍니다.
시리얼 모니터창 하단에 보드레이트를 115200 으로 바꾸시고 wemos 리셋버튼을 한번눌러보세요.
#include <ESP8266WiFi.h>
#ifndef STASSID
#define STASSID "WIFI아이디"
#define STAPSK "WiFi비밀번호"
// 연결할 WiFi id, pw
const char* ssid = STASSID;
const char* password = STAPSK;
// WiFiClient를 선언한다.
WiFiClient client;
// WiFiServer 포트선언
WiFiServer webServer(80);
void setup() {
Serial.begin(115200);
// WiFi연결
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
// WiFi 연결이 되지않을때 ... 재연결
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected"); // WiFi 연결 성공!
// 웹 서버 start
webServer.begin();
Serial.println("Web server running. Waiting for the ESP IP...");
// IP 주소 출력
Serial.println(WiFi.localIP());
}
만약 COM3 라면 아래처럼 접속메세지가 뜰겁니다.^^
해보시고 다시 확인되는 내용 남겨줘보세요^^
혹시 endif는 어디어 들어가야 할까요? 에러가 나서요.. test.ino:3: error: unterminated #ifndef
3 | #ifndef STASSID
|
exit status 1
unterminated #ifndef
wifi접속은 이상없다는 건데요.
강의 교안에 5페이지부터가 wifi접속 실습이 있습니다. 이런식으로 접속을 확인하시면서 다음으로 PC에 구동중인 MQTT Server로 접속이 되는지 확인해보면 되구요.
wemos에서 mqttServer ip주소는 PC에서 ipconfig했을때 나오는 ip주소를 적어주시면 됩니다. 교재를 보시고 MQTT접속을 테스트해보시기 바랍니다.
0
네 강사님. 발행자 수신자로 값이 전달은 됩니다. 다만 강사님처럼 client 처리는 되지않고 client null 이라고만 나오고 있습니다. 혹시나 회로도가 잘못됬나 뺴고 다시 꼽느라 시간이 좀더 걸렸습니다. 혹시 원격으로는 어떻게 봐주실수 있는지 궁금해서 답글 남깁니다.. 실습환경은 1pc로 원격접속 환경은 아닙니다.
0
네. 교재 31page에 보시면
MQTT Server가 구동되어있다면
2개의 CMD창을 열고
한쪽 CMD창에서 mosquitto_sub -d -t /test 하시고
두번째 CMD창에서 mosquitto_pub -d -t /test -m "abc" 이렇게 하시고 엔터치면
첫번째 창에 abc라는 문자가 전달되는지 확인해보시기 바랍니다.
이부분이 되어야 MQTT 통신이 될수있습니다. 해보시고 알려주시면 제가 원격으로 봐드리든지 할께요
[아래부분도 참고해주세요]
- mqtt 실습시 다른 컴퓨터에서 mqtt server에 메시지를 전달할경우 혹시 메세지가 전달 되지 않는다면(IP가 서로 달라도 됩니다.)
1. mqtt server PC에서 방화벽을 해제 해주시고
2. 모든 IP에서 메시지를 받도록 mosquitto설치 폴더에서 mosquitto.conf 파일을 여시고 아래 2부분을 추가 및 수정 저장 하시고 다시 mosquitto서버를 재시작 해주시면 다른 CLIENT에서도 메세지 전송이 가능할것입니다.
- mosquitto.conf 파일 일부-
# listener port-number [ip address/host name/unix socket path]
[실습예시]
- cmd 창을 열고 수신 대기(server IP : 211.172.87.3)
C:\Program Files\mosquitto>mosquitto_sub -d -t /dht11
Hello
- cmd창을 열고 메세지 발행(다른쪽 PC)
C:\Program Files\mosquitto>mosquitto_sub -d -h 211.172.87.3 -p 1883 -t /dht11 -m "Hello"
네 강사님. 발행자 수신자로 값이 전달은 됩니다. 다만 강사님처럼 client 처리는 되지않고 client null 이라고만 나오고 있습니다. 혹시나 회로도가 잘못됬나 뺴고 다시 꼽느라 시간이 좀더 걸렸습니다. 혹시 원격으로는 어떻게 봐주실수 있는지 궁금해서 답글 남깁니다.. 실습환경은 1pc로 원격접속 환경은 아닙니다.
밑에 답변에 사진 첨부 해놨습니다.
문제결론 : 보드에서 moqt 통신이 안되는것 같습니다.
한번 강의다시보고 확인해보겠습니다