风筝
发表于: 2019-1-4 10:07:41 | 显示全部楼层

查看您的Instagram帖子的表现会很有趣!我们将制作一个小工具来显示每分钟您的帖子系喜欢次数的速度。在本篇文章中,您将学习到如何通过ESP8266从网页获取数据并将其发送到Arduino以分析和运行其他执行器。在本文结束时,您可以学到:

●     将ESP8266连接到互联网并从网页获取数据。

●     使用Arduino读取ESP8266数据并进行分析。

●     从Instagram等社交媒体获取数据。

●     制作一个可以向您展示Instagram喜欢次数速度的小工具。

2-800x557.jpg


所需的组件

●    ElectroPeak ESP8266 ESP-01

●    Arduino Nano开发板

●    FTDI USB转TTL转换器

●    TowerPro MG995 55G金属齿轮伺服电机

●    Arduino IDE


ESP8266简介

在许多项目中,无线连接、Web访问和远程控制是非常有用的功能。 ESP-8266是一款低成本微控制器,具有完整的TCP / IP(传输控制协议和互联网协议)、32位MCU、10位ADC以及其他不同的接口,如PWM、HSPI和I2C,使微控制器能够连接到Wi- Fi网络。它是向项目添加wifi的最佳解决方案之一。


这款微控制器配有不同类型的模块,如ESP-01、ESP-12或其他开发板,如NodeMCU devkit、Wemos和Adafruit Huzzah。不同之处在于它们的引脚、易于使用所需的组件以及价格。微控制器有32个引脚,其16个引脚为GPIO;根据型号,提供的GPIO数量不同。对于ESP-01来说它只是两个引脚。使用ESP-8266时,您需要一个串行接口进行通信和编程。简单模块通常没有串行转换器(通常建议使用FTDI,但也可以使用其他转换器),它应该单独提供。内置稳压器、LED和上拉或下拉电阻是某些型号可能具有的其他功能;所有这些模块之间的最低成本是ESP-01,现在是我们的选择。

ESP8266.jpeg

ESP-01是esp-8266的第一个模块,它只有两个GPIO引脚,需要3.3V电源。它没有稳压器,所以一定要有可靠的电源。它没有转换器,因此您需要USB转TTL转换器。该模块的转换器(以及其他型号的ESP)应处于3.3V模式。这样做的原因是转换器将通过脉冲产生0和1,这些脉冲的电压应该可以识别ESP,所以在购买之前检查一下。由于GPIO引脚数量有限以及它们的低电流(每个12mA),我们可能需要更多引脚或更多电流;因此,我们可以轻松地使用带有模块的Arduino访问其IO引脚(另一种访问更多GPIO引脚的方法是将芯片上非常细的线连接到您需要的引脚头,但它不是一个好的和安全的解决方案)。如果您不想使用其他电路板,可以设计或使用电路来增加电流。


在本篇文章中,我们希望将ESP-01模块连接到Internet,然后从Instagram页面获取一些数据。我们将数据发送到Arduino并在处理完之后,Arduino根据数据改变伺服电机指针的位置。我们开始做吧。


电路连接

circuit.jpeg


代码

首先,为ESP-01编写代码,以便从Instagram页面获取数据,并通过串口将它们发送到Arduino。然后我们为Arduino编写另一个代码,从ESP-01获取数据并控制伺服电机。您可以使用Arduino IDE编译这两个代码并将它们上传到电路板。


您必须添加库,然后上载代码。如果这是您第一次运行Arduino开发板,请不要担心。只需按以下步骤操作:

●    访问www.arduino.cc/en/Main/Software并下载操作系统的软件。按照说明安装IDE软件。

●    运行Arduino IDE并清除文本编辑器,然后在文本编辑器中复制以下代码。

●    在tools and boards菜单中选择Arduino开发板。

●    将Arduino连接到PC并在工具和端口中设置COM端口。

●    按上传(箭头符号)按钮。

●    现在一切准备好了!

  1. #include "Servo.h"
  2. Servo myservo;
  3. String inputString = ""; // a String to hold incoming data
  4. boolean stringComplete = false; // whether the string is complete
  5. long flike;
  6. long like;
  7. long mlike;
  8. void setup() {
  9. // initialize serial:
  10. Serial.begin(115200);
  11. myservo.attach(9);
  12. // reserve 200 bytes for the inputString:
  13. inputString.reserve(200);
  14. }
  15. void loop() {
  16. // print the string when a newline arrives:
  17. if (stringComplete) {
  18. flike=like;
  19. like=inputString.toInt();
  20. Serial.println(like);
  21. // clear the string:
  22. inputString = "";
  23. stringComplete = false;
  24. }
  25. mlike=like-flike;
  26. mlike=mlike*20;
  27. //Serial.print(mlike);
  28. if (mlike==0) {mlike = 0;}
  29. if (mlike==1) mlike = 20;
  30. if (mlike<=10 && mlike>1) mlike = map(mlike, 1, 10, 20, 50);
  31. if (mlike<=30 && mlike>10) mlike = map(mlike, 10, 30, 50, 70);
  32. if (mlike<=50 && mlike>30) mlike = map(mlike, 30, 50, 70, 90);
  33. if (mlike<=70 && mlike>50) mlike = map(mlike, 50, 70, 90, 110);
  34. if (mlike<=100 && mlike>70) mlike = map(mlike, 70, 100, 110, 130);
  35. if (mlike<=200 && mlike>100) mlike = map(mlike, 100, 200, 130, 150);
  36. if (mlike<=500 && mlike>200) mlike = map(mlike, 200, 500, 150, 170);
  37. if (mlike<=1000 && mlike>500) mlike = map(mlike, 500, 1000, 170, 180);
  38. myservo.write(mlike);
  39. //Serial.print("    ");
  40. //Serial.println(mlike);
  41. delay(15);
  42. }
  43. /*
  44. SerialEvent occurs whenever a new data comes in the hardware serial RX. This
  45. routine is run between each time loop() runs, so using delay inside loop can
  46. delay response. Multiple bytes of data may be available.
  47. */
  48. void serialEvent() {
  49. while (Serial.available()) {
  50. // get the new byte:
  51. char inChar = (char)Serial.read();
  52. // add it to the inputString:
  53. inputString += inChar;
  54. // if the incoming character is a newline, set a flag so the main loop can
  55. // do something about it:
  56. if (inChar == '\n') {
  57. stringComplete = true;
  58. }
  59. }
  60. }
复制代码

现在是上传ESP-01代码的时候了。 我们想使用Arduino IDE将草图上传到ESP。 在上传代码之前,您应该为IDE选择ESP开发板。


转到File > Preferences,并在additional boards中输入http://arduino.esp8266.com/stable/package_esp8266com_index.json。 然后下载并安装。 现在您可以在Tools>Board上看到ESP开发板了。 选择“Generic ESP8266 Module”并将代码复制到新草图中。 下载“InstagramStats”库并将其添加到IDE。 请注意,我们已经修改了库,因此您应该在此处下载它。 然后你应该将USB设置为TTL转换器作为上传器硬件。 只需插入转换器并在Tools > Port中设置正确的端口。 已准备好上传。

  1. #include "InstagramStats.h"
  2. #include "ESP8266WiFi.h"
  3. #include "WiFiClientSecure.h"
  4. #include "JsonStreamingParser.h"
  5. char ssid[] = "Electropeak.com"; // your network SSID (name)
  6. char password[] = "electropeak1928374650"; // your network key
  7. WiFiClientSecure client;
  8. InstagramStats instaStats(client);
  9. unsigned long delayBetweenChecks = 1000; //mean time between api requests
  10. unsigned long whenDueToCheck = 0;
  11. //Inputs
  12. String userName = "arduino.cc"; // Replace your Username
  13. void setup() {
  14. Serial.begin(115200);
  15. WiFi.mode(WIFI_STA);
  16. WiFi.disconnect();
  17. delay(100);
  18. WiFi.begin(ssid, password);
  19. while (WiFi.status() != WL_CONNECTED) {
  20. delay(500);
  21. }
  22. IPAddress ip = WiFi.localIP();
  23. }
  24. void getInstagramStatsForUser() {
  25. InstagramUserStats response = instaStats.getUserStats(userName);
  26. Serial.println(response.followedByCount);
  27. }
  28. void loop() {
  29. unsigned long timeNow = millis();
  30. if ((timeNow > whenDueToCheck)) {
  31. getInstagramStatsForUser();
  32. whenDueToCheck = timeNow + delayBetweenChecks;
  33. }
  34. }
复制代码

组装

上传代码并根据图片连接电路。 现在是时候为这个电路制作一个外壳了。 我们使用激光切割机制作带有机玻璃的外壳,并设计了一个贴在其上的仪表膜。 我们还用纸做了一个指针。

Assembling.jpeg

组装完成后,只需插上电源即可看到喜欢次数的速度。


下一步是什么?

您可以根据需要改进此项目。 以下是一些建议:

●    更改InstagramStats库以接收其他数据,例如关注者数量等。

●    更改获取数据的速度以降低您的互联网利用率。

●    尝试从Instagram上的视频帖子中获取数据。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-20 10:03 , Processed in 0.150620 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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