你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用STM32F469I构建Mongoose嵌入式网络库

[复制链接]
木木&点点 发布时间:2019-3-2 18:27
本帖最后由 点点&木木 于 2019-4-12 11:31 编辑
. W# q( N$ l: g8 }, q! d2 d& t! M. x7 x. t" L" |7 Y
Mongoose是目前最流行的开源嵌入式Web服务器和网络库,它支持mbed平台。
2 i5 u( _& h% W1 G" V. z4 ?9 Z, D
1.jpg
, |  T( @. v0 Z/ V+ J
$ D! x* _8 J0 B* ]

/ v  j# l6 u: Y7 b
这个项目中使用的东西
硬件组件
STMicroelectronics STM32F469I-DISCO
ARM mbed平台支持的任何主板   × 1      
CC3100BOOST SimpleLink CC3100 Wi-Fi BoosterPack   
德州仪器CC3100BOOST SimpleLink CC3100 Wi-Fi BoosterPack    ×       1      

; ^2 ^' w3 o9 v$ i5 j
; \3 o/ F( j$ [( |4 K
6 b& p0 k1 a( \9 i# [( f
介绍
我将向您展示如何使用Mongoose ,这是最受欢迎的开源嵌入式Web服务器和网络库,其中ARM支持的任何ARM板mbed都连接到TI CC3100 WiFi子板。

- j6 X/ G9 J# K5 j: o  p9 J8 n

# g2 I9 z. W+ l7 t' b( O  _9 |0 I

. N$ _  K; P9 \6 h4 Z) l7 J1 Q
布线
您需要做的就是用6根线将CC3100板连接到您的设备。将4条SPI线连接到SPI端口1的相应引脚。对于nHIB和IRQ线,您可以选择任何可用的GPIO。你可以很容易地找到SPI_MOSI,SPI_MISO,SPI_CLK,并SPI_CS与这幅画的帮助下板:
5 n/ P1 e+ c" Y( C. t7 e# o0 Q/ b
2.jpg
这是STM64的引脚图,因此您无需自己搜索:
3.jpg
7 s, I  H  r7 m# o
该mbed平台将主SPI定义为:
  SPI_MOSI   = PB_15,
   SPI_MISO   = PB_14,
   SPI_SCK    = PD_3,
   SPI_CS     = PH_6,
这在技术上就是SPI2。可能是因为SPI1用于驱动LCD屏幕。

& N6 ^% ^, K( H( Z9 a
只需连接相同名称的电线,即SPI_MOSISTM32连接到SPI_MOSICC3100(没有交叉输入/输出; MOSI代表主输出从输入)。
8 [- x. o! Q) P& s1 G

; h3 f6 S) Z% ^8 G' z" h5 X# y6 A& R' _
HTTP服务器
该项目的目标是构建一个连接到WiFi网络并托管HTTP服务器的设备。设备将运行一些自定义代码以响应传入的请求,例如闪烁LED并生成一些回复。

# H" @+ s# _# E. t
我简化了一下我在这里介绍的来源; 只是为了避免分心。您可以在此处找到动态Web服务器示例的源代码。

) q! |4 ~/ L. o: x, R1 n
1 G' {  d. U2 B& Y3 Q. k2 X! c; ?: w# q. p! J
int main() {
// configures networkinterface
SimpleLinkInterface wifi(PG_10, PG_11);  // nHIB, IRQpins
// disables defaultexample web server
sl_NetAppStop(SL_NET_APP_HTTP_SERVER_ID);
// connect to yourwifi network
wifi.connect("yourssid", "yourpass");
// ...
6 @, n/ O- Q( D
真棒。呼叫wifi.connect呼叫将阻塞,直到设备加入网络并获得IP地址,从而准备好运行。
$ g% D% `# e) a: x9 E1 C
我们可以访问有关WiFi连接的IP地址和其他信息:
const char *ip= wifi.get_ip_address();
const char *gw = wifi.get_gateway();
const char *mac = wifi.get_mac_address();
printf("IP address is: %s\n", ip ? ip : "No IP");
printf("GW address is: %s\n", gw ? gw : "No IP");
printf("MAC address is: %s\n", mac ? mac : "No MAC");

- ?3 K# a3 g9 z
或者我们可以启动动态Web服务器,为您的设备提供API:
mg_connection*nc = mg_bind(&mgr, "80", ev_handler);
mg_set_protocol_http_websocket(nc);
printf("Server address: http://%s\n", ip);

* s0 T; v, p# r6 A5 G
这将在默认端口上启动Web服务器http,您可以编写对HTTP请求作出反应的代码。我们来看看如何:
  t( m" N3 V) w0 w0 Y0 {- E) _3 g! O% N
void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {
switch (ev) {
   case MG_EV_ACCEPT: {
     // ...
     break;
   }
   case MG_EV_HTTP_REQUEST: {
     struct http_message *hm = (struct http_message *) ev_data;
     mg_send_response_line(nc, 200,
                           "Content-Type: text/html\r\n"
                           "Connection: close");
     mg_printf(nc,
               "\r\n<h1>Hello, Sir!</h1>\r\n"
               "You asked for %.*s\r\n",
               (int) hm->uri.len, hm->uri.p);
     // we're donewith the reply.
     nc->flags |= MG_F_SEND_AND_CLOSE;
     // Makesomething happen on the device
     led_blue = !led_blue;
     break;
   }
   case MG_EV_CLOSE: {
     // ...
     break;
   }
}
}

7 h! I0 x/ W3 B/ D5 c4 a
使用浏览器导航到在串行控制台上打印出来的URL。您应该看到一个简单的问候页面,由处理程序和相应的消息创建:MG_EV_HTTP_REQUEST
0x20000878: Connection from 192.168.1.15:38548
0x20000708: GET/
0x20000708: Connection closed
代码
--- mongoose-master.zip (3.82 MB, 下载次数: 72)
赞 收藏 评论2 发布时间:2019-3-2 18:27

举报

2个回答
Kevin_G 回答时间:2019-3-4 12:48:26
学习下
simpong 回答时间:2019-6-12 11:17:56
附件里没工程代码

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版