|
查看您的Instagram帖子的表现会很有趣!我们将制作一个小工具来显示每分钟您的帖子系喜欢次数的速度。在本篇文章中,您将学习到如何通过ESP8266从网页获取数据并将其发送到Arduino以分析和运行其他执行器。在本文结束时,您可以学到: ● 将ESP8266连接到互联网并从网页获取数据。 ● 使用Arduino读取ESP8266数据并进行分析。 ● 从Instagram等社交媒体获取数据。 ● 制作一个可以向您展示Instagram喜欢次数速度的小工具。
所需的组件 ● 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,现在是我们的选择。
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根据数据改变伺服电机指针的位置。我们开始做吧。
电路连接
代码 首先,为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端口。 ● 按上传(箭头符号)按钮。 ● 现在一切准备好了! - #include "Servo.h"
- Servo myservo;
- String inputString = ""; // a String to hold incoming data
- boolean stringComplete = false; // whether the string is complete
- long flike;
- long like;
- long mlike;
- void setup() {
- // initialize serial:
- Serial.begin(115200);
- myservo.attach(9);
- // reserve 200 bytes for the inputString:
- inputString.reserve(200);
- }
- void loop() {
- // print the string when a newline arrives:
- if (stringComplete) {
- flike=like;
- like=inputString.toInt();
- Serial.println(like);
- // clear the string:
- inputString = "";
- stringComplete = false;
- }
- mlike=like-flike;
- mlike=mlike*20;
- //Serial.print(mlike);
- if (mlike==0) {mlike = 0;}
- if (mlike==1) mlike = 20;
- if (mlike<=10 && mlike>1) mlike = map(mlike, 1, 10, 20, 50);
- if (mlike<=30 && mlike>10) mlike = map(mlike, 10, 30, 50, 70);
- if (mlike<=50 && mlike>30) mlike = map(mlike, 30, 50, 70, 90);
- if (mlike<=70 && mlike>50) mlike = map(mlike, 50, 70, 90, 110);
- if (mlike<=100 && mlike>70) mlike = map(mlike, 70, 100, 110, 130);
- if (mlike<=200 && mlike>100) mlike = map(mlike, 100, 200, 130, 150);
- if (mlike<=500 && mlike>200) mlike = map(mlike, 200, 500, 150, 170);
- if (mlike<=1000 && mlike>500) mlike = map(mlike, 500, 1000, 170, 180);
- myservo.write(mlike);
- //Serial.print(" ");
- //Serial.println(mlike);
- delay(15);
- }
- /*
- SerialEvent occurs whenever a new data comes in the hardware serial RX. This
- routine is run between each time loop() runs, so using delay inside loop can
- delay response. Multiple bytes of data may be available.
- */
- void serialEvent() {
- while (Serial.available()) {
- // get the new byte:
- char inChar = (char)Serial.read();
- // add it to the inputString:
- inputString += inChar;
- // if the incoming character is a newline, set a flag so the main loop can
- // do something about it:
- if (inChar == '\n') {
- stringComplete = true;
- }
- }
- }
复制代码
现在是上传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中设置正确的端口。 已准备好上传。 - #include "InstagramStats.h"
- #include "ESP8266WiFi.h"
- #include "WiFiClientSecure.h"
- #include "JsonStreamingParser.h"
- char ssid[] = "Electropeak.com"; // your network SSID (name)
- char password[] = "electropeak1928374650"; // your network key
- WiFiClientSecure client;
- InstagramStats instaStats(client);
- unsigned long delayBetweenChecks = 1000; //mean time between api requests
- unsigned long whenDueToCheck = 0;
- //Inputs
- String userName = "arduino.cc"; // Replace your Username
- void setup() {
- Serial.begin(115200);
- WiFi.mode(WIFI_STA);
- WiFi.disconnect();
- delay(100);
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- }
- IPAddress ip = WiFi.localIP();
- }
- void getInstagramStatsForUser() {
- InstagramUserStats response = instaStats.getUserStats(userName);
- Serial.println(response.followedByCount);
- }
- void loop() {
- unsigned long timeNow = millis();
- if ((timeNow > whenDueToCheck)) {
- getInstagramStatsForUser();
- whenDueToCheck = timeNow + delayBetweenChecks;
- }
- }
复制代码
组装 上传代码并根据图片连接电路。 现在是时候为这个电路制作一个外壳了。 我们使用激光切割机制作带有机玻璃的外壳,并设计了一个贴在其上的仪表膜。 我们还用纸做了一个指针。
组装完成后,只需插上电源即可看到喜欢次数的速度。
下一步是什么? 您可以根据需要改进此项目。 以下是一些建议: ● 更改InstagramStats库以接收其他数据,例如关注者数量等。 ● 更改获取数据的速度以降低您的互联网利用率。 ● 尝试从Instagram上的视频帖子中获取数据。 |