关于Arduino远程浇水遇到的问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7808|回复: 10

[未解决] 关于Arduino远程浇水遇到的问题

[复制链接]
发表于 2018-3-31 01:06 | 显示全部楼层 |阅读模式
设备:
板子:UNO R3
wifi模块:ESP8266-01s
水泵:3v的小水泵

遇到的问题:
将wifi模块作为客户端,服务器 在电脑上,水泵与继电器相连并单独供电,手机发送开启水泵指令,水泵开始运作,在串口监视器上出现大量奇怪的数据 ,无法控制,最后导致wifi模块重启(ets Jan 8 2013,rst c`use:4, boot mode3,0)),在连接小风扇时并没有出现类似问题,请问如何解决?
 楼主| 发表于 2018-3-31 01:17 | 显示全部楼层
补充一下:因为之前是学软件的,最近才开始学习Arduino,很多东西都不懂还望见谅。。
发表于 2018-3-31 01:36 | 显示全部楼层
8266重启。。。我感觉如果不是你供电问题,就是8266模块的固件bug
发表于 2018-3-31 07:39 | 显示全部楼层
上传完整程序帮你看一下
发表于 2018-3-31 12:37 | 显示全部楼层
我之前也遇到这个问题,1602乱码,后来发现是水泵的电源线导致干扰
 楼主| 发表于 2018-3-31 15:50 | 显示全部楼层
createskyblue 发表于 2018-3-31 12:37
我之前也遇到这个问题,1602乱码,后来发现是水泵的电源线导致干扰

请问有什么解决方案呢。
 楼主| 发表于 2018-3-31 17:57 | 显示全部楼层
sanhuasr 发表于 2018-3-31 07:39
上传完整程序帮你看一下

我即使改成通过串口发送消息 ,也会导致wifi模块重启

#include <SoftwareSerial.h>
#include <dht11.h>
#include "WiFiEsp.h"

//温湿度接口和变量
#define DHT11PIN 2
dht11 DHT11;

//wifi和LED接口
#define WIFI_TX       9
#define WIFI_RX       8
SoftwareSerial wifi(WIFI_RX, WIFI_TX);   //RX, TX
#define LED           13

//WIFI名称,密码,状态
char ssid[] = "ccc";         
char pass[] = "12345678";        
int status = WL_IDLE_STATUS;

//继电器
int relayPin = 7;
int val;

WiFiEspClient client;

//获得来自客户端的连续数据
String _comdata_wifi = "";   

void setup() {
  pinMode(LED,OUTPUT);
  digitalWrite(LED,HIGH);     //初始化LED为灭,HIGH为亮
  Serial.begin(9600);
  wifi.begin(115200);

  //继电器
  digitalWrite(relayPin,HIGH);
  pinMode(relayPin, OUTPUT);
  
  wifi.println("AT+CWMODE=1\r\n");          //设置为AP模式
  delay(100);
  wifi.println("AT+CIPMUX=1\r\n");          //设置为多连接模式
  delay(100);

  WiFi.init(&wifi);

  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    while (true);
  }

  //连接wifi
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);
  }
  
  delay(100);
  client.connect("192.168.191.1", 9000);
  delay(100);
}

void loop() {
  val=Serial.read();
  if(val=='A'){
    digitalWrite(relayPin, LOW); //LOW to poweroff the LED light on relayPin
  }
  if(val=='B'){
    digitalWrite(relayPin, HIGH);
  }

  //获得客户端通过WiFi发送的数据
  getWifiSerialData();
}

//接受Wifi模块的数据
void getWifiSerialData(){
  while (wifi.available() > 0){
    _comdata_wifi += char(wifi.read());
  }
  delay(10);
}

//通过wifi发送数据到客户端,发送数据需要按照固定的格式
void sendData(int connectionId,String data){
   String cipSend = "AT+CIPSEND=";
   cipSend += connectionId;
   cipSend += ",";
   cipSend +=data.length();
   cipSend +="\r\n";
   wifi.println(cipSend);
   wifi.println(data);
   int dataSize = cipSend.length();
   char d[dataSize];
   cipSend.toCharArray(d,dataSize);
   wifi.write(d,dataSize);
}
 楼主| 发表于 2018-4-1 00:39 | 显示全部楼层
已经解决了,继电器和水泵都需要单独供电,谢谢各位大佬!
发表于 2018-4-1 20:56 | 显示全部楼层
sendData()未见使用
发表于 2021-1-31 21:24 | 显示全部楼层
我也遇到了这个问题,请问您是用什么单独给继电器供电的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 13:49 , Processed in 0.075697 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表