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)

PHP再学习5——RESTFul框架 远程控制LED的更多相关文章
- 树莓派学习笔记——Restful服务 采用slim php apache
0.前言 前些时间沉迷于Restful,采用PHP+Slim+MySQL实现了一些简单的API函数.但是这些工作都是在windows中实现(采用wamp server集成安装包),但是转到li ...
- 玩转OneNET物联网平台之MQTT服务⑦ —— 远程控制LED(数量无限制)+ Android App控制 优化第一版
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- [源码解析] 深度学习分布式训练框架 horovod (18) --- kubeflow tf-operator
[源码解析] 深度学习分布式训练框架 horovod (18) --- kubeflow tf-operator 目录 [源码解析] 深度学习分布式训练框架 horovod (18) --- kube ...
- Java并发包源码学习之AQS框架(四)AbstractQueuedSynchronizer源码分析
经过前面几篇文章的铺垫,今天我们终于要看看AQS的庐山真面目了,建议第一次看AbstractQueuedSynchronizer 类源码的朋友可以先看下我前面几篇文章: <Java并发包源码学习 ...
- Java并发包源码学习之AQS框架(三)LockSupport和interrupt
接着上一篇文章今天我们来介绍下LockSupport和Java中线程的中断(interrupt). 其实除了LockSupport,Java之初就有Object对象的wait和notify方法可以实现 ...
- RESTful框架调研
背景 当前的开放服务平台发展趋势,是服务使用者变得多种多样,其中既有各种前端设备(台式机.手机等),又有各种后端服务器,因此必须有一个统一的机制,方便各种服务使用者和开放服务平台进行通信.为了更好的实 ...
- golang学习之beego框架配合easyui实现增删改查及图片上传
golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...
- 最好的8个 Java RESTful 框架
原文出处: colobu 过去的每一年,涌现出越来越多的Java框架.就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的.连我的老祖母现在也使用 一个我从来没有听说过而且可 ...
- 对比深度学习十大框架:TensorFlow 并非最好?
http://www.oschina.net/news/80593/deep-learning-frameworks-a-review-before-finishing-2016 TensorFlow ...
随机推荐
- 使用Gogs搭建自己的Git服务--windows
Gogs介绍 官方网站:传送门... 使用Gogs可以搭建一个自己的私有Git服务. 有时候我们有一些有些不想公开的私人小项目或者练习项目,源码想放在GitHub.码云(一直觉得这名字有点蹭知名度)这 ...
- 解决springmvc拦截器拦截静态资源的两种方式
1.是采用<mvc:default-servlet-handler />,(一般Web应用服务器默认的Servlet名称是"default",所以这里我们激活Tomca ...
- vue 之 axios Vue路由与element-UI
一. 在组件中使用axios获取数据 1. 安装和配置axios 默认情况下,我们的项目中并没有对axios包的支持,所以我们需要下载安装. 在项目根目录中使用 npm安装包 npm install ...
- Python 之并发编程之协程
一.协程 ''' def gen(): for i in range(10): yield i # 初始化生成七函数 返回生成器对象,简称生成器 mygen = gen() for i in myge ...
- RuntimeError: cuda runtime error (10) : invalid device ordinal
This is caused by the unmatching of gpu device number when loading a saved model. torch.load('my_fil ...
- Vue学习笔记:计算属性
使用函数的缺点 如果我们想要将数据经过转化后再显示,或者多个数据结合起来进行显示,一般可以直接在数据渲染或者数据绑定的时候书写表达式 如果表达式过于复杂,或者逻辑太多的时候,我们可以将其封装在函数里, ...
- Android编程实现点击链接打开APP功能示例
本文实例讲述了Android编程实现点击链接打开APP功能.分享给大家供大家参考,具体如下: 在Android中点击链接打开APP是一个很常见的需求.例如,电商为用户发送优惠券之后经常会下发一条短信: ...
- iOS 开发之 开发一款自己的美颜相机
以前在公司做项目时很少遇到对相机.图片进行处理的(非公司业务),只是偶尔上传,裁剪,预览下.近期自己准备写个相机应用,把图片处理的这些技术细节整理下.包含美颜相机,图片美化,简单拼图,艺术拼图等主要模 ...
- 解题报告:luogu P2220
指挥使走后一脸懵逼,然后想起了一道水\(SB\)的省选题. 这是毒瘤乘法分配率的应用,似乎还有一篇,算是入门题. 对了,这题连接:P2220 [HAOI2012]容易题 然而蒟蒻还是先自闭了一会... ...
- Ubuntu18.04-MySQL8.0-表名大小写敏感-远程连接
1.卸载 停止服务 sudo service mysql stop 删除mysql服务 sudo apt-get remove mysql-server 删除其他组件 sudo apt-get aut ...