lcpsky

导航

使用安信可esp8266-1s连接arduino uno r3进行温度上传Http服务器

Arduino uno 嵌入式开发入门学习

材料准备

arduino uno r3 开发板

esp8266-1s WiFi模块

DS18B20 测温元件

排线若干

面包板一个

主要模块ESP8266-1S

ESP8266一款超低功耗的串口WiFi模块,专为移动设备和物联网应用设计,可将用户的物理设备连接到Wi-Fi 无线网络上,进行互联网或局域网通信,实现联网功能,本次实验通过该模块为arduino开发板增加联网功能

电路接线

ESP8266 Arduino Uno

UTXD <------> 1(TX1)

GND <------> GND

VCC <------> 3.3V(如果网络连接不稳定,则建议选择独立电源)

UTXD <------> 0(RX0)

Arduino Uno与DS18B20接线见https://blog.csdn.net/fitAllEnv/article/details/117048352

代码

#include "WiFiEsp.h"
#include<DS18B20.h>
// Emulate Serial1 on pins 6/7 if not present
#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"  
SoftwareSerial Serial1(7, 6); // RX, TX
#endif

DS18B20 ds(2); 
char ssid[] = "Tenda_18B210";            // 无线网名称 (name)
char pass[] = "*********";        // 无线密码
int status = WL_IDLE_STATUS;     // the Wifi radio's status

char server[] = "192.168.0.166"; //远程服务器ip

// Initialize the Ethernet client object
WiFiEspClient client;

void setup()
{
  // initialize serial for debugging
  Serial.begin(9600);
  // initialize serial for ESP module
  Serial1.begin(9600); //使用软串口,注意波特率不要高于57600
  // initialize ESP module
  WiFi.init(&Serial1);

  // check for the presence of the shield
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue
    while (true);
  }

  // attempt to connect to WiFi network
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network
    status = WiFi.begin(ssid, pass);
  }

  // you're connected now, so print out the data
  Serial.println("You're connected to the network");
  
  printWifiStatus();

  Serial.println();
  Serial.println("Starting connection to server...");
  // if you get a connection, report back via serial
  if (client.connect(server, 8080)) {
    Serial.println("Connected to server");
    // Make a HTTP request
//    client.println("GET /asciilogo.txt HTTP/1.1");
//    client.println("Host: arduino.cc");
//    client.println("Connection: close");
//    client.println();
  }
}

void loop()
{
  // if there are incoming bytes available
  // from the server, read them and print them
  while (client.available()) {
    char c = client.read();
    Serial.write(c);
  }

  // if the server's disconnected, stop the client
  if (!client.connected()) {
    Serial.println();
    Serial.println("Disconnecting from server...");  
    client.stop();

    // do nothing forevermore
    while (true){
      };
  }
  if(client.connected()){
     String temp = getAndSendTemperatureAndHumidityData(); // 获取温湿度数据发送到Http服务器上去
     client.println("Temp:"+temp+" C");   
     delay(2000);
  }
}


void printWifiStatus()
{
  // print the SSID of the network you're attached to
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength
  long rssi = WiFi.RSSI();
  Serial.print("Signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}
/*
 * 
 * 读取温湿度数据,然后发送到HTTP服务器上去
 * 
 */
String getAndSendTemperatureAndHumidityData()
{  
  return String(ds.getTempC());
}

结果验证

1.使用TCP测试工具启动一个HTTP服务器

在这里插入图片描述

2.烧写程序并打开串口查看结果
在这里插入图片描述

3.查看服务器
在这里插入图片描述

注意:

在实验过程发现我是用的arduino 3.3V给esp8266-1s供电网络不稳定,直接改成5v,就比较稳定了。

esp8266默认出厂波特率是115200,建议使用AT指令改一下:

AT+UART=9600,8,1,0,0 //更改串口频率

posted on 2021-05-31 23:53  lcpsky  阅读(262)  评论(0编辑  收藏  举报