PHP再学习5——RESTFul框架 远程控制LED
0.前言
【 PHP学习笔记——索引博文】
- CREATE TABLE IF NOT EXISTS `leds` (
- id int(11) NOT NULL AUTO_INCREMENT,
- description text NOT NULL,
- status text NOT NULL,
- PRIMARY KEY (id)
- ) DEFAULT CHARSET=utf8;
- INSERT INTO leds (id, description , status) VALUES (1, 'raspberry pi pcf8574-IO1','on');
- INSERT INTO leds (id, description , status) VALUES (2, 'raspberry pi pcf8574-IO2','off');
- <?php
- require 'rb.php';
- require 'Slim/Slim.php';
- \Slim\Slim::registerAutoloader();
- // 初始化数据库连接
- R::setup('mysql:host=localhost;dbname=mysql','root','<your password>');
- R::freeze(true);
- $app = new \Slim\Slim();
- // GET /leds
- $app->get('/leds', function () use ($app) {
- // 查找所有设备
- $led_array = R::getAll('select * from leds');
- $app->response()->header('Content-Type', 'application/json');
- // 按照JSON格式输出
- echo json_encode( $led_array , JSON_NUMERIC_CHECK);
- });
- $app->run();
- ?>
- // GET /leds/:id
- $app->get('/leds/:id', function ($id) use ($app) {
- try {
- // 查询数据库,只返回status状态
- $led_single = R::getRow('select status from leds where id = :id',array(':id'=>$id));
- if ($led_single) {
- $app->response()->header('Content-Type', 'application/json');
- // 按照JSON格式输出
- echo json_encode( $led_single, JSON_NUMERIC_CHECK);
- }
- else {
- $app->response()->status(404);
- }
- }
- catch (ResourceNotFoundException $e) {
- $app->response()->status(404);
- }
- catch (Exception $e) {
- $app->response()->status(400);
- $app->response()->header('X-Status-Reason', $e->getMessage());
- }
- });
- $app->put('/leds/:id', function ($id) use ($app) {
- try {
- // 获得HTTP请求中的JSON数据包
- $request = $app->request();
- $body = $request->getBody();
- $input = json_decode($body);
- // 查找编号为ID的记录
- $led = R::findOne('leds', 'id=?', array($id));
- // 重新修改status状态,并保存
- if ($led) {
- $led->status = (string)$input->status;
- R::store($led);
- } else {
- throw new ResourceNotFoundException();
- }
- } catch (ResourceNotFoundException $e) {
- $app->response()->status(404);
- } catch (Exception $e) {
- $app->response()->status(400);
- $app->response()->header('X-Status-Reason', $e->getMessage());
- }
- });
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import requests
- import smbus
- import RPi.GPIO as GPIO
- import time
- # 打开 /dev/i2c-1
- bus = smbus.SMBus(1)
- # 设备URI
- apiurl = 'http://192.168.1.100/leds/1'
- while True:
- #发送请求
- r = requests.get(apiurl)
- # 打印内容
- print(r.text)
- # 响应转换内容为字典形式
- # 转换为字典类型 请注意 2.7.4版本使用r.json()
- led = r.json
- # {'value':'xx'} on打开状态,off关闭状态
- if led['status'] == 'on':
- print("led on")
- bus.write_byte( 0x20 , 1 )
- else:
- print("led off")
- bus.write_byte( 0x20 , 0 )
- # 延时5S
- time.sleep(5)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
5G和千兆宽带 离民用还有多远?
就在土豪们的iphone6刚刚拿到手还没捂热,iphone7的谍照就开始曝光了。如同运营商们正在如火如荼地搭建4G,5G又开始被炒了起来。4G一夜之间就像个弃儿,这种刚刚以为自己登上顶峰,瞬间发现已落伍,欣喜紧跟着哀愁的跌宕起伏的心情,大概你我都能明了。眼看着无线网络进入5G时代,还有同样不甘心的民营运营商也炒起了千兆宽带的概念,这一切快得让还停留在3G网络及8M宽带的笔者,来不及分清是幻境还是现实。 看起来更像是炒作? 为何5G会被提上日程?因为物联网。由于智能终端的发展,很多的工作和生活可以通过终端来解决。据统计全球已经有140亿终端连接起来,但当今世界还有90%的东西未被连接。一如传言物联网将是未来真正的杀手级应用。它需要的是“人与物”、“物与物”之间的高速连接,这就需要更高速的无线网络支撑,而5G能够满足这一切。 虽然5G目前还只是个概念,但是运营商和设备商早已把5G描绘的天花乱坠,诸如5G相当于4G网络速率的100倍。在5G网络环境下,一部超高清画质的电影1秒内就可以搞定。它的典型应用场景从超高清、3D全息视频到智能家居、从智能监控到智能驾驶、从虚拟现实到智能传感器等。仿佛到...
- 下一篇
物联网学习笔记——构建RESTFul平台1
0.前言 前些时间顺着Yeelink学习了RESTFUL,使用PHP和Slim框架尝试实现简单的REST API,树莓派可通过GET方法获得JSON数据包,通过这种方式实现了树莓派和服务器(我的PC)的互动。但是由于没有WEB前端,所以只能使用cURL工具或直接修改数据库的方式改变LED状态, 体验非常差。 REST API入门体验可参考 【 PHP再学习4—— slim框架学习和使用】 【 PHP再学习5——RESTFul框架 远程控制LED】 受到【 开源IOT——一个最小的物联网系统设计方案及源码】一文的影响。我决定除了服务器和嵌入式侧之外,我应该再多做一些。 WEB前端涉及到非常多的知识,下面提供一些学习资料。下面各种技术您可能不知道但是您一定用过。 【HTML】——超文本标记语言 【CSS】——级联样式表,能够对网页中的对象的位置排版进行像素级的精确控制 【Javascript】——网络的脚本语言 【Jquery】——JavaScript 库,极大地简化了 JavaScript 编程 【Ajax】——异步的 JavaScript 和 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS关闭SELinux安全模块
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Linux系统CentOS6、CentOS7手动修改IP地址
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7,8上快速安装Gitea,搭建Git服务器