Abstract-Miniaturization of devices with higher computational capacity coupled with advancement in communication technologies is driving the growth of deployment of sensors and actuators in our surroundings. To keep up the pace with this growth, these tiny, battery-powered devices need small-sized and high-energy density batteries for longer operation time, which calls for improvement in battery technologies. An alternative is to harvest energy from the environment. An important aspect of energy harvesting is that the devices go through birth and death cycle with respect to their power unlike battery powered ones. Another important aspect is that context information is also generated while devices harvest energy from their ambiance. In this article we provide a comprehensive study of various types of energy harvesting techniques. We then provide some models used in energy harvesting systems and the design of such systems. We also throw light on the power management and networking aspects of the energy harvesting devices. At the end we discuss the major issues and avenues for further research.