利用arduino ide制作的桌面摆件

利用arduino ide制作的桌面摆件

利用arduino ide制作的桌面摆件_第1张图片
利用arduino ide制作的桌面摆件_第2张图片

- 工具
- nodemcu
- arduino ide
- 串口屏(淘宝38元)
- 杜邦线3根。。。。。
- 外壳–学校3D打印室没开门,所以暂且装在盒子里。

这是很早以前就想做的作品,因为它不像大的作品那样,所以比较拖沓,一直没做,最近想给女朋友做一个桌面摆件,所以用了一整天的时间来做这个小玩物,整体思路就是利用esp的网络功能来获取网页数据接口返回的数据包括时间,天气,甚至英语,发给串口屏来显示,其中也是一路艰辛,毕竟好久没玩硬件了,也是相当麻烦的。


首先是串口屏的ui设计,极简,毕竟自己没有太高级的审美,串口屏的教程也是相当复杂的,之前淘宝店给的教程一直没空看,当时感觉老复杂了,就一直搁置了。这次果断拿出来认真看了看,突然发现还是很简单的,毕竟由相应的上位机使用。


然后就是代码的编写,总结如下:
最厉害的就是自动配网的功能-堪称超级无敌:

void smartConfig()
{
  WiFi.mode(WIFI_STA);
  Serial.println("\r\nWait for Smartconfig");
  WiFi.beginSmartConfig();
  while (1)
  {
    Serial.print(".");
    digitalWrite(LED, 0);
    sao_sao();
    delay(500);
    digitalWrite(LED, 1);
    delay(500);
    if (WiFi.smartConfigDone())
    {
      Serial.println("SmartConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      break;
    }
  }
}

网页数据分析这次都是用的GET访问

void http() {
  HTTPClient http;
  http.begin(webadd);
  int httpCode = http.GET();
  if (httpCode > 0) {
    payload = http.getString();
    //Serial.println(payload);
    int a = payload.indexOf("101180101");//自己搜索链接可知指定城市的id郑州市的id为‘101180101’
    //indexof();在字符串中中查找字符位置,返回值为给定字符的第一个位置,查找失败返回-1
    com = payload.substring(a - 280, a + 12);
  }
  http.end();
}

还有就是网页数据解析的精髓:

  • 字符处理–适用于网页源码的解析
  • JSON解析–适用于api反馈的json

/*************************************截取字符数据处理*******************************************/
void data() {
  int i = 0;
  i = com.indexOf("tem1");
  tem1 = com.substring(i + 6, i + 8);
  i = 0;
  i = com.indexOf("tem2");  //tem2="24"
  tem2 = com.substring(i + 6, i + 8);
  i = 0;
  i = com.indexOf("temNow");
  temnow = com.substring(i + 8, i + 10);
  i = 0;
  i = com.indexOf("humidity");
  humi = com.substring(i + 10, i + 13); //humidity="27%"
  i = 0;
  i = com.indexOf("state1");
  state1 = com.substring(i + 8, i + 9);
  i = 0;
  i = com.indexOf("state2");
  state2 = com.substring(i + 7, i + 11);
  i = 0;
}

/*********************************获取时间**************************************/
void get_time()
{
  HTTPClient http;
  http.begin(time_url);
  int httpCode = http.GET();
  if (httpCode > 0) {
    payload = http.getString();
    //Serial.println(payload);
    /************************************json 数据处理********************************************/
    DynamicJsonDocument doc;
    String  input =   payload;
    deserializeJson(doc, input);
    JsonObject& obj = doc.as();
    String  daytime = obj["sysTime2"];
    time0 = daytime;
    time1 = daytime.substring(0, 10);//2018-06-17
    time2 =  daytime.substring(11, 19);//2018-06-17
  }
  http.end();
}

小白博客:http://wenzheng.club/
整体代码放在GitHub里,欢迎关注
https://github.com/az666/nodemcu_tianqi


有问题欢迎讨论。

你可能感兴趣的:(利用arduino ide制作的桌面摆件)