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 ...
随机推荐
- C#开发点滴记录
1.开发windows服务程序,不应该在程序中调用windform相关的方法与类库,会产生未知的异常,windows服务中是可以产生日志文件的,会生成在安装服务的当前路径下面,比如服务为D:/MySe ...
- Wireless-MCS
MCS是modulation and coding scheme的缩写,可以翻译为调制和编码格式,我们可以选择配置该参数,来选择AP和Client之间传输的MCS rate,这些数据速率是使用shor ...
- node vue 项目git 管理
push 上传到云的时候,依赖包及相关文件是不上传上去的, 所以每次克隆到本地后,node 项目运行前须要 npm install 安装对应依赖 vue 项目编译前也须要 npm install,安 ...
- 在Visual Studio 2017中,.NET(C#)通过Oracle.ManagedDataAccess来连接Oracle数据库
C#如何通过Oracle.ManagedDataAccess来连接Oracle数据库 1.先创建一个项目,鼠标右击项目中的引用,再点击管理NuGet程序包(也可以先下载dll文件,再选添加引用),在搜 ...
- LVS负载均衡软件使用及(LVS简介、三种工作模式、十种调度算法)
一.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案, ...
- MYSQL优化考虑十个方面
1)索引 2)sql优化 3)锁 4)延迟 5)参数优化 6)连接数 7)cpu 8)iops 9)磁盘 10)内存
- 「JSOI2010」挖宝藏
「JSOI2010」挖宝藏 传送门 由于题目中说道挖一个位置的前提是挖掉它上面的三个,以此类推可以发现,挖掉一个点就需要挖掉这个点往上的整个倒三角,那么也就会映射到 \(x\) 轴上的一段区间(可以发 ...
- Vulnhub_DC8 记录
目录 DC8 经验 & 总结 步骤流水 信息搜集 80端口 获取Shell 提权 DC8 经验 & 总结 对页面的功能和对应的url要敏感. 所有的功能都要测试,要雨露均沾. 提示说的 ...
- Spring Boot 2.x教程-Thymeleaf 原理是什么
layout: post title: Spring Boot 2.x教程-Thymeleaf 原理是什么 categories: SpringBoot description: Spring Boo ...
- idea没有import project解决办法
参考:https://blog.csdn.net/zengxiaosen/article/details/52807540