ruby_pins 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 79f3b3659b23135b0f5f99bab04bdb6eae95aee9
4
- data.tar.gz: e4d3294203d73744ecb3a000d3f1dda280c5967e
3
+ metadata.gz: e7e272be6fcee3162904989970bb34925ddd8d83
4
+ data.tar.gz: eba0917f3a811475a6661c6b82480abdf24b9080
5
5
  SHA512:
6
- metadata.gz: 63e300e605e62b20fc836d1765d46d272a35d27fc05e614a06150ba9d05a57b11d7afb86744cac4d3a7fa944d0e36b52a01c855d787723ef0c0bb45b29cc5e18
7
- data.tar.gz: df6fe7a074a7d72c71c94a623b3f22976456874368c088ef06f1e4665336f7af09076b190a00c21a6a43e9538aab51f600023b9837cea55327bfff189cfa7914
6
+ metadata.gz: 76eba6e2779cf371d9aa1e5f49558071fac48ef61296a25e340455496611acf16bb0a6aae728b6a825c5912f45d460e68cdb020db7f12715e1e62d3c9cda426d
7
+ data.tar.gz: 72e5cd4d2486f81d804c1f55feeca07071d945f61fd9a7575061b7e44cb92a52ca0283a6b64528a6198d8d0b83d2232a58e586a232f88a807f14be5e326d8c7b
data/.byebug_history ADDED
@@ -0,0 +1,4 @@
1
+ q!
2
+ c
3
+ n
4
+ commands
data/README.md CHANGED
@@ -22,14 +22,48 @@ to your Gemfile, and run
22
22
  bundle
23
23
  ```
24
24
 
25
- ## Usage
25
+ # Usage
26
+
27
+ ## Basic pin
26
28
 
27
29
  Create a new pin:
28
30
 
29
31
  ```ruby
30
- # All arguments are optional, including the pin number!
31
- # Not much can be done without a pin number though!
32
- pin = RubyPins::Pin.new pin: 17, name: 'My Cool Pin!', state: :off
32
+ # Pins accept a pin #, a state (:on, :off), a name, and a host.
33
+ # If you running the code on the PI itself, the pin just needs a pin number!
34
+ # The default state is off
35
+ pin = RubyPins::Pin.new pin: 17
36
+ ```
37
+
38
+ Turn the pin on:
39
+
40
+ ```ruby
41
+ pin.on
42
+ ```
43
+
44
+ Turn the pin off:
45
+
46
+ ```ruby
47
+ pin.off
48
+ ```
49
+
50
+ ## Remote pin
51
+
52
+ Say what? You wanna control a Pi on your network, but run the code from a different computer?
53
+ ruby_pins has you covered!
54
+
55
+ Create a host:
56
+
57
+ ```ruby
58
+ pi_host = RubyPins::Host.new address: <ip_address>,
59
+ user: <unix_user(probably 'pi')>,
60
+ password: <unix password>
61
+ ```
62
+
63
+ Add this host to your pin
64
+
65
+ ```ruby
66
+ pin.host = pi_host
33
67
  ```
34
68
 
35
69
  Turn the pin on:
@@ -46,6 +80,17 @@ pin.off
46
80
 
47
81
  Now rewire your whole house to be interfaced from your Ruby app!
48
82
 
83
+ ## Note about pin numbers
84
+
85
+ ruby_pins expects the pin number to be the pin's GPIO number.
86
+ For example, when looking at the following pinout chart, if you wanted to
87
+ set your pin number to the 11th pin, or GPIO17, you would pass in
88
+ ```ruby
89
+ pin: 17
90
+ ```
91
+ Pinout chart:
92
+ https://www.element14.com/community/servlet/JiveServlet/previewBody/73950-102-10-339300/pi3_gpio.png
93
+
49
94
  ## Installing Ruby (and Rails)
50
95
 
51
96
  This is the guide I use to install Ruby and Ruby on Rails on my Pis:
@@ -61,4 +106,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERN
61
106
  ## License
62
107
 
63
108
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
64
-
data/lib/.byebug_history CHANGED
@@ -1 +1,13 @@
1
1
  q!
2
+ s
3
+ script
4
+ s
5
+ n
6
+ turn_on
7
+ set_out
8
+ export
9
+ c
10
+ script
11
+ s
12
+ c
13
+ q!
@@ -0,0 +1,12 @@
1
+ module RubyPins
2
+
3
+ class Host
4
+ attr_accessor :address, :user, :password
5
+
6
+ def initialize args
7
+ args.each {|k, v| self.send "#{k}=", v}
8
+ end
9
+ end
10
+
11
+
12
+ end
@@ -0,0 +1,79 @@
1
+ module RubyPins
2
+
3
+ class Pin
4
+ attr_accessor :pin, :name, :state, :pinset, :host
5
+
6
+ def initialize args
7
+ args.each {|k, v| self.send "#{k}=", v}
8
+ self.state= :off unless self.state
9
+ self.host ||= :local
10
+ end
11
+
12
+ def state= state
13
+ self.send state
14
+ end
15
+
16
+ def pin= pin
17
+ unexport if self.pin
18
+ @pin = pin
19
+ end
20
+
21
+ def on
22
+ @state = :on
23
+ run export, set_out, turn_on
24
+ end
25
+
26
+ def off
27
+ @state = :off
28
+ run(unexport) if exported?
29
+ end
30
+
31
+ def run *commands
32
+ std_out = ''
33
+ if host == :local
34
+ commands.each {|cmd| std_out << %x(#{cmd})}
35
+ else
36
+ commands.each do |cmd|
37
+ Net::SSH.start(self.host.address, self.host.user, password: self.host.password) do |ssh|
38
+ std_out << ssh.exec!(cmd)
39
+ end
40
+ end
41
+ end
42
+ std_out
43
+ end
44
+
45
+ def turn_on
46
+ set_value 1
47
+ end
48
+
49
+ def set_out
50
+ set_direction 'out'
51
+ end
52
+
53
+ def send_in
54
+ set_direction 'in'
55
+ end
56
+
57
+ def set_direction dir
58
+ "echo #{dir} > /sys/class/gpio/gpio#{self.pin}/direction"
59
+ end
60
+
61
+ def set_value val
62
+ "echo #{val} > /sys/class/gpio/gpio#{self.pin}/value"
63
+ end
64
+
65
+ def export
66
+ "echo #{self.pin} > /sys/class/gpio/export"
67
+ end
68
+
69
+ def unexport
70
+ "echo #{self.pin} > /sys/class/gpio/unexport"
71
+ end
72
+
73
+ def exported?
74
+ run("ls /sys/class/gpio/").include? "#{self.pin}"
75
+ end
76
+
77
+ end
78
+
79
+ end
@@ -1,3 +1,3 @@
1
1
  module RubyPins
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/ruby_pins.rb CHANGED
@@ -1,70 +1,9 @@
1
- require "ruby_pins/version"
1
+ require 'ruby_pins/version'
2
+ require 'ruby_pins/pin'
3
+ require 'ruby_pins/host'
4
+ require 'net/ssh'
5
+ require 'byebug'
2
6
 
3
7
  module RubyPins
4
8
 
5
- class Pin
6
- attr_accessor :pin, :name, :state
7
-
8
- def initialize args
9
- args.each {|k, v| self.send "#{k}=", v}
10
- self.state= :off unless self.state
11
- end
12
-
13
- def state= state
14
- self.send state
15
- end
16
-
17
- def pin= pin
18
- unexport if self.pin
19
- @pin = pin
20
- end
21
-
22
- def on
23
- @state = :on
24
- export
25
- set_out
26
- turn_on
27
- end
28
-
29
- def off
30
- @state = :off
31
- unexport if exported?
32
- end
33
-
34
- def turn_on
35
- set_value 1
36
- end
37
-
38
- def set_out
39
- set_direction 'out'
40
- end
41
-
42
- def send_in
43
- set_direction 'in'
44
- end
45
-
46
- def set_direction dir
47
- `echo #{dir} > /sys/class/gpio/gpio#{self.pin}/direction`
48
- end
49
-
50
- def set_value val
51
- `echo #{val} > /sys/class/gpio/gpio#{self.pin}/value`
52
- end
53
-
54
- def export
55
- `echo #{self.pin} > /sys/class/gpio/export`
56
- end
57
-
58
- def unexport
59
- `echo #{self.pin} > /sys/class/gpio/unexport`
60
- end
61
-
62
- def exported?
63
- File.directory? "/sys/class/gpio/gpio#{self.pin}"
64
- end
65
-
66
- end
67
-
68
9
  end
69
-
70
-
data/ruby_pins.gemspec CHANGED
@@ -4,22 +4,23 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'ruby_pins/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "ruby_pins"
7
+ spec.name = 'ruby_pins'
8
8
  spec.version = RubyPins::VERSION
9
- spec.authors = ["MainShayne233"]
10
- spec.email = ["shaynetremblay@hotmail.com"]
9
+ spec.authors = ['MainShayne233']
10
+ spec.email = ['shaynetremblay@hotmail.com']
11
11
 
12
12
  spec.summary = "Ridiculously simple way to interact with your Raspberry Pi's GPIO pins, with Ruby!"
13
13
  spec.homepage = 'https://github.com/MainShayne233/ruby_pins'
14
- spec.license = "MIT"
14
+ spec.license = 'MIT'
15
15
 
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
18
+ spec.bindir = 'exe'
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.12"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "rspec", "~> 3.0"
22
+ spec.add_development_dependency 'bundler', '~> 1.12'
23
+ spec.add_development_dependency 'rake', '~> 10.0'
24
+ spec.add_development_dependency 'rspec', '~> 3.0'
25
+ spec.add_dependency 'net-ssh', '~> 3.2'
25
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_pins
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - MainShayne233
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-08 00:00:00.000000000 Z
11
+ date: 2016-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: net-ssh
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.2'
55
69
  description:
56
70
  email:
57
71
  - shaynetremblay@hotmail.com
@@ -59,6 +73,7 @@ executables: []
59
73
  extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
76
+ - ".byebug_history"
62
77
  - ".gitignore"
63
78
  - ".rspec"
64
79
  - ".travis.yml"
@@ -71,6 +86,8 @@ files:
71
86
  - bin/setup
72
87
  - lib/.byebug_history
73
88
  - lib/ruby_pins.rb
89
+ - lib/ruby_pins/host.rb
90
+ - lib/ruby_pins/pin.rb
74
91
  - lib/ruby_pins/version.rb
75
92
  - ruby_pins.gemspec
76
93
  homepage: https://github.com/MainShayne233/ruby_pins