linux开发板最好芯片,既然是中国十大最有影响力的芯片之一 一定要有个好开发板...

原标题:既然是中国十大最有影响力的芯片之一 一定要有个好开发板

要评选中国影响力十大芯片,ESP8266必在其中。虽然开发文档有些混乱,各种生态纷杂,但它的低价,给了开发者更低门槛,也让更多人都参与到WiFi的开发体验中来。 从这种意义上来说,ESP8266是一款伟大的SoC!可能生态太繁茂了,所以官方开发板显得并不重要,曝光度也不高。但是我们还是想要尝试一下它的开发体验。下面正文开始

ESP8266系列产品是Espressif Systems生产的WiFi芯片,主要应用在物联网设备上。ESP8266系列目前包括ESP8266EX和ESP8285芯片及ESP32等。

ESP8266EX,简称为ESP8266是片上系统(SoC),集成了32位Tensilica微控制器,标准数字外设接口,天线开关,RF巴伦,功率放大器,低噪声接收放大器,滤波器和电源管理模块,体积小巧但功能强大。它提供2.4 GHz Wi-Fi(802.11 a/b/gn,支持WPA / WPA2),通用输入/输出(16 GPIO),内部集成电路(I²C),模数转换功能,串行外设接口(SPI),带有DMA的I²S接口(与GPIO共用引脚),UART(在专用引脚上,在GPIO2上可以使能仅发送UART)和脉冲宽度调制(PWM)。Espressif称为“L106”的处理器内核基于Tensilica' s Diamond Standard 106Micro 32位处理器控制器内核,运行频率为80 MHz(或超频至160 MHz)。它具有64 KiB引导ROM,32 KiB指令RAM和80 KiB用户数据RAM。(另外还包含32 KiB指令高速缓存RAM和16 KiB ETS系统数据RAM)。可以通过SPI访问外部闪存。芯片本身采用5 mm×5 mm Quad Flat No-Leads封装,带有33个连接焊盘 - 每侧有8个焊盘。

ESP-LAUNCHER是官方推出的功能评估板,然而奇怪的是,在林林总总的ESP8266开发板中,该板曝光频率并不高,倒是各种小型ESP8266模块频繁出现在开发者的视野中。ESP-LAUNCH接口丰富,使用方便;在开发环境方面,除了支持SDK开发模式之外,还支持使用Arduino,支持MicroPython等各种丰富的平台。

1f18b4d3c59f507fd974c5d420551777.png

开发板由两大块组成。一个ESP_TEST Board,上面包含ESP8266EX及4MB的SPI FLASH存储器,另外该子板还提供了一个天线接口,套件还提供了天线;另外一块是底板,提供了丰富的板载外设及接口。

cc813015c44bd2535dd2911b357e3205.png

装上天线的效果图,看起来高大上,是真高!

d89892f635d3769e341274e5c7b15271.png

ESP-LAUNCHER提供了丰富的板载资料及接口,如图所示。

ESP系列产品的核心是Tensilica微控制器,该产品并不开源,但是提供了SDK供用户访问及硬件硬件资源。ESP8266 SDK包括两种类型:支持OS的SDK及裸机SDK。

非OS SDK不基于操作系统。它支持IOT_Demo和AT命令的编译。非OS SDK使用计时器和回调作为执行各种功能的主要方式,例如由特定条件触发的嵌套事件和函数。非OS SDK使用espconn网络接口; 用户需要根据espconn接口的使用规则开发软件。

FreeRTOS SDK基于FreeRTOS,一个多任务操作系统。您可以使用标准接口来实现资源管理,回收操作,执行延迟,任务间消息传递和同步以及其他面向任务的流程设计方法。 RTOS SDK中的网络操作接口是标准的lwIP API,RTOS SDK提供了一个启用BSD Socket API接口的包,用户可以直接使用socket API开发软件应用程序; 并使用套接字API将ESP8266的其他应用程序移植到其他平台,有效降低了学习成本。

除此之外,官方还提供了其它一些配套的工具,如烧写程序可以用来将编译好的二进制代码写入到开发板;编译程序将用户编写的代码编译成二进制代码等。

9d55345f26c0ab31ec47f3943dca1389.png

这里还可以查看设备的MAC地址,可以看到包括两个MAC,一个是AP地址,另一个是STA地址。

使用SDK方式来开发,步骤略复杂。官方还提供了虚拟机,直接下载官方的虚拟机(Linux)就可以直接使用官方的SDK来进行程序开发工作了,好在万能的Arduino也提供了esp8266支持,使用起来也简单得多!

接下来的工作都是在Arduino中完成,实际上是使用Visual Studio 2017结合vMicro来完成的。

第一个程序是Hello, world,嗯,点灯!

第一步添加ESP8266硬件支持,在Boards Manager管理器里,安装esp8266支持

6f5e7397e840d6148e7a528091f2455c.png

接下来在Arduino中选择硬件类型,不过不幸的是,支持列表里找不到ESP-LAUNCHER的型号,很奇怪!既然找不到,就直接选择Generic ESP8266 Module

4a82a65086000f79cd1e0b920b48c23a.png

然后就是配置ESP8266的一些具体参数,如SPI存储的大小,时钟频率等信息

07ecdcc6d2d862244d748e96943fc2e3.png

这些设置要参考实际的模块型号来选择,这里有趣的一个设置是Builtin Led: 2这个选项!我们都知道Arduino的LED灯是连接在13号引脚,但是在其它平台,这就不一定了,像在ESP-LAUNCHER开发板上,就没有默认的LED,怎么办,设置这里就可以了

15f5c5725d9b86a6ebb584206c7dda82.png

参考官方原理图,这里可以使用GPIO12来做试验。

接下来就可以使用ARDUINO的blink程序来测试了,代码太常见,不上了!

说下插曲,按官方的文档,直接将GPIO0开关拔下来,就可以下载代码了,但是实际使用的时候没用,非得先关闭电源开关,然后再上电,刷刷刷的就开刷了!

第二个程序要来体验一下WIFI连接及测试情况,这个也简单,参考官方代码并精简一下,得到如下代码

// Visual Micro is in vMicro>General>Tutorial Mode

//

/*

Name: wificlient.ino

Created: 2018/8/17 17:43:41

Author: DESKTOPhnlsm

*/

// Define User Types below here or use a .h file

//

#include

const char* ssid = "xxxx";

const char* password = "xxxx";

// Define Function Prototypes that use User Types below here or use a .h file

//

// Define Functions below here or use other .ino or cpp files

//

// The setup() function runs once each time the micro-controller starts

void setup()

{

Serial.begin(115200);

delay(10);

Serial.println("Connecting to Local WiFi.");

WiFi.mode(WIFI_STA);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

}

// Add the main program code into the continuous loop() function

void loop()

{

}

默认使用DHCP方式从路由器获取IP地址,然后使用串口打印出来,loop()里什么也不干!

得到串口输出如下

881c883ba9b45f0a0b037049ccdb0f88.png

成功获取到IP地址,至此,已成功加入网络世界!

然而,这样并没有什么用!物联的魅力在于远程信息的获取及控制,所以咱得再来点个灯,不同的是,这一次点灯是通过网络来进行控制的。

网络通信的方式很多,低级一点的直接socket来进行,高级的则可以使用http来实现,不过这里咱们要来体验一把mqtt方式通信。

mqtt是专门用于物联网通信的协议,底层基于TCP/IP协议。mqtt通信效率高,可靠并且非常容易实现。Arduino平台有许多现成可用的,如PubSubClinet就是Arduino平台上使用频率非常高的一个组件。

关于mqtt,有兴趣的可以网上找找资料,非常好的一款物联网通信协议,这里不多介绍,上一段最精简的代码,实现网络点灯。

// Visual Micro is in vMicro>General>Tutorial Mode

//

/*

Name: wificlient.ino

Created: 2018/8/17 17:43:41

Author: DESKTOPhnlsm

*/

// Define User Types below here or use a .h file

//

#include

#include

const char* ssid = "xxxx";

const char* password = "xxxx";

const char* mqtt_server = "192.168.88.22";

#define LED 12

WiFiClient wifiClient;

PubSubClient mqttClient(wifiClient);

// Define Function Prototypes that use User Types below here or use a .h file

//

// Define Functions below here or use other .ino or cpp files

//

// The setup() function runs once each time the micro-controller starts

void setup()

{

pinMode(LED, OUTPUT);

Serial.begin(115200);

delay(10);

//setup wifi client

Serial.println("Connecting to Local WiFi.");

WiFi.mode(WIFI_STA);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

//setup mqtt client

mqttClient.setServer(mqtt_server, 1883);

mqttClient.setCallback(callback);

}

void callback(char* topic, byte* payload, unsigned int length) {

//for test only

char temp[40];

int i;

for (i = 0; i < length; i++) {

temp[i] = payload[i];

}

temp[i] = '0';

Serial.println(topic);

Serial.println(temp);

//program logic goes here

if (strcmp(topic, "led") == 0) {

if ((char)payload[0] == '1') {

digitalWrite(LED, LOW);

}

else {

digitalWrite(LED, HIGH);

}

}

}

void reconnect() {

while (!mqttClient.connected()) {

if (!mqttClient.connect("ESP8266Client")) {

delay(5000);

}

mqttClient.subscribe("led");

}

}

// Add the main program code into the continuous loop() function

void loop()

{

if (!mqttClient.connected()) {

reconnect();

}

mqttClient.loop();

}

mqtt需要一个服务器,服务器的作用是检查用户发布的消息,并将之发布到订阅了相关主题(topic)的用户,在程序的开头,除了指定WIFI配置相关参数,还指定了mqtt服务器,mqtt服务器默认的port号为1883。

reconnect()函数检查是否连接正常,如果正常,向用服务器订阅topic为led的消息,如果其它结点发布消息到该主题,esp8266就会接收到相关的消息。

代码的核心在callback函数里,当接收到一个订阅消息,先检查其主题是否为led,如果是,检查消息负载是0还是1,如果接收到的消息是0,灭灯,否则点亮灯!就这么简单,程序做了精简,只是为了演示功能,并没有考虑容错处理。

现在可以在另一个结点上发布消息来控制LED灯的亮灭。这里使用mosquitto来测试,如下

5dd33380e1ff67249e1654e34eb06782.png

mosquitto_pub命令的-t参数指定topic,-m参数指定消息,执行命令后在ESP8266的串口可以看到相关的内容输出

ff7c14851957e90c2d995617b0e13841.png

当然,GPIO12对应的LED灯也会相应的点亮或熄灭!

程序中也可以将采集到的传感器如温度、湿度等信息publish出去,供其它设备读取,从而实现ESP-LAUNCHER真正的物联功能!

除了支持C/C++之外,ESP8266还支持Java,MicroPython等编程语言,有兴趣的童鞋可以到官网上查看相关的支持,http://esp8266.net/上有很多有趣的资源。返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值